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

Posted

技术标签:

【中文标题】Bigquery - 在 CSV(联合表)中处理双引号和管道字段分隔符【英文标题】:Bigquery - Handle Double Quotes & Pipe Field Separator in CSV (Federated Table) 【发布时间】: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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

"Jeeps, Trucks & Off-Roa

我想它也对你有用。

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

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

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

【讨论】:

谢谢,这很有魅力。应用双双引号时,某些字段的引号数为奇数 > 我认为这是因为从源设置了一些导出字段限制。现在很清楚如何转义引号了?

以上是关于Bigquery - 在 CSV(联合表)中处理双引号和管道字段分隔符的主要内容,如果未能解决你的问题,请参考以下文章

基于主键将两个表从BigQuery导出到CSV

BigQuery - 联合数据集中的所有表

使用联合查询将 bigquery 表与谷歌云 postgres 表合并

表不会加载到 BigQuery

在 Bigquery 中为多个 CSV 文件自动创建表

BigQuery 能否在 Google Cloud Storage 中基于 CSV 文件的外部表中使用通配符?