如何为ADLS容器中各Delta表生成独立的Parquet转换脚本
问题解决:生成单表独立的Delta转Parquet脚本
现有代码的问题
- 变量名大小写错误:
tablename应为table_name(Python区分大小写) - SELECT语句格式错误:列名和
FROM之间缺少空格,会导致SQL语法错误 - 字符串未闭合:生成的语句末尾缺少闭合的单引号和括号,语法不完整
- 未输出/执行生成的语句:仅赋值给变量但未处理,无法得到目标输出
修改后的代码
df = spark.sql("SHOW TABLES IN gold") df_rows = df.collect() table_names = [row["tableName"] for row in df_rows] for table_name in table_names: # 获取当前表的列名 df_cols = spark.sql(f"SHOW COLUMNS IN gold.{table_name}") column_names = [row["col_name"] for row in df_cols.collect()] # 生成格式正确的转换语句,使用f-string更易读 select_statement = ( f"spark.sql('SELECT {','.join(column_names)} FROM gold.{table_name}')" f".write.format('parquet').mode('overwrite').save('/mnt/gold/toParquet/{table_name}')" ) # 打印生成的语句,若需直接执行可替换为exec(select_statement) print(select_statement)
关键修改点说明
- 使用f-string替代字符串拼接,提升可读性并避免格式错误
- 修正变量名
table_name的大小写问题,匹配循环变量 - 在列名和
FROM之间添加空格,保证SQL语法合法 - 补全语句末尾的闭合符号,确保生成的代码语法完整
- 添加
print(select_statement)输出每张表对应的独立转换语句,如需直接执行脚本可替换为exec(select_statement)
示例输出
spark.sql('SELECT column1,column2 FROM gold.table1').write.format('parquet').mode('overwrite').save('/mnt/gold/toParquet/table1')
spark.sql('SELECT column_a,column_b FROM gold.table2').write.format('parquet').mode('overwrite').save('/mnt/gold/toParquet/table2')
内容的提问来源于stack exchange,提问作者Rchee
相关产品推荐
相关产品推荐

