我正在尝试在增量表之上创建一个外部 BQ 外部表,该表使用谷歌存储作为存储层。在增量表上,我们执行 DML,其中包括删除。
我可以在所有增量文件都存在的 gs 存储桶顶部创建一个 BQ 外部表。然而,它甚至会拉取删除记录,因为 BQ 外部表无法读取 delta 的事务日志,其中它说明要考虑哪些 parquet 文件以及要删除哪些文件。
除了以编程方式将数据从 delta 复制到 BQ 之外,有没有一种方法可以将 BQ 中的 delta 表(gs 位置)的最新快照公开为外部表?
Dataproc 集群是使用2.0.x带有 delta io 包的映像创建的io.delta:delta-core_2.12:0.7.0
Spark 版本是 3.1.1
Spark shell 启动:
pyspark --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
Run Code Online (Sandbox Code Playgroud)
执行命令以创建增量表并插入到增量 sql 中:
spark.sql("""CREATE TABLE IF NOT EXISTS customer(
c_id Long, c_name String, c_city String
)
USING DELTA LOCATION 'gs://edw-bi-dev-dataexports/delta-table-poc/dt_poc/customer'
""")
spark.sql("INSERT INTO customer VALUES(1, 'Shawn', 'Tx')")
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/spark/python/pyspark/sql/session.py", line 719, in sql
return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
File "/usr/lib/spark/python/lib/py4j-0.10.9-src.zip/py4j/java_gateway.py", line 1305, in __call__
File "/usr/lib/spark/python/pyspark/sql/utils.py", line 111, in deco …Run Code Online (Sandbox Code Playgroud) apache-spark pyspark google-cloud-dataproc databricks delta-lake