2017-03-02 12 views
5

मेरे पास BigQuery पर एक दिन-विभाजित तालिका है। जब मैं की तरह एक क्वेरी का उपयोग कर मेज से कुछ पंक्तियों को हटाने का प्रयास:BigQuery - विभाजित तालिका से पंक्तियां हटाएं

DELETE FROM `MY_DATASET.partitioned_table` WHERE id = 2374180 

मैं निम्नलिखित त्रुटि मिलती है:

Error: DML statements are not yet supported over partitioned tables.

एक त्वरित गूगल खोज मुझे की ओर जाता है: https://cloud.google.com/bigquery/docs/loading-data-sql-dml जहां यह भी कहते हैं: "विभाजित टेबल को संशोधित करने वाले डीएमएल कथन अभी तक समर्थित नहीं हैं।"

तो अभी के लिए, क्या कोई कामकाज है जिसे हम विभाजित तालिका से पंक्तियों को हटाने में उपयोग कर सकते हैं?

उत्तर

3

डीएमएल में इस चरण में कुछ known issues/सीमा है।

जैसे:

  • DML बयान उनके स्कीमा में आवश्यक क्षेत्रों के साथ टेबल को संशोधित करने के लिए इस्तेमाल नहीं किया जा सकता।
  • प्रत्येक डीएमएल स्टेटमेंट एक अंतर्निहित लेनदेन शुरू करता है, जिसका अर्थ है कि कथन द्वारा किए गए परिवर्तन स्वचालित रूप से प्रत्येक सफल डीएमएल कथन के अंत में किए जाते हैं। बहु-कथन लेनदेन के लिए कोई समर्थन नहीं है। अद्यतन और सम्मिलित
    हटाएँ और INSERT
    सम्मिलित करें और INSERT
    अन्यथा DML बयानों में से एक निरस्त कर दिया जाएगा:
  • DML बयान के निम्नलिखित संयोजन एक मेज पर समवर्ती चलाने की अनुमति है। उदाहरण के लिए, यदि दो अद्यतन विवरण तालिका के खिलाफ एक साथ निष्पादित होते हैं तो उनमें से केवल एक ही सफल होगा।
  • हाल ही में BigQuery स्ट्रीमिंग (tabledata.insertall) के माध्यम से लिखे गए टेबल्स को अद्यतन या DELETE कथन का उपयोग करके संशोधित नहीं किया जा सकता है। यह जांचने के लिए कि तालिका में स्ट्रीमिंग बफर है या नहीं, StreamBuffer नामक अनुभाग के लिए table.get प्रतिक्रिया देखें। यदि यह अनुपस्थित है, तो तालिका को अद्यतन या हटाए गए विवरणों का उपयोग करके संशोधित किया जा सकता है।
  • विभाजित तालिकाओं को संशोधित करने वाले डीएमएल विवरण अभी तक समर्थित नहीं हैं।

इसके अलावा quota limits

  • अधिकतम अद्यतन बारे में पता होना/तालिका के अनुसार प्रतिदिन बयान हटाएँ: 500
  • अधिकतम सम्मिलित बयान के अनुसार: 48
  • अधिकतम अद्यतन/हटाएँ परियोजना प्रति दिन प्रति बयान प्रति टेबल प्रति दिन: 1,000
  • प्रति दिन अधिकतम INSERT स्टेटमेंट प्रति परियोजना: 10,000

आप क्या कर सकते हैं पूरे विभाजन को एक गैर-विभाजित तालिका में कॉपी करें और वहां डीएमएल कथन निष्पादित करें। विभाजन के लिए अस्थायी तालिका वापस लिखने के बजाय। इसके अलावा यदि आप प्रति तालिका प्रति दिन डीएमएल अद्यतन सीमा विवरण में भाग लेते हैं, तो आपको सीमा से बचने के लिए तालिका की प्रतिलिपि बनाने और नई तालिका पर डीएमएल चलाने की आवश्यकता है।

+0

ऐसा लगता है कि आवश्यक फ़ील्ड अब –

+0

सबसे महत्वपूर्ण हिस्सा अनुमति दी जाती है: "। DML बयान है कि विभाजित तालिकाओं को संशोधित अभी तक समर्थित नहीं हैं" असल में, विभाजित टेबल पर कोई वर्की हटाता है ... – Matt

0

मैं पहले से ही, अस्थायी तालिका बिना यह किया है कदम:

SELECT * FROM `your_data_set.tablename` WHERE 
_PARTITIONTIME = timestamp('2017-12-07') 
AND condition_to_keep_rows_which_shouldn't_be_deleted = 'condition' 

यदि आवश्यक हो तो:

1) क्वेरी जो विशेष रूप से विभाजन से सभी पंक्तियों जो रखा जाना चाहिए का चयन करता है तैयार अन्य विभाजनों के लिए इसे चलाएं

2) गंतव्य तालिका के परिणामस्वरूप यो के परिणामस्वरूप उर क्वेरी जहां विशेष PARTITION को इंगित करते हैं, अगर आप इस तरह की मेज नाम देना होगा:

tablename$20171207 

3) विकल्प को चेक करें "तालिका को अधिलेखित करें" -> यह केवल विशेष विभाजन के ऊपर लिख देगा

4) घुमावदार विभाजन अनावश्यक पंक्तियों के परिणामस्वरूप क्वेरी चलाएं!

// याद है कि आप, अन्य विभाजन के लिए इस चलाने की जरूरत है हो सकता है कि तुम कहाँ करने के लिए हटाए गए एक से अधिक विभाजन में फैले हुए हैं पंक्तियों

0

आप कमांड लाइन bq rm का उपयोग कर इस तरह विभाजित तालिका में विभाजन को हटा सकते हैं:

bq rm 'mydataset.mytable$20160301' 
संबंधित मुद्दे