簡體   English   中英

獲取 athena 數據庫中所有表的表名和行數

[英]Getting table names and row counts for all tables in an athena database

我有一個包含多個表的 AWS 數據庫,我試圖在單個查詢中獲取行數。

理想的查詢輸出是:

table_name row_count
table2_name row_count
etc...

到目前為止,我已經能夠從數據庫中獲取所有表名或表的所有行數(以隨機順序),但不能在同一個查詢中同時獲取。

此查詢返回數據庫中存在的所有表名的列:

SELECT table_name FROM information_schema.tables WHERE table_schema = '<database_name>';

此查詢返回表的所有行數:

SELECT COUNT(*) FROM table_name
UNION ALL
SELECT COUNT(*) FROM table2_name
UNION ALL
etc..for the rest of the tables

這個查詢的問題是它以隨機順序顯示行計數,與查詢中表的順序不對應,所以我不知道哪個行計數與哪個表相關——因此我需要表名和行數。

只需將表的名稱作為文字添加到您的查詢中:

SELECT 'table_name' AS table_name, COUNT(*) AS row_count FROM table_name
UNION ALL
SELECT 'table_name2' AS table_name, COUNT(*) AS row_count FROM table_name2
UNION ALL
…

以下查詢生成 UNION 查詢以生成所有記錄的計數。 要解決的問題是(截至 2022 年 12 月) INFORMATION_SCHEMA.TABLES錯誤地將每個表和視圖定義為BASE TABLE ,因此您需要一些邏輯來消除視圖。

在數據倉庫中,通常的做法是頻繁地記錄登錄表的記錄計數的快照。 任何與預期計數的意外偏差都可用於報告/警報

WITH Table_List AS (
    SELECT table_schema,table_name, CONCAT('SELECT CURRENT_DATE AS run_date, ''',table_name, ''' AS table_name, COUNT(*) AS Records FROM "',table_schema,'"."', table_name, '"') AS BaseSQL
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE 
            table_schema = 'YOUR_DB_NAME' -- Change this 
        AND table_name LIKE 'YOUR TABLE PATTERN%' -- Change or remove this line
)
, Total_Records AS (
    SELECT COUNT(*) AS Table_Count
    FROM Table_List
)
SELECT 
    CASE WHEN ROW_NUMBER() OVER (ORDER BY table_name) = Table_Count 
        THEN BaseSQL
        ELSE CONCAT(BaseSql, ' UNION ALL') END  AS All_Table_Record_count_SQL
FROM Table_List CROSS JOIN Total_Records
ORDER BY table_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM