google App Engine Launcherを使用してBigQueryテーブルにデータをロードするApp Engineアプリケーションを構築しましたが、ローカルホストまたはクラウドで実行すると、ログファイルのgoogle.cloud import bigqueryエラーメッセージを使用しているときにcloudという名前のモジュールが表示されません。 Googleクラウドクライアントライブラリをインストールしましたが、それでも同じエラーが発生します。私が使用しているコードの下を見てください
---main.pyファイルには
import argparse
import time
import uuid
from google.cloud import bigquery
def load_data_from_gcs(dataset_name, table_name, source):
bigquery_client = bigquery.Client()
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(table_name)
job_name = str(uuid.uuid4())
job = bigquery_client.load_table_from_storage(
job_name, table, source)
job.begin()
wait_for_job(job)
print('Loaded {} rows into {}:{}.'.format(
job.output_rows, dataset_name, table_name))
def wait_for_job(job):
while True:
job.reload()
if job.state == 'DONE':
if job.error_result:
raise RuntimeError(job.error_result)
return
time.sleep(1)
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('Test')
parser.add_argument('mytable')
parser.add_argument('gs://week/geninfo.csv')
args = parser.parse_args()
load_data_from_gcs(
args.dataset_name,
args.table_name,
args.source)
--app.yamlファイルには次のコードが含まれています
application: mycloudproject
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
script: main.app
何が欠けているのか、またはここで何か問題があるのか教えてください。
これは少し難しいかもしれません。 Google Cloudは新しいPython名前空間の形式を使用しています(ソースを見ると、__init__.py
(ディレクトリ構造内)。
これはPython 3.3 with PEP-42 で変更されました
幸い、Python 2.7では、暗黙的なインポートを回避することでこれを簡単に修正できます。これをファイルの先頭に追加するだけです。
from __future__ import absolute_import
お役に立てば幸いです。