TABLES 檢視
INFORMATION_SCHEMA.TABLES
檢視表會針對資料集中的每個資料表或檢視表,分別列出一個資料列。TABLES
和 TABLE_OPTIONS
檢視表也包含檢視表的相關高階資訊。如需詳細資訊,請查詢 INFORMATION_SCHEMA.VIEWS
檢視區塊。
所需權限
如要查詢 INFORMATION_SCHEMA.TABLES
檢視畫面,您必須具備下列身分與存取權管理 (IAM) 權限:
bigquery.tables.get
bigquery.tables.list
bigquery.routines.get
bigquery.routines.list
以下每個預先定義的 IAM 角色都包含上述權限:
roles/bigquery.admin
roles/bigquery.dataViewer
roles/bigquery.metadataViewer
如要進一步瞭解 BigQuery 權限,請參閱「使用身分與存取權管理功能控管存取權」。
結構定義
查詢 INFORMATION_SCHEMA.TABLES
檢視表時,資料集中的每個資料表或檢視表都會有一列相對應的查詢結果。如需檢視表的詳細資訊,請改為查詢 INFORMATION_SCHEMA.VIEWS
檢視表。
INFORMATION_SCHEMA.TABLES
檢視表具有下列結構定義:
資料欄名稱 | 資料類型 | 值 |
---|---|---|
table_catalog |
STRING |
包含資料集的專案 ID。 |
table_schema |
STRING |
包含資料表或檢視畫面的資料集名稱。也稱為 datasetId 。 |
table_name |
STRING |
資料表或檢視表的名稱。也稱為 tableId 。 |
table_type |
STRING |
資料表類型,可能是下列其中一個值: |
is_insertable_into |
STRING |
YES 或 NO ,視資料表是否支援 DML INSERT 陳述式而定 |
is_typed |
STRING |
此值一律為 NO |
is_change_history_enabled |
STRING |
YES 或 NO ,視是否啟用變更記錄而定 |
creation_time |
TIMESTAMP |
資料表的建立時間 |
base_table_catalog |
STRING |
對於資料表本機副本和資料表快照,則為基本資料表的專案。僅適用於 table_type 設為 CLONE 或 SNAPSHOT 的資料表。 |
base_table_schema |
STRING |
對於資料表複本和資料表快照,則是基本資料表的資料集。僅適用於 table_type 設為 CLONE 或 SNAPSHOT 的資料表。 |
base_table_name |
STRING |
對於資料表複本和資料表快照,則是基礎資料表的名稱。僅適用於 table_type 設為 CLONE 或 SNAPSHOT 的資料表。 |
snapshot_time_ms |
TIMESTAMP |
對於資料表本機副本和資料表快照,則是指在基本資料表上執行本機副本或快照作業以建立此資料表的時間。如果使用時間旅行,這個欄位就會包含時間旅行時間戳記。否則,snapshot_time_ms 欄位與 creation_time 欄位相同。僅適用於 table_type 設為 CLONE 或 SNAPSHOT 的資料表。 |
replica_source_catalog |
STRING |
對於具體化檢視表備用資源,則為基礎具體化檢視表的專案。 |
replica_source_schema |
STRING |
對於具體化檢視表備用資源,則是基本具體化檢視表的資料集。 |
replica_source_name |
STRING |
對於具體化檢視表備用資源,則為基礎具體化檢視表的名稱。 |
replication_status |
STRING |
對於具體化檢視表備用資源,從基本具體化檢視表到具體化檢視表備用資源的複製狀態;以下任一項: |
replication_error |
STRING |
如果 replication_status 指出已實體化的檢視區塊副本有複製問題,replication_error 會提供問題的詳細資訊。 |
ddl |
STRING |
可用來重新建立資料表的 DDL 陳述式,例如 CREATE TABLE 或 CREATE VIEW |
default_collation_name |
STRING |
預設排序規格的名稱 (如果有的話);否則為 NULL 。 |
upsert_stream_apply_watermark |
TIMESTAMP |
如果是使用變更資料擷取 (CDC) 的資料表,則是上次套用資料列修改時間。詳情請參閱「監控資料表上傳/插入作業進度」。 |
範圍和語法
對這個檢視表執行的查詢必須包含資料集或區域限定詞。如果查詢含有資料集限定條件,您必須具備該資料集的權限。如果查詢包含區域限定條件,您必須具備專案權限。詳情請參閱「語法」。下表說明這個檢視畫面的區域和資源範圍:
檢視表名稱 | 資源範圍 | 區域範圍 |
---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.TABLES |
專案層級 | REGION |
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.TABLES |
資料集層級 | 資料集位置 |
-
選用:
PROJECT_ID
: Google Cloud 專案的 ID。如果未指定,系統會使用預設專案。 -
REGION
:任一資料集區域名稱。例如:`region-us`
。 -
DATASET_ID
:資料集 ID。詳情請參閱「資料集限定條件」。
示例
-- Returns metadata for tables in a single dataset.
SELECT * FROM myDataset.INFORMATION_SCHEMA.TABLES;
範例
範例 1:
以下範例會擷取名為 mydataset
的資料集中所有資料表的資料表中繼資料。系統傳回的是預設專案 mydataset
中 mydataset
內所有類型的資料表中繼資料。
mydataset
包含下列資料表:
mytable1
:標準的 BigQuery 資料表myview1
:BigQuery 檢視表
如要對預設專案以外的專案執行查詢,請使用以下格式將專案 ID 新增至資料集:`project_id`.dataset.INFORMATION_SCHEMA.view
;例如 `myproject`.mydataset.INFORMATION_SCHEMA.TABLES
。
SELECT table_catalog, table_schema, table_name, table_type, is_insertable_into, creation_time, ddl FROM mydataset.INFORMATION_SCHEMA.TABLES;
結果如下所示:為了方便閱讀,我們已從結果中排除部分資料欄。
+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+ | table_catalog | table_schema | table_name | table_type | is_insertable_into | creation_time | ddl | +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+ | myproject | mydataset | mytable1 | BASE TABLE | YES | 2018-10-29 20:34:44 | CREATE TABLE `myproject.mydataset.mytable1` | | | | | | | | ( | | | | | | | | id INT64 | | | | | | | | ); | | myproject | mydataset | myview1 | VIEW | NO | 2018-12-29 00:19:20 | CREATE VIEW `myproject.mydataset.myview1` | | | | | | | | AS SELECT 100 as id; | +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
範例 2:
以下範例會從 INFORMATION_SCHEMA.TABLES
檢視表擷取 CLONE
或 SNAPSHOT
類型的所有資料表中繼資料。系統傳回的是預設專案 mydataset
內的所有資料表中繼資料。
如要對預設專案以外的專案執行查詢,請使用以下格式將專案 ID 新增至資料集:`project_id`.dataset.INFORMATION_SCHEMA.view
;例如 `myproject`.mydataset.INFORMATION_SCHEMA.TABLES
。
SELECT table_name, table_type, base_table_catalog, base_table_schema, base_table_name, snapshot_time_ms FROM mydataset.INFORMATION_SCHEMA.TABLES WHERE table_type = 'CLONE' OR table_type = 'SNAPSHOT';
結果如下所示:為了方便閱讀,我們已從結果中排除部分資料欄。
+--------------+------------+--------------------+-------------------+-----------------+---------------------+ | table_name | table_type | base_table_catalog | base_table_schema | base_table_name | snapshot_time_ms | +--------------+------------+--------------------+-------------------+-----------------+---------------------+ | items_clone | CLONE | myproject | mydataset | items | 2018-10-31 22:40:05 | | orders_bk | SNAPSHOT | myproject | mydataset | orders | 2018-11-01 08:22:39 | +--------------+------------+--------------------+-------------------+-----------------+---------------------+
範例 3:
以下範例會從 census_bureau_usa
資料集中的 population_by_zip_2010
資料表,擷取 INFORMATION_SCHEMA.TABLES
檢視表的 table_name
和 ddl
欄。這個資料集是 BigQuery 公開資料集方案的一部分。
由於您要查詢的資料表位於另一個專案中,因此您應使用下列格式將專案 ID 新增至資料集:`project_id`.dataset.INFORMATION_SCHEMA.view
。在這個範例中,這個值為 `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES
。
SELECT table_name, ddl FROM `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES WHERE table_name = 'population_by_zip_2010';
結果大致如下:
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | table_name | ddl | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | population_by_zip_2010 | CREATE TABLE `bigquery-public-data.census_bureau_usa.population_by_zip_2010` | | | ( | | | geo_id STRING OPTIONS(description="Geo code"), | | | zipcode STRING NOT NULL OPTIONS(description="Five digit ZIP Code Tabulation Area Census Code"), | | | population INT64 OPTIONS(description="The total count of the population for this segment."), | | | minimum_age INT64 OPTIONS(description="The minimum age in the age range. If null, this indicates the row as a total for male, female, or overall population."), | | | maximum_age INT64 OPTIONS(description="The maximum age in the age range. If null, this indicates the row as having no maximum (such as 85 and over) or the row is a total of the male, female, or overall population."), | | | gender STRING OPTIONS(description="male or female. If empty, the row is a total population summary.") | | | ) | | | OPTIONS( | | | labels=[("freebqcovid", "")] | | | ); | +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+