我使用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文件(随时接受建议)
我输入的语法错误还是可以做到?
答案 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文件上创建分区,您必须采用不同的路由,如果您有兴趣的话,稍后我可以为您解释;)