将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询

Posted

技术标签:

【中文标题】将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询【英文标题】:Converting a Cloud Storage file into a BigQuery Table/Dataset to then later query 【发布时间】:2017-01-24 00:15:04 【问题描述】:

我已经在这里工作了几天,但似乎这些示例不起作用,或者我可能遇到环境问题,所以我希望有人能提供帮助。

以下是我尝试过的方法:

我在 Mac 上安装了 Eclipse Neon。 已安装以下指南中提供的所有 Google API SDK 就像这里: https://developers.google.com/eclipse/docs/install-eclipse-4.6 我成功地遵循了这个快速入门: https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-eclipse

所以我有一个能够读取和写入 CloudStorage 的 Eclipse 数据流项目。很棒的东西。

目标/问题

我现在想从 GCS 获取数据,将其转换为 BigQuery 数据集。对于每个文件,我想创建一个新的数据集。这些细节对于这个问题并不是很重要,尽管它会是一个很好的樱桃,因为我被卡住的地方是一个简单的 Hello World 示例,它是带有 Eclipse 甚至 CLI 工具的 BigQuery。任何工作示例都将受到赞赏或对具有工作示例的现有文档的简单推动。同样,这可能是我使用 Eclipse 或 Maven 编译的方式,但我看不到任何加载基于 Google API 的项目的方法。

日食

在 Eclipse 中,我尝试了很多方法来简单地测试 BigQuery API:

    通过加载找到https://github.com/GoogleCloudPlatform/google-cloud-javagoogle-cloud-java-master 存储库来加载新的Java 项目

Eclipse Screenshot

    我继续尝试从“google-cloud-examples”目录加载示例。这似乎有问题,因为当我右键单击 CreateTableAndLoadData 类并选择运行它时,我收到一条错误消息,提示“选择不包含主类型”。这让我觉得很愚蠢,因为那里有一个 main 函数。

来自java-doc-samples的谷歌示例

然后我继续尝试 Google 自己的示例,这些示例实际上位于另一个名为 java-doc-sampleshttps://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/bigquery/cloud-client/src/main/java/com/example/bigquery/SimpleApp.java的存储库中

谷歌文档:https://cloud.google.com/bigquery/create-simple-app-api#bigquery-simple-app-query-java

我将它们加载到 Eclipse 中,但在编译过程中出现大量错误。 主要错误:

com.google.cloud 无法解析或包com.google.cloud.examples.bigquery.snippets 无法解析。我无法编译它。类名称有点不同,所以我尝试使用 Eclipse 自动建议更改这些名称,但最终 BigQueryOptions.getDefaultInstance() 最终成为未定义的方法。

CLI gcloud

在 CLI 中我尝试了 MVN 编译和运行 google-cloud-exmaples/...CreateTableAndLoadData.java

mvn -X compile exec:java  
-Dexec.mainClass=com.google.cloud.examples.bigquery.snippets.CreateTableAndLoadData    
-Dexec.args="--project=myuniqueproject \
--stagingLocation=gs://myuniquebucket/staging/ \
--runner=BlockingDataflowPipelineRunner"

但我收到以下错误:

[错误] 无法在项目 google-cloud-examples 上执行目标:可能 不解决项目的依赖关系 com.google.cloud:google-cloud-examples:jar:0.8.2-alpha-SNAPSHOT: 无法解决以下工件: com.google.cloud:google-cloud:jar:0.8.2-alpha-SNAPSHOT, com.google.cloud:google-cloud-nio:jar:0.8.2-alpha-SNAPSHOT:不能 查找工件 com.google.cloud:google-cloud:jar:0.8.2-alpha-SNAPSHOT -> [帮助 1]

【问题讨论】:

【参考方案1】:

我现在想从 GCS 获取数据,将其转换为 Bigquery 数据集

我假设您的意思是“Table”而不是“Dataset”。数据集是 BigQuery 表的集合。

您可以节省大量工作,只需使用联合源将文件直接从 GCS 读取到 BigQuery。

更多信息 -> https://cloud.google.com/bigquery/external-data-sources

【讨论】:

不想为自己节省大量的工作,就像我在努力实现我的目标一样。我的问题是关于使用 BigQuery API 将 GCS 文件移动到表中,以及似乎没有一个示例可以实际编译。对于非常大的数据文件,您建议的性能影响非常有限,更不用说如果 BQ 在 GCS 文件更新时正在读取可能会丢失数据。 1) 您从未在原始问题中提到文件会发生变化 2) 是什么让您认为性能受到了巨大影响?它都在 Google 基础架构上运行,因此速度仍然非常快 -> shinesolutions.com/2016/03/30/… 3) 我使用的示例编译得很好。

以上是关于将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询的主要内容,如果未能解决你的问题,请参考以下文章

将 Cloud Storage 文件转换为 BigQuery 表/数据集以供稍后查询

Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage

使用 mpdf 库在 Google Cloud Storage 上上传 PDF 文件

将 App Engine Blobkey 解码为 Google Cloud Storage 文件名

以编程方式将文件从 Azure Blob Storage 传输到 Google Cloud Storage

如何通过 Cloud Functions 将文件上传到 Cloud Storage 并使用 Firestore 控制对 Cloud Storage 的访问?