dbt在Databricks创建外部表时CSV列映射异常问题及解决方案
遇到的问题
我是dbt新手,正在Databricks中通过外部表创建表,已在raw/source.yaml中完成如下定义:
- name: table_1 freshness: warn_after: {count: 12, period: hour} error_after: {count: 24, period: hour} external: location: "{{'s3://datahub-' + env_var('environment') + '-raw/table_1/'}}" using: csv infer_schema: true partitions: - name: timestamp data_type: integer columns: - name: col_1 data_type: string - name: col_2 data_type: string - name: col_n data_type: string
操作背景
CSV文件包含的列数多于YAML中定义的列,执行命令:
dbt run-operation stage_external_sources --args "{select: raw.table_1}" --vars "ext_full_refresh: true"
创建表后,不需要的列的数据填充到了我定义的列中。我曾尝试通过infer_schema强制匹配schema,但不确定它是否仅作用于数据类型,也不清楚如何让数据适配YAML中定义的schema,希望得到解决方法。
解决方案
CSV文件的列顺序必须与定义一致。
- 指定所有列名及数据类型
- CSV需匹配列顺序,其他格式需匹配列名
- 部分数据库支持schema自动推断
内容的提问来源于stack exchange,提问作者Akvárium
相关产品推荐
相关产品推荐

