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

如何在Google Cloud Function中将BigQuery导出的JSON压缩后存入Cloud Storage?

解决方案:BigQuery导出JSON并自动压缩为Gzip存入Cloud Storage

你不需要额外集成pako这类压缩工具,BigQuery的extract方法本身支持直接导出GZIP压缩的文件,这比在云函数里处理压缩更高效——由服务端直接完成压缩和传输,无需占用云函数的计算资源。

修改步骤

  1. 调整文件名后缀:将输出文件名改为.json.gz,便于Cloud Storage及其他工具自动识别压缩格式
  2. 添加压缩配置:在extract的参数选项中加入compression: 'GZIP',告知BigQuery自动压缩输出内容

修改后的完整代码

const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');
const functions = require('@google-cloud/functions-framework');

const bigquery = new BigQuery();
const storage = new Storage();

functions.http('extractTableJSON', async (req, res) => {
    const DateYYYYMMDD = new Date().toISOString().slice(0,10).replace(/-/g,"");

    const datasetId = "dataset-1";
    const tableId = "example";
    const bucketName = "domain.appspot.com";
    // 修改文件名后缀为json.gz,标识压缩格式
    const filename = `/cache/${DateYYYYMMDD}/example.json.gz`;

    const options = {
        format: 'json',
        location: 'US',
        // 开启BigQuery原生GZIP压缩
        compression: 'GZIP'
    };

    try {
        const [job] = await bigquery
            .dataset(datasetId)
            .table(tableId)
            .extract(storage.bucket(bucketName).file(filename), options);

        console.log(`Job ${job.id} created.`);
        
        // 先检查错误再返回响应,避免重复调用res.send导致报错
        const errors = job.status.errors;
        if (errors && errors.length > 0) {
            console.error('Extract job errors:', errors);
            return res.status(500).send(errors);
        }

        res.send(`Job ${job.id} created.`);
    } catch (err) {
        console.error('Error running extract job:', err);
        res.status(500).send(err.message);
    }
});

关键说明

  • 原生压缩无需额外依赖:BigQuery直接在导出流程中完成压缩,不需要引入pako,减少代码复杂度和云函数的资源消耗
  • 传输与存储优化:压缩后的文件体积更小,从BigQuery到Cloud Storage的传输速度更快,同时节省存储成本
  • 格式自动识别:.json.gz后缀让Cloud Storage、BigQuery或其他工具可以自动解压读取内容,无需手动处理压缩逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:31:14