在 Windows 上使用 bq load 和 python 子进程分隔的加载管道

Posted

技术标签:

【中文标题】在 Windows 上使用 bq load 和 python 子进程分隔的加载管道【英文标题】:Load pipe delimited using bq load and python subprocess on Windows 【发布时间】:2021-06-21 15:28:53 【问题描述】:

我正在尝试使用 BQ LOAD 命令将表从 Google Cloud Storage 加载到 Bigquery。 为此,我使用了一个使用 subprocess 库的 python 脚本。 它工作正常,除了一个以竖线 (|) 作为分隔符的表。

我尝试了很多方法来解决这个问题,但没有任何好的结果。

如果我在 CMD (Windows) 中尝试这个,它可以工作:

bq load --source_format=CSV --field_delimiter="|" Dataset.TableName gs://sourcefile.CSV C:\schemafile.json

但如果我尝试在 python 中传递相同的参数,我会收到以下错误:

BigQuery error in load operation: Field delimiter must be a single character,
found:""|"".

这是我正在使用的代码(在 Windows 中):

params.append(str("bq"))
params.append(str("load"))
params.append(str("--source_format=CSV"))
params.append(str("--field_delimiter="+field_delimiter))
params.append(str(dest_dataset_table))
params.append(str(source_path))
params.append(str(schema_path))
process = subprocess.run(params, shell=True, capture_output=True)

如何转义或加载它? 谢谢!

【问题讨论】:

【参考方案1】:

你有两个选择:

    传递您的 python 脚本 --field-delimiter 值,不带引号。
bq load --source_format=CSV --field_delimiter=| Dataset.TableName gs://sourcefile.CSV C:\schemafile.json
    在提交作业之前从字段分隔符中去除多余的引号:
params.append(str("--field_delimiter="+field_delimiter.strip('"')))

【讨论】:

以上是关于在 Windows 上使用 bq load 和 python 子进程分隔的加载管道的主要内容,如果未能解决你的问题,请参考以下文章

使用 bq load 加载带有 NULL 列的 CSV

如何使用“bq load”在 BigQuery 中存储超过 9 个高精度小数?

我可以使用 BQ 命令行工具从 Windows 命令提示符中的文件运行查询吗?

如何获得 BQ 文件加载的进度

在 Windows 命令提示符下检测到 BigQuery,但在 Bash 上未检测到

在 BigQuery 上上传和导入数据时从 bq 工具获取错误 - “后端错误”