如何在 Google BigQuery 中获取数据集名称,包括“publicdata”
Posted
技术标签:
【中文标题】如何在 Google BigQuery 中获取数据集名称,包括“publicdata”【英文标题】:How to get datasets name in Google BigQuery including "publicdata" 【发布时间】:2014-06-04 14:00:07 【问题描述】:如下所示,我为 google BigQuery 创建 jdbc 连接
Class.forName("net.starschema.clouddb.jdbc.BQDriver");
conn = DriverManager.getConnection("jdbc:BQDriver:"projectID"?transformQuery=true&user="client ID"&password="client secret");
然后我得到目录名称如下
ResultSet m_resultSet = conn.getMetaData().getCatalogs();
while (m_resultSet.next())
System.out.println(m_resultSet.getString(4));
但现在我正在尝试获取数据集名称。它返回 null。
我可以获取公共数据的数据集名称吗?怎么做??
【问题讨论】:
我实际上正在使用 .Net 库,我想获取所有可用项目的列表,包括“publicdata” 当我转到bigquery.cloud.google.com 时,我可以看到 3 个项目(fh-bigquery、gdelt-bq、publicdata)。看起来它没有存储在 cookie 中,因为当我打开不同的浏览器时看到的相同。如果我能以某种方式得到这个列表会很好 【参考方案1】:您可以使用以下代码获取项目、数据集和表格的列表。
要获取公共数据,您可以使用以下代码
var SampleTableList = Service.Tables.List("publicdata", "samples").Execute();
由于 publicdata 只有一个数据集(样本),我们无法添加新数据集,因此这段代码可以正常工作。
修改ServiceAccountEmail、KeyFile路径、Key Secret等属性
using Google.Apis.Auth.OAuth2;
using System.IO;
using System.Threading;
using Google.Apis.Bigquery.v2;
using Google.Apis.Bigquery.v2.Data;
using System.Data;
using Google.Apis.Services;
using System;
using System.Security.Cryptography.X509Certificates;
namespace GoogleBigQuery
public class Class1
private static void Main()
try
String serviceAccountEmail = "SERVICE ACCOUNT EMAIL";
var certificate = new X509Certificate2(@"KEY FILE NAME & PATH", "KEY SECRET", X509KeyStorageFlags.Exportable);
// SYNTAX: var certificate=new X509Certificate2(KEY FILE PATH+NAME (Here it resides in Bin\Debug folder so only name is enough), SECRET KEY, X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
Scopes = new[] BigqueryService.Scope.Bigquery, BigqueryService.Scope.BigqueryInsertdata, BigqueryService.Scope.CloudPlatform, BigqueryService.Scope.DevstorageFullControl
.FromCertificate(certificate));
// Create and initialize the Bigquery service. Use the Project Name value
// from the New Project window for the ApplicationName variable.
BigqueryService Service = new BigqueryService(new BaseClientService.Initializer()
HttpClientInitializer = credential,
ApplicationName = "APPLICATION NAME"
);
var SampleTableList = Service.Tables.List("publicdata", "samples").Execute();
var projectList = Service.Projects.List().Execute();
foreach (var projectDet in projectList.Projects)
var DataSetList = Service.Datasets.List(projectDet.Id).Execute();
foreach (var DataSetDet in DataSetList.Datasets)
var TablesList = Service.Tables.List(projectDet.Id, DataSetDet.Id).Execute();
catch (Exception e)
Console.WriteLine("Error Occurred: " + e.Message);
Console.ReadLine();
【讨论】:
我知道如何获取publicdata中的数据集,问题是如何获取包含publicdata的项目列表【参考方案2】:看起来这是获取公共数据集列表的最佳来源:http://www.reddit.com/r/bigquery/wiki/datasets
【讨论】:
【参考方案3】:我知道如何获取publicdata中的数据集,问题是如何获取 包含公共数据的项目列表? – Andrey Belykh 2015 年 7 月 17 日 21:27
以编程方式,用户可以获取他/她被授予任何项目角色的唯一项目列表:Can View
、Can Edit
或 Is Owner
公共数据通过与All Authenticated Users
共享数据集级别变为公开
因此,用户不能列出具有公共数据的项目
【讨论】:
以上是关于如何在 Google BigQuery 中获取数据集名称,包括“publicdata”的主要内容,如果未能解决你的问题,请参考以下文章
google-bigquery 如何使用 https 获取数据集列表?
如何从 Google bigquery(google-cloud-ruby gem)的视图表(具有 resource_full)中获取数据