简体   繁体   English

python2.7调用bigquery api时抛出错误

[英]python2.7 throwing error when calling bigquery api

I am using google-api-python-client for inserting a json record to bigquery and when I try to unittest the method using python unittest, I am getting error in exactly this line我正在使用 google-api-python-client 将 json 记录插入到 bigquery,当我尝试使用 python unittest 对方法进行单元测试时,我在这一行中遇到了错误

The code is as follows:代码如下:

def write_to_bigquery(self, timeseries, metadata):
        response = {}
        json_msg_list = []
        stats = {}
        if not timeseries or "points" not in timeseries:
            logging.debug("No timeseries data to write to BigQuery")
            msgs_written = 0
            metadata["msg_without_timeseries"] = 1
            error_msg_cnt = 0
        else:   
            rows = build_rows(timeseries, metadata)
            print("rows", rows) //This gets printed
            bigquery = build('bigquery', 'v2', cache_discovery=False) 
            print("after rows", rows) //Control does not reach here
body = {
            "kind": "bigquery#tableDataInsertAllRequest",
            "skipInvalidRows": "false",
            "rows": json_row_list
        }
        logging.debug('body: {}'.format(json.dumps(body, sort_keys=True, indent=4)))

        response = bigquery.tabledata().insertAll(
            projectId=app_identity.get_application_id(),
            datasetId=config.BIGQUERY_DATASET,
            tableId=config.BIGQUERY_STATS_TABLE,
            body=body
        ).execute()
        logging.debug("BigQuery said... = {}".format(response))
             

and this is the error I get这是我得到的错误

     Traceback (most recent call last):
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "main.py", line 422, in post
 File "/home/barumugham/.local/lib/python2.7/site-packages/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "main.py", line 422, in post
    self.write_to_bigquery(data, metadata)
  File "main.py", line 296, in write_to_bigquery
    bigquery = build('bigquery', 'v2', cache_discovery=False)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/discovery.py", line 258, in build
    adc_key_path=adc_key_path,
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/discovery.py", line 423, in build_from_document
    credentials = _auth.default_credentials()
  File "/usr/local/lib/python2.7/dist-packages/googleapiclient/_auth.py", line 44, in default_credentials
    credentials, project_id = checker()
  File "/usr/local/lib/python2.7/dist-packages/google/auth/_default.py", line 186, in _get_gae_credentials
    project_id = app_engine.get_project_id()
  File "/usr/local/lib/python2.7/dist-packages/google/auth/app_engine.py", line 77, in get_project_id
    return app_identity.get_application_id()
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/app_identity/app_identity.py", line 455, in get_application_id
    _, domain_name, display_app_id = _ParseFullAppId(full_app_id)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/api/app_identity/app_identity.py", line 436, in _ParseFullAppId
    psep = app_id.find(_PARTITION_SEPARATOR)
AttributeError: 'NoneType' object has no attribute 'find'

I am new to python and bigquery so any help is appreciated thanks我是 python 和 bigquery 的新手,所以感谢您的帮助

I would recommend you using the BigQuery Python SDK我建议您使用BigQuery Python SDK

For that, you first need to install it in you Python.为此,您首先需要在 Python 中安装它。 You can do that by running:您可以通过运行:

pip install google-cloud-bigquery

After that you use a code like this insert json records to your table:之后,您使用这样的代码将 json 记录插入到您的表中:

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

table_id = "project_id.dataset.table"

# Your JSON keys must correspond to your table column names
json_list = [{"your": "json", "data":"here"},{"your": "json", "data":"here"},{"your": "json", "data":"here"}, ...]

# Get table reference
table = client.get_table(table_id)
rows_to_insert = json_list
# Insert the data into your table
errors = client.insert_rows(table, rows_to_insert)

Finally, I'd like to say that Python 2 is considered deprecated already.最后,我想说Python 2已经被认为已弃用。 If possible, update it to Python 3如果可能,将其更新为Python 3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM