3

クライアント API (python) を使用して共有データセット (表示権限しかない) からデータを (Google クラウド ストレージに) 抽出することは可能ですか?

Web ブラウザーを使用して手動でこれを行うことはできますが、API を使用して機能させることはできません。

プロジェクト (MyProject) と、API を使用してサービスを作成するときに資格情報として使用する MyProject のサービス アカウントを作成しました。このアカウントには、共有データセット (MySharedDataset) に対する表示権限と、Google クラウド ストレージ バケットに対する書き込み権限があります。自分のプロジェクトでジョブを実行して、共有プロジェクトからデータを抽出しようとすると、次のようになります。

job_data = {
        'jobReference': {
            'projectId': myProjectId,
            'jobId': str(uuid.uuid4())
        },
        'configuration': {
            'extract': {
                'sourceTable': {
                    'projectId': sharedProjectId,
                    'datasetId': sharedDatasetId,
                    'tableId': sharedTableId,
                },
                'destinationUris': [cloud_storage_path],
                'destinationFormat': 'AVRO'
            }
        }
    }

エラーが発生します:

googleapiclient.errors.HttpError: https://www.googleapis.com/bigquery/v2/projects/sharedProjectId/jobs?alt=json が「コンテンツ内の値 'myProjectId' が値 sharedProjectId と一致しません」を返しました。パラメータで設定された値が、リクエストで設定された値と一致しません。">

jobReference と sourceTable の両方で sharedProjectId を使用すると、次のようになります。

googleapiclient.errors.HttpError: https://www.googleapis.com/bigquery/v2/projects/sharedProjectId/jobs?alt=json が返されました "アクセスが拒否されました: ジョブ myJobId: ユーザー myServiceAccountEmail にはプロジェクトでジョブを実行する権限がありませんsharedProjectId">

両方のジョブに myProjectId を使用すると、すぐに「DONE」のステータスが返され、エラーは発生しませんが、何もエクスポートされていません。GCS バケットが空です。

これが実際に API を使用して不可能な場合、共有データセットからのデータの抽出を自動化するために使用できる別の方法/ツールはありますか?

* アップデート *

これは、私の GA ログインで実行されている API エクスプローラーを使用して正常に動作します。私のコードでは、次の方法を使用します。

service.jobs().insert(projectId=myProjectId, body=job_data).execute()

projectId を含む jobReference オブジェクトを削除しました

job_data = {
        'configuration': {
            'extract': {
                'sourceTable': {
                    'projectId': sharedProjectId,
                    'datasetId': sharedDatasetId,
                    'tableId': sharedTableId,
                },
                'destinationUris': [cloud_storage_path],
                'destinationFormat': 'AVRO'
            }
        }
    }

しかし、これはエラーを返します

アクセスが拒否されました: テーブル sharedProjectId:sharedDatasetId.sharedTableId: ユーザー 'serviceAccountEmail' には、データセット sharedProjectId:sharedDatasetId のテーブルをエクスポートする権限がありません

私のサービス アカウントは現在、共有データセットの所有者であり、MyProject の編集権限を持っています。他にどこで権限を設定する必要がありますか、またはサービス アカウントではなく GA ログイン資格情報を使用して Python API を使用することは可能ですか?

* アップデート *

最後にそれを機能させました。どのように?サービス アカウントにデータセットを表示する権限があることを確認してください (また、自分でこれを確認するアクセス権がなく、誰かが確認できると言っている場合は、再確認するかスクリーンショットを送信するように依頼してください!)

4

2 に答える 2

0

サービス アカウントにデータセットを表示する権限があることを確認してください (自分でこれを確認するためのアクセス権がなく、誰かが確認できると言っている場合は、再確認するかスクリーンショットを送信するように依頼してください!)

于 2016-04-18T14:59:54.660 に答える