sql - BigQuery 从项目中的所有表中选择 __TABLES__?

标签 sql google-bigquery

使用 BigQuery,有没有办法选择 __TABLES__来自我项目中的每个数据集?我试过 SELECT * FROM '*.__TABLES'但这在 BigQuery 中是不允许的。任何帮助都会很棒,谢谢!

最佳答案

您可以使用此 SQL 查询生成项目中的数据集列表:

select  string_agg(
      concat("select * from `[PROJECT ID].", schema_name, ".__TABLES__` ")
    , "union all \n"
)
from `[PROJECT ID]`.INFORMATION_SCHEMA.SCHEMATA;

您将拥有此列表:
select * from `[PROJECT ID].[DATASET ID 1].__TABLES__` union all 
select * from `[PROJECT ID].[DATASET ID 2].__TABLES__` union all 
select * from `[PROJECT ID].[DATASET ID 3].__TABLES__` union all 
select * from `[PROJECT ID].[DATASET ID 4].__TABLES__` 
...

然后将列表放在此查询中:
SELECT 
    table_id
    ,DATE(TIMESTAMP_MILLIS(creation_time)) AS creation_date
    ,DATE(TIMESTAMP_MILLIS(last_modified_time)) AS last_modified_date
    ,row_count
    ,size_bytes
    ,round(safe_divide(size_bytes, (1000*1000)),1) as size_mb
    ,round(safe_divide(size_bytes, (1000*1000*1000)),2) as size_gb
    ,CASE
        WHEN type = 1 THEN 'table'
        WHEN type = 2 THEN 'view'
        WHEN type = 3 THEN 'external'
        ELSE '?'
     END AS type
    ,TIMESTAMP_MILLIS(creation_time) AS creation_time
    ,TIMESTAMP_MILLIS(last_modified_time) AS last_modified_time
    ,FORMAT_TIMESTAMP("%Y-%m", TIMESTAMP_MILLIS(last_modified_time)) as last_modified_month
    ,dataset_id
    ,project_id
FROM 
(   
    select * from `[PROJECT ID].[DATASET ID 1].__TABLES__` union all 
    select * from `[PROJECT ID].[DATASET ID 2].__TABLES__` union all 
    select * from `[PROJECT ID].[DATASET ID 3].__TABLES__` union all 
    select * from `[PROJECT ID].[DATASET ID 4].__TABLES__`
)
ORDER BY dataset_id, table_id asc 

关于sql - BigQuery 从项目中的所有表中选择 __TABLES__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43457651/

相关文章:

mysql - 将日期设置为三天前

python - 将 csv 上传到大查询时添加日期加载字段

python-3.x - 将 python 日期时间加载到 Google BigQuery

sql - 如何找出 postgresql 中两个参数之间的值?

SQLite:批量更新没有游标的字段

MySQL:添加到计数大小写...然后

sql - Google BigQuery 中的多级数据透视

python - 从 oauth2client.appengine 导入 o​​auth2decorator_from_clientsecrets ImportError : No module named appengine

python - 在 DataLab 笔记本中使用 Dataproc 和 Spark BigQuery 连接器时出错

mysql - 我可以使用一个语句从每一列中获取不同的行吗