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