我正在使用 polybase 导入镶木地板文件。
随着时间的推移,我们可能会在文件中添加或删除命名列。
当我添加一个额外的列时,我收到以下错误:
由于内部错误,外部文件访问失败:'文件 test.parquet:HdfsBridge::CreateRecordReader - 创建记录读取器时遇到意外错误:HadoopExecutionException:列数不匹配。源文件有 16 列,外部表定义有 15 列。
这是因为我添加了一个不在外部表定义中的附加列。
由于 parquet 包含文件模式并且外部表知道每列的名称,有没有办法可以设置它忽略额外未使用的列?
Polybase 没有这种能力。源文件和外部表定义必须匹配才能正常工作。只需在外部表定义中添加或删除其他列。然后,当您在数据库中物理创建表时,例如通过 CTAS,从您的 CTAS 语句中添加/删除附加列。
或者,考虑新的COPY INTO语句。这确实有能力指定一个列列表,例如
但是请注意,此功能是 i) 当前处于预览状态,ii) 用于复制到物理表(即不是外部表)中,以及 iii) 我没有专门使用 Parquet 测试列列表。