如何選擇BigQuery中的數據列有所有空值如何在BigQuery中選擇數據的列有所有NULL值
A B C
NULL 1 NULL
NULL NULL NULL
NULL 2 NULL
NULL 3 NULL
我想要檢索A和C列,請你能幫助! !
如何選擇BigQuery中的數據列有所有空值如何在BigQuery中選擇數據的列有所有NULL值
A B C
NULL 1 NULL
NULL NULL NULL
NULL 2 NULL
NULL 3 NULL
我想要檢索A和C列,請你能幫助! !
下面是大量查詢StandardSQL
簡單的選擇:
#standardSQL
WITH `project.dataset.table` AS (
SELECT NULL A, 1 B, NULL C UNION ALL
SELECT NULL, NULL, NULL UNION ALL
SELECT NULL, 2, NULL UNION ALL
SELECT NULL, 3, NULL
)
SELECT COUNT(A) A, COUNT(B) B, COUNT(C) C
FROM `project.dataset.table`
它返回下面其中0(零)表示相應的列具有所有空值
A B C
0 3 0
如果這是「不夠」 - 下面是更復雜的版本:
#standardSQL
WITH `project.dataset.table` AS (
SELECT NULL A, 1 B, NULL C UNION ALL
SELECT NULL, NULL, NULL UNION ALL
SELECT NULL, 2, NULL UNION ALL
SELECT NULL, 3, NULL
)
SELECT SPLIT(y, ':')[OFFSET(0)] column
FROM (
SELECT REGEXP_REPLACE(TO_JSON_STRING(t), r'[{}"]', '') x
FROM (
SELECT COUNT(A) A, COUNT(B) B, COUNT(C) C
FROM `project.dataset.table`
) t
), UNNEST(SPLIT(x)) y
WHERE CAST(SPLIT(y, ':')[OFFSET(1)] AS INT64) = 0
返回結果如下 - 爭取與所有空值僅列
column
A
C
注意:您真表 - 只要刪除與攔截和替換project.dataset.table
與真表參考
而且,當然,用真實的列名
我的表有一輪700列..
下面是如何輕鬆地爲任意數量的列生成上述查詢的示例。
。剛剛運行
。複製結果 - 這是生成的查詢
。粘貼生成的查詢到新的用戶界面並運行它
。享受(我希望你會)結果:O)
當然,因爲通常與你的真實表引用
#standardSQL
SELECT
CONCAT('''
SELECT SPLIT(y, ':')[OFFSET(0)] column
FROM (
SELECT REGEXP_REPLACE(TO_JSON_STRING(t), r'[{}"]', '') x
FROM (
SELECT ''', y,
'''
FROM `project.dataset.table`
) t
), UNNEST(SPLIT(x)) y
WHERE CAST(SPLIT(y, ':')[OFFSET(1)] AS INT64) = 0
'''
)
FROM (
SELECT
STRING_AGG(CONCAT('COUNT(', x, ') ', x), ', ') y
FROM (
SELECT REGEXP_EXTRACT_ALL(REGEXP_REPLACE(TO_JSON_STRING(t), r'[{}]', ''), r'"([\w_]+)":') x
FROM `project.dataset.table` t
LIMIT 1
), UNNEST(x) x
)
注意更換project.dataset.table
:請注意查詢成本 - 無論是「一代查詢」和最後查詢本身會做全面掃描
您可以生成列列出任何client of your choice
斷table schema便宜得多,測試/玩它 - 你可以使用相同的虛擬數據作爲最初有q我的回答中的問題
我的表有700個圓柱..所以這就是我想的 – Pranav
你沒有在你的問題中指出這一點:○( - 所以肯定寫700個COUNTs是不適用的,但你可以輕鬆地生成上面腳本與您涉及的所有列:o)嘗試! –
可能直接在表的行上使用TO_JSON_STRING,然後使用正則表達式提取具有值的列,對吧?最後一塊應該是以某種方式從完整的列列表中減去它:) –
擴展我對米哈伊爾答案的評論,這就是我的想法。它不需要生成查詢字符串,如果您有大量列,則查詢字符串可能會很長。它將每個列名的空值計數與表中的總行數進行比較,以確定列是否應包含在結果中。
#standardSQL
WITH `project.dataset.table` AS (
SELECT NULL A, 1 B, NULL C UNION ALL
SELECT NULL, NULL, NULL UNION ALL
SELECT NULL, 2, NULL UNION ALL
SELECT NULL, 3, NULL
)
SELECT null_column
FROM `project.dataset.table` AS t,
UNNEST(REGEXP_EXTRACT_ALL(
TO_JSON_STRING(t),
r'\"([a-zA-Z\_]+)\":null')
) AS null_column
GROUP BY null_column
HAVING COUNT(*) = (SELECT COUNT(*) FROM `project.dataset.table`);
喜歡這個。嫉妒一點,我錯了方向在這裏,錯過了這一個:o)definitelly投票! BigQuery Standard SQL非常酷的功能! –
謝謝! :)它讓我想要在BigQuery中提供更多的反射型功能......它打開了很多很酷的查詢模式。 –
完全同意!更多更酷的例子,像這樣一個將解鎖內置電源供許多用戶使用! –
你正在使用哪個數據庫? – indiri
顯然BigQuery,因爲標題 –