Удаление таблицы в Big Query через Node.js API и получение ENOENT: такого файла или каталога нет - PullRequest
0 голосов
/ 12 февраля 2020

Я понимаю, что это может быть глупый вопрос, поэтому спасибо, что нашли время, чтобы прочитать (и, надеюсь, ответить) его. Я не знаком с Javascript и с узлом, поэтому, пожалуйста, предположим, что я знаю v маленький жаргон.

Я пытаюсь удалить таблицу Big Query в node.js (v12.15.0), используя таблицу Функция .delete () из клиентской библиотеки Google (ссылка ниже).

https://googleapis.dev/nodejs/bigquery/latest/Table.html#delete

const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteTable(
  datasetId = 'my_dataset',
  tableId = 'my_table',
) {
  console.log(`Deleting table ${tableId}`);
  try {
    const [table] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();
    console.log(`Table ${tableId} deleted.`);
  } catch (err){
    console.log(err);
  }
}

deleteTable();

Для запуска Google требуется аутентификация из вашего Большого запроса учетная запись, которую я скачал как файл json и сохранил в папке «учетные данные». Путь сохраняется в моем ~ / .bash_profile как переменная среды:

export GOOGLE_APPLICATION_CREDENTIALS="/Users/tom/Desktop/work/test/credentials/google_application_credentials.json"

Когда я пытаюсь запустить приведенный выше скрипт, я получаю ошибку ENOENT:

Error: The file at {[contents of google_application_credentials.json]} does not exist, or it is not a file. 
ENOENT: no such file or directory, lstat '/Users/tom/Desktop/work/test/{[contents of google_application_credentials.json]}
   at Object.realpathSync (fs.js:1529:7)
    at GoogleAuth._getApplicationCredentialsFromFilePath (/Users/tom/Desktop/work/test/node_modules/google-auth-library/build/src/auth/googleauth.js:250:27)
    at GoogleAuth._tryGetApplicationCredentialsFromEnvironmentVariable (/Users/tom/Desktop/work/test/node_modules/google-auth-library/build/src/auth/googleauth.js:192:25)
    at GoogleAuth.getApplicationDefaultAsync (/Users/tom/Desktop/work/test/node_modules/google-auth-library/build/src/auth/googleauth.js:130:33)
    at GoogleAuth.getClient (/Users/tom/Desktop/work/test/node_modules/google-auth-library/build/src/auth/googleauth.js:502:28)
    at GoogleAuth.authorizeRequest (/Users/tom/Desktop/work/test/node_modules/google-auth-library/build/src/auth/googleauth.js:543:35)
    at BigQuery.makeAuthenticatedRequest (/Users/tom/Desktop/work/test/node_modules/@google-cloud/common/build/src/util.js:374:28)
    at BigQuery.request_ (/Users/tom/Desktop/work/test/node_modules/@google-cloud/common/build/src/service.js:129:18)
    at BigQuery.request (/Users/tom/Desktop/work/test/node_modules/@google-cloud/common/build/src/service.js:140:36)
    at Dataset.request_ (/Users/tom/Desktop/work/test/node_modules/@google-cloud/common/build/src/service-object.js:231:21) {
  errno: -2,
  syscall: 'lstat',
  code: 'ENOENT',
  path: '/Users/tom/Desktop/work/test/{[contents of google_application_credentials.json]}

Понятно, этот скрипт ищет содержимое файла. json, а не сам файл, в / Users / tom / Desktop / work / test, но я не знаю почему. Путь в профиле bash определенно правильный, а переменные среды корректно обновляются. Если бы кто-нибудь мог мне помочь, я был бы очень благодарен! Дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 12 февраля 2020

решено: я перезапустил свой ноутбук, который, должно быть, очистил некоторые переменные среды, которых там не должно было быть, а затем загрузил новый файл. json с данными аутентификации учетной записи из Big Query. В частности, они изменились (я думаю, что они меняются при каждой загрузке), поэтому я мог заранее использовать устаревший файл.

Это заставило скрипт работать так, как должно.

Если у кого-то есть лучший ответ за то, что на самом деле происходит, пожалуйста, ответьте!

...