【问题标题】:Google BigQuery: Upload ExecuteQuery result to Google Cloud Storage in json formatGoogle BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage
【发布时间】:2018-08-14 12:51:10
【问题描述】:

我正在导入包含重复记录的 bigquery 表,我需要将这些记录上传到谷歌云存储,如何将结果转换为 json 格式以便将其存储在谷歌云中?

下面是我的代码:

  BigQueryClient Client = BigQueryClient.Create("test", _googleCredential)

   string query = @"select * from `projecttest.TestDataset.CostData`";

 result = Client.ExecuteQuery(query, parameters: null, queryOptions: new QueryOptions { UseLegacySql = false });

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我看到你对整个表执行此操作 - 你应该使用 JSON 格式的导出作业

    【讨论】:

    • 感谢您的回复,能否请您提供使用 c# 导出作业的文档。你指的是github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/…中的方法ExportJsonToGcs@
    • 我必须导入其中有重复记录的通配符表。因此,很难通过匹配每一行/列来创建 json。我们有什么方法可以跳过手动创建 json 吗?
    • 当然。你可以试试这个方法(我不再是 c# 人,所以不能肯定地说 - 相关的 api 是 here 并且你在导出时不需要设置模式 - 请参阅 here 以设置所需的属性。也 - 重要- SELECT * 产生扫描整个表的成本与导出是免费的
    【解决方案2】:

    您可以使用 Exporting Table Data BigQuery 功能以多种格式将您的表数据从 BigQuery 导出到 GCS,例如 JSON, CSV and Avro 导出格式.

    我建议您查看 Exporting data stored in BigQuery 官方文档,其中包含一些有用的示例,以通过 API、Web UI、命令行和客户端库提交提取作业,以防您使用一种特定的编程语言,如以下 C# 代码示例所示:

    public void ExportJsonToGcs(
        string datasetId, string tableId, string bucketName, string fileName,
        BigQueryClient client)
    {
        StorageClient gcsClient = StorageClient.Create();
        string contentType = "application/json";
        // Get Table and append results into StringBuilder.
        PagedEnumerable<TableDataList, BigQueryRow> result = client.ListRows(datasetId, tableId);
        StringBuilder sb = new StringBuilder();
        foreach (var row in result)
        {
            sb.Append($"{{\"title\" : \"{row["title"]}\", \"unique_words\":\"{row["unique_words"]}\"}}{Environment.NewLine}");
        }
        // Save stream to Google Cloud Storage.
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())))
        {
            var obj = gcsClient.UploadObject(bucketName, fileName, contentType, stream);
        }
    }
    

    【讨论】:

    • 我看到了这段代码,但我必须上传其中包含记录数据类型的表。导入这些表是否可行?
    • 根据Specifying nested and repeated columns 文档,您可以上传具有RECORD 数据类型的表,因为BigQuery 支持来自支持基于对象架构的源格式(例如JSON 文件)的嵌套和重复数据.
    • 如果我需要上传 n 个表,那么手动为每个表指定架构不是一个好习惯。
    • 我同意。提到嵌套和重复列引用以指出对RECORD 和STRUCT 数据类型的支持。基于此,您应该能够在处理这些记录时毫无问题地使用 导出表数据 BigQuery 功能。
    • 但是,由于您无法在单个导出作业中从多个表中导出数据,我认为您可以获取一个 BigQuery 表列表并使用它将您的表一个一个地移入/移出 GCS,添加将它们加载到 BigQuery 时自动检测架构以自动检测字段数据类型。
    猜你喜欢
    • 2014-09-18
    • 2018-06-20
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    相关资源
    最近更新 更多