【发布时间】:2017-04-21 22:29:51
【问题描述】:
有没有办法使用 REST API 作为 CSV 从 Google BigQuery 导出具有嵌套架构的整个表?
有一个使用非嵌套架构的示例 (https://cloud.google.com/bigquery/docs/exporting-data)。这适用于我表中未嵌套的列。这是这部分的代码:
PagedEnumerable<TableDataList, BigQueryRow> result2 = client.ListRows(datasetId, result.Reference.TableId);
StringBuilder sb = new StringBuilder();
foreach (var row in result2)
{
sb.Append($"{row["visitorId"]}, {row["visitNumber"]}, {row["totals.hits"]}{Environment.NewLine}");
}
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())))
{
var obj = gcsClient.UploadObject(bucketName, fileName, contentType, stream);
}
在 BQ 中有诸如 totals.hits、totals.visits 之类的列...如果我尝试解决它们,我会收到错误消息,即没有这样的列。如果我正在处理“总计”,我会在 csv 的行中获得对象名称“System.Collections.Generic.Dictionary`2[System.String,System.Object]”。
有没有可能做这样的事情?最后,我希望我在 BQ 的 GA 中的表格作为 CSV 在其他地方。
【问题讨论】:
-
忘记 .NET 或明显的格式错误 - 带有嵌套表的 CSV 会是什么样子?嵌套的标头和数据会去哪里? CSV 是表格数据的简单 格式。你问的肯定不是那个。
-
您将如何使用这些数据?将其导入另一个数据库?自己处理?把它喂给R?你真的想要那个嵌套结构吗?如果您有大量数据,您可以使用 JSON,尤其是行分隔的 JSON。或者您可以先展平原始数据(最好在 original 查询中,而不是在客户端中)并导出普通的 CSV 文件
-
数据的目的地是 Azure Blob 存储(之后是 Azure ML)。我想将整个表(它是 BQ 中的 GA 每日生成的表)作为 csv 自动导出到 blob 存储中,以供进一步分析。所以我尝试使用 Google REST API 获取数据,在这个程序中进行转换并使用 Microsoft REST API 存储文件。 CSV 应该/可以看起来像从 BQ 生成的 csv。我的意思是取消嵌套后重复的数据很好。只是想得到一个像我在 BQ 中那样的未嵌套表。
-
然后在 BQ 中取消嵌套并导出未嵌套的结果。为什么在您的客户端代码中进行这样的转换?在任何情况下,您的代码都不会显示 what 在
totals行中。您必须执行某种循环来获取每个项目。 -
错误本身表明
totals是Dictionary<string,object>。只要您知道字段名称,您就可以使用totals["hits"]等获取单个值。或者您可以使用String.Join(","totals.Values)在一个步骤中加入所有字典的值。 Dictionary.Values 中的值使用与Dictionary.Keys相同的顺序。可以使用String.Join(",",tables.Keys)为嵌套表生成表头
标签: c# rest api google-bigquery