如何使用java api从云存储到大查询获取多个文件

时间:2012-11-22 17:26:02

标签: java google-app-engine google-bigquery google-cloud-storage

我在云存储中有数据,我想将数据传输到大查询并获取统计信息。 目前我正在使用JobConfigurationLoad来获取单个文件,这是代码示例:

JobConfigurationLoad jobconfigurationqLoad = new JobConfigurationLoad();
jobconfigurationqLoad.setSkipLeadingRows(1); // First line are columns names
    jobconfigurationqLoad.setSourceUris(Lists.newArrayList("gs://my_app/folder_name/test_file.csv"));
jobconfigurationqLoad.setWriteDisposition("WRITE_APPEND");
jobconfigurationqLoad.setEncoding(PlatformConstants.DEFAULT_ENCODING);
jobconfigurationqLoad.setCreateDisposition("CREATE_IF_NEEDED");
jobconfigurationqLoad.setDestinationTable(tableReference);
**tableReference = my table in big query
jobconfigurationqLoad.setSchemaInline("field1:STRING,field2:STRING");

// JobConfiguration
JobConfiguration jobConfiguration = new JobConfiguration();
jobConfiguration.setLoad(jobconfigurationqLoad);

// JobReference
JobReference jobreference = new JobReference();
jobreference.setProjectId(PROJECT_ID);

// Job
Job insertJob = new Job();
insertJob.setConfiguration(jobConfiguration);
insertJob.setJobReference(jobreference);

在“setSourceUris”中,我只想放置文件夹并获取所有文件,但这似乎不起作用。 我在google api上看到了一些关于获取存储桶内容的文档但不仅仅是存储桶中的一个文件夹。 类似的东西在answer中。 我正在使用GAE和java。

2 个答案:

答案 0 :(得分:2)

BigQuery API的sourceUris方法要求您单独列出每个源URI(它不可能提供单个Google云端存储分区URI)。

但是,您可以使用Google Cloud Storage API provide a list of object URIs。提供prefix参数来过滤结果列表。

请注意,单个加载作业中可包含的最大文件数为500(每个加载请求的最大数据量为1Tb - 请参阅BigQuery quota page)。

答案 1 :(得分:0)

BigQuery Apis有属性:configuration.load.sourceUris [] 这是一个可以包含一个或多个文件的数组。 名称必须是“完全限定名称,例如:gs://mybucket/myobject.csv”

了解更多信息,请查看: https://developers.google.com/bigquery/docs/reference/v2/jobs

所以,迈克尔说: “使用Google Cloud Storage API到provide a list of object URIs。提供前缀参数来过滤结果列表。”

然后将文件名放在作业的sourceUris数组中。