2013-05-17 7 views
11

मुझे बड़ी मात्रा में एक गड़बड़/बग मिला। हम के तहत बैंक आँकड़ा आंकड़ों के आधार पर एक टेबल मिल गया starschema.net:clouddb:bank.Banks_tokenबिगक्वायर COUNT (DISTINCT मान) बनाम COUNT (मान)

मैं निम्न क्वेरी चलाते हैं:

SELECT count(*) as totalrow, 
count(DISTINCT BankId) as bankidcnt 
FROM bank.Banks_token; 

और मैं निम्नलिखित परिणाम प्राप्त:

Row totalrow bankidcnt  
1 9513 9903  

मेरी समस्या यह है कि अगर मेरे पास 9513row है तो मुझे 9 0 9 3्रो कैसे मिल सकता है, जो तालिका में पंक्ति गणना से 390 अधिक है।

उत्तर

21

BigQuery के अंतर्गत, DISTINCT COUNT 1000

आप सीमा, जिस पर अनुमानों पर विचार किया देने के लिए एक वैकल्पिक दूसरा तर्क प्रदान कर सकते हैं की तुलना में अधिक सभी परिणाम के लिए एक सांख्यिकीय अनुमान होता है। इसलिए यदि आप अपने उदाहरण में COUNT (DISTINCT BankId, 10000) का उपयोग करते हैं, तो आपको सटीक परिणाम देखना चाहिए (क्योंकि पंक्तियों की वास्तविक राशि 10000 से कम है)। नोट, हालांकि, प्रदर्शन के संदर्भ में एक बड़ी दहलीज का उपयोग महंगा हो सकता है। https://developers.google.com/bigquery/docs/query-reference#aggfunctions


अद्यतन 2017::

BigQuery #standardSQL COUNT(DISTINCT) साथ हमेशा सटीक है

यहाँ पूरा दस्तावेज़ देखें। अनुमानित परिणामों के लिए APPROX_COUNT_DISTINCT() का उपयोग करें। कोई भी लगभग परिणाम का उपयोग क्यों करेगा? See this article

20

मैंने सटीक अद्वितीय गणना प्राप्त करने के लिए EXACT_COUNT_DISTINCT() का उपयोग किया है। https://cloud.google.com/bigquery/query-reference#aggfunctions

+0

EXACT_COUNT_DISTINCT() यह की तरह लगता है विरासत एसक्यूएल का ही हिस्सा है (https://cloud.google.com/: यह क्लीनर और COUNT (अलग मूल्य, n> numrows)

यहाँ मिले से अधिक सामान्य है bigquery/docs/संदर्भ/विरासत-एसक्यूएल)। कृपया इस पोस्ट के निचले हिस्से में स्टीव गणम के नोट्स पर भी जाएं: https://stackoverflow.com/questions/45840341/firebase-bigquery-monthly-event-counts/45850267#45850267 – Dirk

संबंधित मुद्दे