ไม่สามารถสืบค้ AWS กาว/Athena มุมมองใน Databricks Runtime['ของจาวา.แลงIllegalArgumentException:ไม่สามารถสร้างเป็นเส้นทางจากการล้างข้อความ;']

0

คำถาม

พยายามจะอ่านหนังสือ view ซึ่งถูกสร้างขึ้น AWS Athena (จากพื้นฐานเป็นกาวโต๊ะนั่นชี้ไปที่การ S3 น parquet แฟ้ม)โดยใช้ pyspark เป็น Databricks เป็นกลุ่มโยต่อไปนี้เกิดข้อผิดพลาดสำหรับคำที่ไม่รู้จักเหตุผล:

java.lang.IllegalArgumentException: Can not create a Path from an empty string;

คนแรกสมมติฐานที่เป็นสิทธิ์ในการเข้าใช้งานเป็นหายตัวไปแต่นั่นไม่ใช่คดีนี้

ตอนที่เก็บตามหาฉันพบตาม Databricks'โพสเรื่องเหตุผลสำหรับการปัญหานี้: https://docs.databricks.com/data/metastores/aws-glue-metastore.html#accessing-tables-and-views-created-in-other-system

1

คำตอบที่ดีที่สุด

0

ฉันสามารถมากที่ต้องควบคุมสคริปต์เป็นภาษาไพธอนที่จะแก้ไขปัญหา มันกลายเป็นว่านี่เป็นข้อยกเว้นเกิดขึ้นเพราะ Athena และทันใดนั้นเองร้านมุมมองข้อมูลกำกับภาพในรูปแบบนั่นคือแตกต่างจากสิ่งที่ Databricks Runtime และไฟคาดหวังไว้ คุณจะต้องสร้างขึ้นใหม่พวกเขาใช้ไฟ(จุภาษา sql).

สคริปต์+เรียกตัวอย่าง:

import boto3
import time


def execute_blocking_athena_query(query: str, athenaOutputPath, aws_region):
    athena = boto3.client("athena", region_name=aws_region)
    res = athena.start_query_execution(QueryString=query, ResultConfiguration={
        'OutputLocation': athenaOutputPath})
    execution_id = res["QueryExecutionId"]
    while True:
        res = athena.get_query_execution(QueryExecutionId=execution_id)
        state = res["QueryExecution"]["Status"]["State"]
        if state == "SUCCEEDED":
            return
        if state in ["FAILED", "CANCELLED"]:
            raise Exception(res["QueryExecution"]["Status"]["StateChangeReason"])
        time.sleep(1)


def create_cross_platform_view(db: str, table: str, query: str, spark_session, athenaOutputPath, aws_region):
    glue = boto3.client("glue", region_name=aws_region)
    glue.delete_table(DatabaseName=db, Name=table)
    create_view_sql = f"create view {db}.{table} as {query}"
    execute_blocking_athena_query(create_view_sql, athenaOutputPath, aws_region)
    presto_schema = glue.get_table(DatabaseName=db, Name=table)["Table"][
        "ViewOriginalText"
    ]
    glue.delete_table(DatabaseName=db, Name=table)

    spark_session.sql(create_view_sql).show()
    spark_view = glue.get_table(DatabaseName=db, Name=table)["Table"]
    for key in [
        "DatabaseName",
        "CreateTime",
        "UpdateTime",
        "CreatedBy",
        "IsRegisteredWithLakeFormation",
        "CatalogId",
    ]:
        if key in spark_view:
            del spark_view[key]
    spark_view["ViewOriginalText"] = presto_schema
    spark_view["Parameters"]["presto_view"] = "true"
    spark_view = glue.update_table(DatabaseName=db, TableInput=spark_view)

create_cross_platform_view("<YOUR DB NAME>", "<YOUR VIEW NAME>", "<YOUR SQL QUERY>", <SPARK_SESSION_OBJECT>, "<S3 BUCKET FOR OUTPUT>", "<YOUR-ATHENA-SERVICE-AWS-REGION>")

โปรดจำไว้ว่ามันทำให้สคริปต์ของมุมมองได้พูดถึงประเด็นสำคัญกับกาว/Athena.

จะอ้างอิงไปยัง:

2021-11-19 13:30:14

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่