如何用dbt上传包含换行符的csv数据



我有一个第三方生成的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外部表传递选项字典,该字典映射到此处记录的选项。

对于您的情况,应该是quoteallowQuotedNewlines选项。如果你选择使用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文件。

相关内容

  • 没有找到相关文章

最新更新