在ADLS Gen2顶部的Delta湖中使用非托管表

时间:2020-01-15 09:11:01

标签: apache-spark pyspark azure-data-factory delta-lake

我使用ADF以Parquet Snappy格式将数据从SQL Server接收到ADLS GEN2,但是接收器中的文件大小高达120 GB,当我在Spark中读取此文件时,大小引起了很多问题并将该文件中的数据与其他许多Parquet文件结合起来。

我正在考虑将Delta Lake的unmanage表与指向ADLS位置的位置一起使用,如果我不使用此方法指定任何分区,就可以创建UnManaged表

转换为DELTA实木复合地板。PATH TO FOLDER CONTAINING A PARQUET FILE(S)

但是如果我想对该文件进行分区以进行查询优化

“转换为DELTA实木复合地板。PATH TO FOLDER CONTAINING A PARQUET FILE(S),PARTITIONED_COLUMN数据类型”

它给了我类似于屏幕截图中提到的错误(找到附件)。

文本错误:- org.apache.spark.sql.AnalysisException:预期有1个分区列:[<PARTITIONED_COLUMN>],但通过分析文件名发现了0个分区列:[]:abfss:// mydirectory @ myADLS .dfs.core.windows.net / level1 / Level2 / Table1.parquet.snappy;

我无法使用带有分区详细信息的ADF创建此Parquet文件(随时接受建议)

我输入的语法错误还是可以做到?

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。当您使用上述方法将镶木地板文件转换为delta时,Delta将寻找具有分区信息以及“ Partitioned By”子句中提到的列名的正确目录结构。

例如,我有一个名为/ Parent的文件夹,在其中有一个带有分区信息的目录结构,分区的镶木地板文件在分区的文件夹内保持了一层,文件夹名称是这样的

/Parent/Subfolder=0/part-00000-62ef2efd-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet /父母/子文件夹= 1 / part-00000-fsgvfabv-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet /父母/子文件夹= 2 / part-00000-fbfdfbfe-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet /Parent/Subfolder=3/part-00000-gbgdbdtb-b88b-4dd1-ba1e-3a146e986212.c000.snappy.parquet

在这种情况下,子文件夹是在父级内部创建的分区。

转换为DELTA实木复合地板。/Parent/由(子文件夹INT)分区

仅采用此目录结构,并将整个分区数据转换为增量,并将分区信息存储在metastore中。

摘要:-此命令仅用于利用已经创建的分区Parquet文件。要在单个Parquet文件上创建分区,您必须采用不同的路由,如果您有兴趣的话,稍后我可以为您解释;)