我们可以从 Google BigQuery 中的特定表中获取列名吗?
Posted
技术标签:
【中文标题】我们可以从 Google BigQuery 中的特定表中获取列名吗?【英文标题】:Can we get Column Name from specific Table in Google BigQuery? 【发布时间】:2013-12-25 14:14:53 【问题描述】:让我知道对此活动的查询。
我试过了,但没有得到结果...
SELECT column_name FROM publicdata:samples.shakespeare
OR
SELECT schema FROM publicdata:samples.shakespeare
【问题讨论】:
所以你想做一些类似 SELECT column_name FROM all_tables where table = 'shakespeare' and schema = 'publicdata:samples' 的事情? 【参考方案1】:1.您可以使用命令行工具(https://developers.google.com/bigquery/bq-command-line-tool#gettable): bq 秀:。
$ bq show publicdata:samples.shakespeare
tableId Last modified Schema
------------- ----------------- ------------------------------------
shakespeare 01 Sep 13:46:28 |- word: string (required)
|- word_count: integer (required)
|- corpus: string (required)
|- corpus_date: integer (required)
2.BigQuery 浏览器工具:https://developers.google.com/bigquery/bigquery-browser-tool#examineschema
3.或者使用BigQuery API:https://developers.google.com/bigquery/docs/reference/v2/tables/get
【讨论】:
我正在使用 javascript,所以有任何像这样的方法 var request = gapi.client.bigquery.schema.fields( 'projectId': 'publicdata', 'datasetId': 'samples', ' tableId': '莎士比亚' ); request.execute(function(response) console.log(response); );如果您有任何解决方案,那么我知道吗?谢谢 选项 3.BigQuery API:developers.google.com/bigquery/docs/reference/v2/tables/get。这是 REST API,因此您可以在干净的 javascript 或 jQuery 中使用。 我认为你必须使用 gapi.client.request developers.google.com/api-client-library/javascript/reference/…【参考方案2】:我使用 Java 得到了结果:
Tables tableRequest = bigquery.tables();
Table table = tableRequest.get(projectName,datasetName,tableName).execute();
List<TableFieldSchema> fields = table.getSchema().getFields();
【讨论】:
【参考方案3】:使用INFORMATION_SCHEMA 使用 SQL 获取列名:
SELECT column_name, data_type
FROM `bigquery-public-data.samples.INFORMATION_SCHEMA.COLUMNS`
WHERE table_name = 'shakespeare'
它给你:
+-------------+-----------+
| column_name | data_type |
+-------------+-----------+
| word | STRING |
| word_count | INT64 |
| corpus | STRING |
| corpus_date | INT64 |
+-------------+-----------+
【讨论】:
【参考方案4】:在 Jupyter 中使用 python 的示例:
SERVICE_ACCOUNT = 'sa_bq.json'
!pip install google-cloud
!pip install google-api-python-client
!pip install oauth2client
from google.cloud import bigquery
client_bq = bigquery.Client.from_service_account_json(SERVICE_ACCOUNT)
table = client_bq.get_table('bigquery-public-data.samples.shakespeare')
print(list(c.name for c in table.schema))
【讨论】:
自最新库版本以来的更新,以使用该表:>> tr = bigquery.table.TableReference.from_string('bigquery-public-data.samples.shakespeare') >> table = client_bq.get_table(tr)
【参考方案5】:
无需任何查询,在经典 UI 上,您可以进行如下操作:
点击左侧面板上的蓝色向下箭头 切换到项目,然后显示项目... 在项目 ID 上,写下项目的名称(在你的情况下,你有publicdata:samples.shakespeare
,你的项目是 publicdata
)
现在,该项目出现在左侧面板上
选择数据集(在您的情况下是样本)
选择表格(在您的情况下是莎士比亚)
最后,您应该在屏幕中间看到三个选项卡:Schema、Details、Preview。
【讨论】:
【参考方案6】:如果我对您的理解正确,您希望执行 tables.list 或 tables.get 而不是 jobs.query。
这是它在谷歌应用脚本中的工作方式:
var results = BigQuery.Tables.list(projectId, datasetId, optionalArgs);
或通过 API:
GET https://www.googleapis.com/bigquery/v2/projects/projectId/datasets/datasetId/tables
https://developers.google.com/bigquery/docs/reference/v2/tables/list
GET https://www.googleapis.com/bigquery/v2/projects/projectId/datasets/datasetId/tables/tableId
https://developers.google.com/bigquery/docs/reference/v2/tables/get
否则,您可以像这样查询 SELECT * FROM [] limit 0 并编写一些查看列名的过程。
【讨论】:
我虽然是选择限制 1 并且也只使用列名,但我得到的错误是“使用此查询,您将为表中的所有数据付费(即使您的查询包含一个 LIMIT 子句)。”以上是关于我们可以从 Google BigQuery 中的特定表中获取列名吗?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以请求从 Google Cloud Storage 到 BigQuery 的多少并发上传?
BigQuery 中的 Google Analytics(分析)数据(timeOnPage 和 searchStartPage)
如何从 Python 中的 App Engine 在 Google BigQuery 上创建架构?