Bigquery - 处理 CSV 中的双引号和管道字段分隔符(联合 Table)

Bigquery - Handle Double Quotes & Pipe Field Separator in CSV (Federated Table)

我目前面临将数据加载到大查询中甚至创建联合 table 的问题,因为传入数据由 | 管道符号分隔,文件内的字段上带有转义双引号

示例数据(还尝试使用双引号转义双引号值,即字段级别的 ""

13|2|"\"Jeeps, Trucks & Off-Roa"|"JEEPSTRU"

创建 DDL

CREATE OR REPLACE EXTERNAL TABLE `<project>.<dataset>.<table>`
WITH PARTITION COLUMNS (
    dt DATE
    )
OPTIONS (
     allow_jagged_rows=true,
     allow_quoted_newlines=true,
     format="csv",
     skip_leading_rows=1,
     field_delimiter="|",
     uris=["gs://path/to/bucket/table/*"],
     hive_partition_uri_prefix='gs://path/to/bucket/table'
)

查询

SELECT
  *
FROM
  `<project>.<dataset>.<table>`
WHERE field_ like '%Jeep%'

错误

Error while reading table: <project>.<dataset>.<table>, error message: Error detected while parsing row starting at position: 70908. Error: Data between close double quote (") and field separator.

但是,如果我使用选项引号空字符 quote="" 创建 table,它会起作用,这使得很难在 SQL 查询

上过滤掉

我需要将 field_ 数据加载为 "Jeeps, Trucks & Off-Roa

我试图找到各种文档和 Whosebug 问题(因为一切都过时或无法正常工作 - 或者不幸的是我)我再次发布这个问题。

我有一个非常基本的问题 > 在不预处理 csv/psv 原始数据的情况下,在联合大查询 table 的列中转义双引号以避免此问题的更好方法是什么?

这不是外部 table 或 bigquery 的问题,而是 CSV 文件功能的问题。我在UI中上传数据到table时有过一次类似的情况。我发现了一些来源(顺便说一句,我现在找不到)应该在 CSV 文件中使用双引号两次("")来获得这种行为,比如使用你的例子:

13|2|"""Jeeps, Trucks & Off-Roa"|"JEEPSTRU"

我已经在你的样本中测试过了。当我从 csv 下载数据到 table 时,我遇到了同样的错误。在使用上面的方法后,它按预期工作了。结果字段值为:

"Jeeps, Trucks & Off-Roa

我想它对你也有用。

编辑:我在 Wikipedia:

的 CSV 基本规则中找到了它
  • Each of the embedded double-quote characters must be represented by a pair of double-quote characters.

1997,Ford,E350,"Super, ""luxurious"" truck"