我有一个第三方生成的CSV文件,我希望使用dbt seed
上传到Google BigQuery。
我设法手动将其上传到BigQuery,但我需要启用";带引号的换行符"默认情况下是关闭的。
当我运行dbt seed
时,我得到以下错误:
16:34:43 Runtime Error in seed clickup_task (data/clickup_task.csv)
16:34:43 Error while reading data, error message: CSV table references column position 31, but line starting at position:304 contains only 4 columns.
CSV中有32列。该文件包含带换行符的列值。我想这就是dbt解析器失败的地方。我检查了dbt种子配置选项,但没有发现任何相关的内容。
有什么想法吗?
据我所知,种子特性受到dbt核心内置内容的限制。所以种子不是我来这里的方式。你可以在dbt cre issues repo上看到扩大种子期权的请求历史(包括我自己对类似期权#3990的请求(,但我必须看到这方面的任何真正吸引力。
也就是说,对我来说效果很好的是将平面文件存储在gcp项目中的gcs存储桶中,然后利用dbt外部表包进行非常相似但更健壮的文件结构。我知道,管理这可能会带来很多开销,但如果种子文件继续以可以利用分区的方式扩展,则会变得非常非常值得。
更重要的是,正如Jeremy在stackoverflow的回答中提到的,
dbt-external-tables
包支持为BigQuery外部表传递选项字典,该字典映射到此处记录的选项。
对于您的情况,应该是quote
或allowQuotedNewlines
选项。如果你选择使用dbt-external-tables
,你的source.yml会看起来像:
gcs.yml
version: 2
sources:
- name: clickup
database: external_tables
loader: gcloud storage
tables:
- name: task
description: "External table of Snowplow events, stored as CSV files in Cloud Storage"
external:
location: 'gs://bucket/clickup/task/*'
options:
format: csv
skip_leading_rows: 1
quote: """
allow_quoted_newlines: true
或者类似的东西。如果你最终选择了这条路径,并将任务数据存储在一个日常分区上,比如tasks_2022_04_16.csv
,你可以访问该文件名和其他元数据——Jeremy也在这里与我共享了提供的伪卷:
检索";文件名";在dbt外部表侧面加载期间从gcp存储?
我发现它是一套功能强大的工具,专门用于BigQuery文件。