Возможно ли извлечь данные (в облачное хранилище Google) из общего набора данных (где у меня есть разрешения на просмотр) с использованием клиентских API (python)?Извлечение данных BigQuery из общего набора данных
Я могу сделать это вручную с помощью веб-браузера, но не могу заставить его работать с использованием API.
Я создал проект (MyProject) и учетную запись службы MyProject для использования в качестве учетных данных при создании службы с использованием API. У этой учетной записи есть разрешения на доступ к общему набору данных (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 returned "Value 'myProjectId' in content does not agree with value sharedProjectId'. This can happen when a value set through a parameter is inconsistent with a value set in the request.">
Использование sharedProjectId в обоих jobReference и SourceTable я получаю:
googleapiclient.errors.HttpError: https://www.googleapis.com/bigquery/v2/projects/sharedProjectId/jobs?alt=json returned "Access Denied: Job myJobId: The user myServiceAccountEmail does not have permission to run a job in project sharedProjectId">
Использование myProjectId как для работы сразу возвращается со статусом «DONE» и без ошибок, но ничего не было экспортировано. Мой ковш GCS пуст.
Если это действительно невозможно с помощью API, существует ли другой метод/инструмент, который можно использовать для автоматизации извлечения данных из общего набора данных?
* UPDATE *
Это прекрасно работает с использованием API-исследователь работает под моим логином GA. В моем коде я использую следующий метод:
service.jobs().insert(projectId=myProjectId, body=job_data).execute()
и удалить объект jobReference, содержащий ProjectID
job_data = {
'configuration': {
'extract': {
'sourceTable': {
'projectId': sharedProjectId,
'datasetId': sharedDatasetId,
'tableId': sharedTableId,
},
'destinationUris': [cloud_storage_path],
'destinationFormat': 'AVRO'
}
}
}
но это возвращает ошибку
Access Denied: Table sharedProjectId:sharedDatasetId.sharedTableId: The user 'serviceAccountEmail' does not have permission to export a table in dataset sharedProjectId:sharedDatasetId
Моя учетная запись службы в настоящее время является владельцем в общем наборе данных и имеет разрешения на редактирование в MyProject, где еще нужно установить разрешения или можно использовать API-интерфейс python, используя мои учетные данные пользователя GA, а не servi счет?
* UPDATE *
Наконец получил его на работу. Как? Убедитесь, что учетная запись службы имеет разрешения на просмотр набора данных (и если у вас нет доступа, чтобы проверить это самостоятельно, и кто-то говорит вам, что это так, попросите их дважды проверить/отправить вам снимок экрана!)
С помощью bq tool bq running _extract sharedProjectId: sharedDataSetId.sharedTableId gs: //myBucket/myFile.csv_ Я получаю сообщение об ошибке: _Cannot определить таблицу, написанную sharedDatasetId. sharedTableId_ grrr .. –
Cheers Vaqar, он также работает для меня в использовании API исследователь. Используя API-интерфейс python, я устанавливаю projectId (в красном тексте в проводнике API) с помощью объекта jobReference (захват запроса проводника API в скрипаче, я вижу, что он делает то же самое), но я все равно получаю сообщение об ошибке «Значение» myProjectId 'в содержании не согласуется с значением sharedProjectId'. Это может произойти, когда значение, установленное через параметр, не соответствует значению, установленному в запросе. ". Я дам bq tool go go –
Также заметил, что метод python имеет параметры projectid и json как параметры, поэтому я устанавливаю projectId как myProjectId и удаляю объект jobReference из json, но это возвращает ошибку _Access Denied : У пользователя нет разрешения на экспорт таблицы в наборе данных sharedProjectId: sharedDatasetId_ –