You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含多行描述的TXT文件导入Google BigQuery?

我来帮你搞定这个带多行描述的TXT文件导入BigQuery的问题——这种字段里嵌换行的文件确实容易让常规导入逻辑翻车,给你两个实用的方案,按需选就行:

方案1:先预处理文件(推荐,操作更直观)

你的每条记录都是以「ID|平台|描述开头」这种带两个|的行启动的,后面的换行都是描述内容的一部分。我们可以用awk把每条记录合并成单行,把描述里的换行换成转义的\n(或者你喜欢的其他占位符),等导入BigQuery后再还原回去。

直接在终端运行这个awk命令处理你的TXT文件:

BEGIN { prev_record = "" }
{
    if ($0 ~ /\|.*\|/) {  # 判断当前行是不是新记录的开头(包含两个|)
        if (prev_record != "") {
            print prev_record  # 输出上一条完整记录
        }
        # 拆分当前行的ID、平台和描述开头
        split($0, parts, /\|/)
        prev_record = parts[1] "|" parts[2] "|" substr($0, length(parts[1]) + length(parts[2]) + 3)
    } else {
        # 把当前行追加到上一条记录的描述里,用转义\n代替换行
        prev_record = prev_record "\\n" $0
    }
}
END {
    print prev_record  # 输出最后一条记录
}

处理完之后,你的文件里每条记录都会变成单行,接下来就可以用BigQuery的常规流程导入:

  1. 在BigQuery控制台创建目标表,定义三个字段:id(STRING类型)、platform(STRING类型)、description(STRING类型)
  2. 选择处理好的文件,设置分隔符为|,完成导入
  3. 如果需要把描述里的转义\n还原成真实换行,执行这条SQL就行:
UPDATE `你的项目.你的数据集.你的表`
SET description = REPLACE(description, '\\n', '\n')
WHERE TRUE;
方案2:直接用BigQuery外部表处理(不用改原文件)

要是不想碰原文件,也可以通过外部表+SQL来合并多行记录:

  1. 先把原始TXT文件上传到Google Cloud Storage(GCS)
  2. 在BigQuery里创建外部表,格式选TEXT,字段分隔符随便挑一个你文件里肯定不会出现的字符(比如~),这样BigQuery会把每一行都当成一个叫raw_line的字段
  3. 运行下面的SQL来合并记录并拆分字段:
WITH numbered_records AS (
    SELECT
        raw_line,
        -- 给每条记录分配唯一ID:每遇到带两个|的行,ID就+1
        SUM(IF(raw_line LIKE '%|%|%', 1, 0)) OVER (ORDER BY _FILE_NAME, _OFFSET) AS record_group_id
    FROM
        `你的项目.你的数据集.你的外部表`
),
combined_raw AS (
    SELECT
        record_group_id,
        -- 把同组的行用换行符拼起来,还原完整记录
        STRING_AGG(raw_line, '\n' ORDER BY _OFFSET) AS full_record
    FROM
        numbered_records
    GROUP BY
        record_group_id
),
split_fields AS (
    SELECT
        -- 拆分ID和平台,用正则处理避免描述里有|的情况
        REGEXP_EXTRACT(full_record, r'^([^|]+)\|([^|]+)\|') AS id,
        REGEXP_EXTRACT(full_record, r'^[^|]+\|([^|]+)\|') AS platform,
        -- 提取第三个|之后的所有内容作为描述
        REGEXP_REPLACE(full_record, r'^[^|]+\|[^|]+\|', '') AS description
    FROM
        combined_raw
)
SELECT * FROM split_fields

这个SQL会自动把属于同一条记录的多行合并,然后拆分出三个字段,你可以把结果保存成正式表。

小提醒

如果你的描述字段里可能出现|字符,那方案1里用|做分隔符就会出问题——这时候预处理时可以换成更特殊的分隔符(比如###),或者直接用方案2的正则拆分方式,更稳妥。

内容的提问来源于stack exchange,提问作者arcee123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:06:22