Доступ к таблице BigQuery с внешними источниками данных с использованием учетной записи службы - PullRequest
0 голосов
/ 07 февраля 2019

Как я могу запросить таблицу BigQuery , основанную на внешнем источнике данных (Google Spreadsheet), используя учетную запись службы в качестве поставщика учетных данных?

Я инициализирую Java-клиент BigQuery следующим образом:

GoogleCredentials cred = ServiceAccountCredentials
        .fromStream(credentialsFile.getInputStream());
BigQuery bq = BigQueryOptions.newBuilder()
        .setCredentials(cred).build()
        .getService();

Однако при попытке запроса к таблице я получаю ошибку аутентификации :

Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.

При добавлении области действия , подобной этой:

GoogleCredentials cred = ServiceAccountCredentials
        .fromStream(credentialsFile.getInputStream())
        .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/drive"));

, вместо этого возвращается Insufficient Permission ошибка.

1 Ответ

0 голосов
/ 08 февраля 2019

Я также столкнулся с той же проблемой, я исправил, используя следующие шаги

1.Включите Google Drive API в проекте

Войдите в консоль Google Cloud.Выберите свой проект из раскрывающегося списка.На левой навигационной панели выберите API & Services, затем выберите Dashboard.В верхней части страницы нажмите Включить API и службы.Используйте панель поиска для поиска Google Drive API, выберите его и нажмите «Включить».

2.Добавьте идентификатор клиента учетной записи службы в Google Sheet

В консоли Google Cloud Console выберите IAM & admin на левой боковой панели, а затем выберите учетные записи служб.Скопируйте значение в столбце идентификатора учетной записи службы.Если у вас еще нет учетной записи службы, следуйте приведенным выше инструкциям для подключения учетной записи BigQuery.

Откройте Google Sheet и нажмите кнопку «Поделиться».Нажмите «Дополнительно» внизу и в текстовом поле «Пригласить людей» введите значение идентификатора учетной записи службы, которое вы скопировали ранее.

3.Добавить область действия «облачная платформа»

GoogleCredentials cred = ServiceAccountCredentials
            .fromStream(credentialsFile.getInputStream())
            .createScoped(Arrays.asList("https://www.googleapis.com/auth/drive",
                    "https://www.googleapis.com/auth/cloud-platform"));

Код:

        File credentialsFile = new File("credentials.json");
        GoogleCredentials cred = ServiceAccountCredentials
                .fromStream(new FileInputStream(credentialsFile))
                .createScoped(Arrays.asList("https://www.googleapis.com/auth/drive",
                        "https://www.googleapis.com/auth/cloud-platform"));
        BigQuery bigquery = BigQueryOptions.newBuilder()
                .setCredentials(cred).build()
                .getService();

        QueryJobConfiguration queryConfig =
                QueryJobConfiguration.newBuilder(
                        "SELECT * FROM `my_project.dataset.table1`")
                        // Use standard SQL syntax for queries.
                        // See: https://cloud.google.com/bigquery/sql-reference/
                        .setUseLegacySql(false)
                        .build();

        // Create a job ID so that we can safely retry.
        JobId jobId = JobId.of(UUID.randomUUID().toString());
        Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());

        // Wait for the query to complete.
        queryJob = queryJob.waitFor();

        QueryResponse response = bigquery.getQueryResults(jobId);

        TableResult result = queryJob.getQueryResults();

        // Print all pages of the results.
        for (FieldValueList row : result.iterateAll()) {
            String date = row.get("Date").getStringValue();
            System.out.printf("Date: %s%n", date);
        }

Ссылка:

https://support.chartio.com/docs/data-sources/#google-sheets-via-bigquery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...