[英]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.