2015-11-17 4 views
5

BigQuery तालिका में रिकॉर्ड डालने पर मैं सरोगेट कुंजी कैसे असाइन कर सकता हूं? अद्वितीय मूल्य या NextVal उत्पन्न करने के लिए अनुक्रम का उपयोग करने की तरह कुछ?मैं BigQuery तालिका में रिकॉर्ड्स के लिए अद्वितीय कुंजी मान कैसे उत्पन्न कर सकता हूं?

SELECT 
    RANK() OVER(ORDER BY timestamp) unique_id, 
    title 
FROM 
    [publicdata:samples.wikipedia] 
LIMIT 1000 

एक वैकल्पिक अद्वितीय उत्पन्न करने के लिए है:

+0

यह बहुत व्यापक है, क्योंकि ऐसा करने के कई तरीके हैं। हालांकि बीक्यू में स्वचालित कुछ भी नहीं है, इसलिए आपको उस अद्वितीय मूल्य को उत्पन्न करने के लिए स्वयं को कुछ कोड करना होगा। – Patrice

उत्तर

5

यहाँ एक टाइमस्टैम्प इस मामले में, एक दृष्टिकोण है कि प्रत्येक पंक्ति के लिए एक अनूठा पूर्णांक आईडी उत्पन्न करता है, आईडी स्रोत datasaet में कुछ मूल्य के अनुसार छाँटे गए साथ है बेतरतीब ढंग से पहचानकर्ता:

SELECT 
    RANK() OVER(ORDER BY random) unique_id, 
    RAND() random, 
    title 
FROM 
    [publicdata:samples.wikipedia] 
LIMIT 1000 

डालने समय में इन मूल्यों को संलग्न करने के लिए, एक BigQuery तालिका में अपने स्रोत डेटा लोड है, तो कोड के ऊपर है कि तालिका (विकिपीडिया के बजाय) से चयन करें और परिणाम को बचाने के लिए संशोधित।

+0

दोनों प्रश्न त्रुटि के साथ असफल रहे: "क्वेरी निष्पादन के दौरान संसाधन पार हो गए: क्वेरी आवंटित स्मृति में निष्पादित नहीं की जा सकी। सॉर्ट ऑपरेटर ओवर (ऑर्डर बीई) के लिए उपयोग की जाने वाली सॉफ़्टवेयर बहुत अधिक स्मृति का उपयोग करती है .." ऑर्डर द्वारा ऑपरेशन काफी महंगा है और नहीं हो सकता समानांतर में संसाधित। तो एक नोड पर स्मृति में पकड़ने के लिए बहुत सारी पंक्तियां थीं। –

3

(क्षमा करें, पर्याप्त नहीं अभी तक प्रतिष्ठा मौजूदा जवाब पर टिप्पणी करने की ...)

क्या स्रोत और प्रारूप आप से डेटा लोड हो रहा है? यदि यह जीसीएस से सीएसवी या जेएसओएन है, तो आप लोड और क्वेरी दोनों होने के बजाय तालिका और आईडी को एक ही ऑपरेशन में उत्पन्न करने के लिए हमारे संघीय डेटा स्रोतों (https://cloud.google.com/bigquery/federated-data-sources) के साथ माइकल के समाधान को जोड़ सकते हैं।

3

मैं इस

SELECT 
    (ROW_NUMBER() OVER()) 
    + 
    (
     SELECT 
     MAX(surrogate_key) 
     FROM 
     dimension_table) AS surrogate_key, 
    business_key, 
    attribute1, 
    attributen, 
    CURRENT_DATE AS start_date, 
    null as end_date, 
    true AS is_current 
FROM 
    source_table 
  • nb है जैसे कि यह कार्य करें: पिछले 3 तत्वों scd2 क्षेत्र हैं और नई शैली एसक्यूएल की आवश्यकता है वाक्य रचना

  • NB2 काम करने के लिए: यदि आप ROW_NUMBER में द्वारा आदेश, BigQuery शायद को बहुत कठिन त्रुटि फेंक देगा क्योंकि ORDER BY को समांतर नहीं किया जा सकता है

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

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