मेरे पास एक बड़ी क्वेरी तालिका है जिसका डेटा स्रोत एक Google स्प्रेडशीट है। मैं इस तालिका तक पहुँचने के लिए अजगर का उपयोग करने की कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि का सामना कर रहा हूँ: google.api_core.exceptions.BadRequest: 400 Error while reading table: datset.table, error message: Failed to read the spreadsheet. Errors: com.google.apps.framework.request.ForbiddenException: Permission denied [S]#RITZ#369137407806#topTeRwnQcmrdMeVQ98ZkGA

मेरा ऐप BigQuery व्यवस्थापक भूमिकाओं के साथ एक ServiceAccount JSON टोकन के साथ प्रमाणित है, और यहां बताया गया है कि मेरा क्लाइंट कैसे बनाया जाता है:

from google.oauth2.service_account import Credentials

import os

scopes = [
    'https://www.googleapis.com/auth/bigquery',
    'https://www.googleapis.com/auth/cloud-platform',
    'https://www.googleapis.com/auth/drive',
]

credentials = Credentials.from_service_account_file(os.environ['GOOGLE_APPLICATION_CREDENTIALS'], scopes=scopes)

client = bigquery.Client(credentials=credentials)

मुझे सख्त BigQuery तालिकाओं से कोई समस्या नहीं है, लेकिन मैं यह नहीं समझ पा रहा हूं कि मैं यहां क्या गलत कर रहा हूं। आपकी सहायता के लिए धन्यवाद।

1
Bobby Wan 31 अक्टूबर 2019, 17:42

2 जवाब

सबसे बढ़िया उत्तर

ठीक है, मुझे आखिरकार मिल गया। मुझे लगा कि मैंने सेवा खाता ईमेल तक पहुंच प्रदान कर दी है, लेकिन ऐसा लगता है कि यह काम नहीं किया क्योंकि मैं इस फ़ाइल का स्वामी नहीं था। उन्नत एक्सेस अनुरोध का उपयोग करने से स्वामी को भी अनुरोध नहीं भेजा गया।

इसलिए मैंने मालिक से सेवा खाते के ईमेल पर एक आमंत्रण भेजने के लिए कहा और अब यह ठीक काम कर रहा है।

0
Bobby Wan 4 नवम्बर 2019, 18:33
# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.schema = [
   bigquery.SchemaField("name", "STRING"),
   bigquery.SchemaField("post_abbr", "STRING"),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"

load_job = client.load_table_from_uri(
             uri,
             dataset_ref.table("us_states"),
             location="US",  # Location must match that of the destination dataset.
             job_config=job_config,
            )  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

उपरोक्त कोड मुझे Google से मिला है, यह स्वयं मेरे साथ ठीक काम करता है। उनके पास अन्य भाषाओं में कोड हैं, इसे जांचें https://cloud .google.com/bigquery/docs/loading-data-cloud-storage-json

0
user11751534user11751534 31 अक्टूबर 2019, 17:52