【问题标题】:Bigquery - Handle Double Quotes & Pipe Field Separator in CSV (Federated Table)Bigquery - 在 CSV(联合表)中处理双引号和管道字段分隔符
【发布时间】:2021-09-24 04:05:54
【问题描述】:

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

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

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="" 创建表,它会在 SQL 查询中难以过滤

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

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

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

【问题讨论】:

    标签: csv google-bigquery google-cloud-storage


    【解决方案1】:

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

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

    我已在您的样本中对其进行了测试。当我从 csv 将数据下载到表时,我得到了同样的错误。在上面使用后,它按预期工作。结果字段值为:

    "Jeeps, Trucks & Off-Roa
    

    我想它也对你有用。

    编辑:我在 Wikipedia 的 CSV 基本规则中找到了它:

    • 每个嵌入的双引号字符都必须由一对双引号字符表示。

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

    【讨论】:

    • 谢谢,这很有魅力。应用双双引号时,某些字段的引号数为奇数 > 我认为这是因为从源设置了一些导出字段限制。现在很清楚如何转义引号了?
    猜你喜欢
    • 2021-12-11
    • 2022-11-24
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多