Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage
Posted
技术标签:
【中文标题】Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage【英文标题】:Google BigQuery: Upload ExecuteQuery result to Google Cloud Storage in json format 【发布时间】: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 );
【问题讨论】:
【参考方案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 时自动检测架构以自动检测字段数据类型。以上是关于Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage的主要内容,如果未能解决你的问题,请参考以下文章
从 Google 脚本将数据插入 BigQuery:遇到“”
将 Firebase Google Analytic 数据导入 BigQuery 时,Google 是不是会收取流媒体费用?
我们可以将 BigQuery 中的数据导入 Google 表格吗?