[英]How to stream upload CSV data to Google Cloud Storage (Python)
[英]How to upload csv data that contains newline with dbt
我有一个第 3 方生成的 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-core 内置内容的限制。 所以种子不是我这里的 go 的方式。 您可以在 dbt-cre 问题 repo 上查看扩展种子选项 的请求历史(包括我自己对类似可选性的请求#3990 ),但我必须看到这方面的任何真正吸引力。
也就是说,对我来说效果很好的是将 gcp 项目中的平面文件存储在 gcs 存储桶中,然后利用dbt-external-tables package 进行非常相似但更健壮的文件结构。 我知道管理这可能会产生很多开销,但如果您的种子文件继续以可以利用分区的方式扩展,那么它变得非常值得。
更重要的是 - 正如 Jeremy 在 stackoverflow 上的回答中提到的,
dbt-external-tables
package 支持传递 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-external-tables 侧载期间从 gcp 存储中检索“文件名”?
我发现它是一套非常强大的工具,专门用于 BigQuery 的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.