2013-05-22 4 views
17

पर कॉलम जोड़ें मैं BigQuery मौजूदा तालिका में नया कॉलम जोड़ने की कोशिश कर रहा हूं। मैंने बीक कमांड टूल और एपीआई दृष्टिकोण की कोशिश की है। Tables.update() पर कॉल करते समय मुझे निम्न त्रुटि मिलती है।बिगक्वरी टेबल स्कीमा

मैंने अतिरिक्त फ़ील्ड के साथ पूर्ण स्कीमा प्रदान करने का प्रयास किया है और यह मुझे नीचे दिखाए गए समान त्रुटि भी देता है।

API की मदद से

मैं त्रुटि निम्न हो:

{ 
"schema": { 
"fields": [ 
{ 
"name": "added_column", 
"type": "integer", 
"mode": "nullable" 
} 
] 
} 
} 

{ 
"error": { 
"errors": [ 
{ 
"domain": "global", 
"reason": "invalid", 
"message": "Provided Schema does not match Table [blah]" 
} 
], 
"code": 400, 
"message": "Provided Schema does not match Table [blah]" 
} 
} 
BQ उपकरण के साथ

मैं त्रुटि निम्न हो: ./bq अद्यतन आयकर blah added_column: पूर्णांक

BigQuery अपडेट करें कार्रवाई में त्रुटि: परंतु स्कीमा करता है मेल नहीं तालिका [blah]

उत्तर

37

इस प्रयास करें:

bq --format=prettyjson show yourdataset.yourtable > table.json 

table.json संपादित करें और "फ़ील्ड" के अंदर छोड़कर सबकुछ हटाएं (उदा। [ { "name": "x" ... }, ... ] रखें)। फिर स्कीमा में अपना नया फ़ील्ड जोड़ें।

या पाइप के माध्यम से jq

bq --format=prettyjson show yourdataset.yourtable | jq .schema.fields > table.json 

तब चलाएँ:

bq update yourdataset.yourtable table.json 

आप कमांड लाइन जो वास्तव में क्या भेज दिया जाता है दिखाएगा की शुरुआत करने के लिए --apilog=apilog.txt जोड़ सकते हैं/bigquery सर्वर से लौट आए।

+0

Thnx के लिए। यह – archman

+1

काम करता है आप कमांड लाइन पर स्कीमा को एक पंक्ति सीएसवी जोड़ी के रूप में भी निर्दिष्ट कर सकते हैं, उदा। bq अद्यतन dataset.table "नाम: स्ट्रिंग, आयु: पूर्णांक"। – Jon

+0

यह बड़े पैमाने पर प्रलेखन के बावजूद बहुत अच्छी तरह से काम करता है कि एक टेबल स्कीमा को एक बार बनाया जा सकता है: एक बार तालिका की स्कीमा निर्दिष्ट हो जाने के बाद आप इसे पहले से जुड़े सभी डेटा को हटाए बिना इसे बदल नहीं सकते हैं। यदि आप किसी तालिका की स्कीमा को बदलना चाहते हैं, तो आपको WRITE_TRUNCATE की एक लेखन डिस्पोजिशन निर्दिष्ट करना होगा। अधिक जानकारी के लिए, जॉब्स संसाधन देखें। –

2

मेरे मामले में मैं एक टेम्पलेट तालिका में REQUIRED फ़ील्ड जोड़ने की कोशिश कर रहा था, और इस त्रुटि में चल रहा था। फ़ील्ड को NULLABLE पर बदलना, मुझे तालिका अपडेट करने दें।

Google से किसी भी व्यक्ति के लिए अपडेट पर हालिया संस्करण भी।

#To create table 
bq mk --schema domain:string,pageType:string,source:string -t Project:Dataset.table 
#Or using schema file 
bq mk --schema SchemaFile.json -t Project:Dataset.table 


#SchemaFile.json format 
[{                                                             
    "mode": "REQUIRED", 
    "name": "utcTime", 
    "type": "TIMESTAMP" 
},  
{ 
    "mode": "REQUIRED", 
    "name": "domain", 
    "type": "STRING" 
}, 
{ 
    "mode": "NULLABLE", 
    "name": "testBucket", 
    "type": "STRING" 
}, 
{ 
    "mode": "REQUIRED", 
    "name": "isMobile", 
    "type": "BOOLEAN"                                                      
}, 
{ 
    "mode": "REQUIRED", 
    "name": "Category", 
    "type": "RECORD", 
    "fields": [ 
    { 
     "mode": "NULLABLE", 
     "name": "Type", 
     "type": "STRING" 
    }, 
    { 
     "mode": "REQUIRED", 
     "name": "Published", 
     "type": "BOOLEAN" 
    } 
    ] 
}] 

# TO update 
bq update --schema UpdatedSchema.json -t Project:Dataset.table 
# Updated Schema contains old and any newly added columns 

Some docs टेम्पलेट टेबल

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