2012-11-03 10 views
11

यह प्रश्न ऐसा लगता है कि इसे उत्तर देने के लिए इतना आसान होना चाहिए, लेकिन शोध के दिनों और कई मृत सिरों के बाद, मुझे उपयोगकर्ता आधारित ओएथ पर जोर दिए बिना BigQuery से क्वेरी परिणाम नहीं मिल रहे हैं। क्या किसी के पास इसके साथ कोई भाग्य है? मैं अपने ऐप के लिए Google AppEngine का उपयोग नहीं कर रहा हूं, यह EC2 में होस्ट किया गया है।बिना किसी उपयोगकर्ता-इंटरैक्शन के पाइथन से BigQuery प्रोग्रामेटिक रूप से क्वेरी कैसे करें?

User wants reporting data --> 
Web server makes queries to BigQuery --> 
Data is transformed for use in WebApp and returned to User. 

जब भी मैं गूगल उदाहरण का पालन करें, मैं मेरे एक Google खाता प्रमाणीकरण के लिए उपयोग करने के लिए चयन करने के लिए के लिए पूछ अप पॉपिंग एक वेब ब्राउज़र हो रही अंत: यहाँ सटीक स्थिति है।

उत्तर

16

क्षमा करें यह जानकारी खोजने के लिए इतना चुनौतीपूर्ण है। आप Service Accounts कहला रहे हैं जो हमारे Authorizing Access to the BigQuery API using OAuth 2.0 मार्गदर्शिका में प्रलेखित हैं।

यहाँ एक उदाहरण है, अजगर client library का उपयोग कर ही आप उचित क्रेडेंशियल्स प्राप्त करने पर जानकारी के लिए संदर्भित प्रलेखन को देखने के लिए चाहता हूँ:

import httplib2 

from apiclient.discovery import build 
from oauth2client.client import SignedJwtAssertionCredentials 

# REPLACE WITH YOUR Project ID 
PROJECT_NUMBER = 'XXXXXXXXXXX' 
# REPLACE WITH THE SERVICE ACCOUNT EMAIL FROM GOOGLE DEV CONSOLE 
SERVICE_ACCOUNT_EMAIL = '[email protected]' 

# OBTAIN THE KEY FROM THE GOOGLE APIs CONSOLE 
# More instructions here: http://goo.gl/w0YA0 
f = file('key.p12', 'rb') 
key = f.read() 
f.close() 

credentials = SignedJwtAssertionCredentials(
    SERVICE_ACCOUNT_EMAIL, 
    key, 
    scope='https://www.googleapis.com/auth/bigquery') 

http = httplib2.Http() 
http = credentials.authorize(http) 

service = build('bigquery', 'v2') 
datasets = service.datasets() 
response = datasets.list(projectId=PROJECT_NUMBER).execute(http) 

print 'Dataset list:' 
for dataset in response['datasets']: 
    print '%s' % dataset['datasetReference']['datasetId'] 
+1

रयान, आपकी प्रतिक्रिया के लिए धन्यवाद। यह मुझे आगे ले जाता है। मैंने पहले सेवा खातों में भाग लिया था और यह स्पष्ट था कि यह वही था जो मैं खोज रहा था, मुझे यह पता नहीं लगा कि यह कहां स्थापित करना है। मैंने ऐसा किया है, और मेरे सही प्रोजेक्ट आईडी, सेवा खाता ईमेल और कुंजी फ़ाइल के साथ उपरोक्त कोड चलाया है, लेकिन जब मैं डेटासेट सूचीबद्ध करने के लिए प्रतिक्रिया लेता हूं, तो dict में कोई 'डेटासेट' कुंजी नहीं होती है। इसके बजाए यह कुछ ऐसा है: {u'kind ': u'bigquery # डेटासेट लिस्ट', यूटैग ': यू' "viowSXH0JIvMREGVicRUeTw4PZo/L-a0Zjajejhksaj6mKpTzCQGsr4"} – JawsTheGame

+1

तो, अनुवर्ती करने के लिए, सुनिश्चित करें कि आप सेवा को कॉल कर रहे हैं डेटासेट() सूची() विधि। उपर्युक्त उदाहरण में, प्रतिक्रिया ['डेटासेट'] ऑब्जेक्ट में {u'kind ': u'bigquery # डेटासेट' के रूप में डेटासेट विवरण ऑब्जेक्ट्स की एक सूची होगी, u'id ': u'projectXXXXXXX: TestDataset' , u'datasetReference ': {u'projectId': u'projectXXXXXXX ', u'datasetId': u'TestDataset '}} –

+0

एक और बात: यदि आपके एपीआई प्रतिक्रिया में कोई डेटासेट नहीं है, तो संभव है कि आपने नहीं बनाया है अभी तक कोई क्या आप पुष्टि कर सकते हैं कि आपने इस परियोजना में ऐसा किया है जिसका आप उपयोग कर रहे हैं? जवाब देने के लिए –

0

मैं एक ही मुद्दा था। यह संभवतः इसलिए है क्योंकि आपके पास उपयोग की जा रही सेवा खाता कुंजी के लिए प्रोजेक्ट में आवश्यक अनुमतियां नहीं हैं।

+0

यह एक उत्तर से अधिक टिप्पणी है। टिप्पणियों के रूप में संक्षिप्त प्रतिक्रिया पोस्ट करने पर विचार करें। –

2

आप gcloud साथ स्थानीय रूप से लॉग इन हैं:

gcloud auth application-default login 

फिर एक साख फ़ाइल में ~/.config/gcloud/संग्रहीत किया जाएगा, जिसके साथ लोड किया जा सकता:

from oauth2client.client import GoogleCredentials 
from apiclient.discovery import build 

credentials = GoogleCredentials.get_application_default() 
service = build('bigquery', 'v2') 

या आप कर सकते हैं बस बीक्यू सुरक्षा कुंजी फ़ाइल को सीधे लोड करें:

from google.cloud import bigquery 
client = bigquery.Client.from_service_account_json(path_to_key.json) 
+0

नवीनतम पुस्तकालयों का उपयोग करने वाले उत्तर के लिए धन्यवाद। ध्यान दें कि अब एक प्रलेखन पृष्ठ https://cloud.google.com/bigquery/docs/authentication/service-account-file है जो इन प्रमाणीकरण विधियों को शामिल करता है। –

+0

ध्यान दें कि 'gcloud auth एप्लिकेशन-डिफ़ॉल्ट लॉगिन' अब अनुशंसित नहीं है।किसी सेवा खाते के लिए JSON कुंजी फ़ाइल डाउनलोड करना और 'GOOGLE_APPLICATION_CREDENTIALS' पर्यावरण चर सेट करना मिश्रित वातावरण में प्रमाण-पत्र सेट करने का सबसे विश्वसनीय तरीका है। –

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