[英]BigQuery Could not parse 'null' as int for field
試圖將 csv 文件加載到 bigquery 表中。 有些列的類型為 INTEGER,但某些缺失值為 NULL。 所以當我使用命令bq load加載時,出現了如下錯誤:
無法將“null”解析為字段的 int
所以我想知道處理這個問題的最佳解決方案是什么,必須先重新處理數據才能加載 bq?
您需要轉換數據以最終獲得預期的架構和數據。 將列指定為具有類型 STRING,而不是 INTEGER。 將 CSV 文件加載到您不打算長期使用的表中,例如 YourTempTable。 在 BigQuery UI 中,點擊“顯示選項”,然后選擇具有所需表名的目標表。 現在運行查詢:
#standardSQL
SELECT * REPLACE(SAFE_CAST(x AS INT64) AS x)
FROM YourTempTable;
這會將字符串值轉換為整數,其中'null'
被視為null
。
請嘗試作業配置設置。
job_config.null_marker = 'NULL'
配置.load.nullMarker
細繩
[可選] 指定表示 CSV 文件中空值的字符串。 例如,如果您指定“\N”,BigQuery 在加載 CSV 文件時會將“\N”解釋為空值。 默認值為空字符串。 如果您將此屬性設置為自定義值,則當除 STRING 和 BYTE 之外的所有數據類型都存在空字符串時,BigQuery 會拋出錯誤。 對於 STRING 和 BYTE 列,BigQuery 將空字符串解釋為空值。
https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
BigQuery 控制台有其局限性,不允許您在從 CSV 加載數據時指定空標記。 但是,可以使用 BigQuery 命令行工具的bq load
命令輕松完成。 我們可以使用--null_marker
標志來指定在這種情況下簡單為null
的標記。
bq load --source_format=CSV \
--null_marker=null \
--skip_leading_rows=1 \
dataset.table_name \
./data.csv \
./schema.json
將 null_marker 設置為 null 就可以解決這個問題。 如果表中已經存在有效模式,則可以省略schema.json部分。 使用--skip_leading_rows=1
是因為我的第一行是標題。 您可以在 BigQuery 文檔中了解有關bg load 命令的更多信息。
但是,load 命令可以讓您一次創建和加載一個表。 需要在以下格式的 JSON 文件中指定架構:
[
{
"description": "[DESCRIPTION]",
"name": "[NAME]",
"type": "[TYPE]",
"mode": "[MODE]"
},
{
"description": "[DESCRIPTION]",
"name": "[NAME]",
"type": "[TYPE]",
"mode": "[MODE]"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.