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 & 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(联合表)中处理双引号和管道字段分隔符的主要内容,如果未能解决你的问题,请参考以下文章