Изменить данные BigQuery с помощью скрипта Google Apps - PullRequest
0 голосов
/ 20 декабря 2018

Интересно, сможет ли кто-нибудь помочь мне, пожалуйста?

Я собрал нижеприведенный скрипт, который исправляет данные в моей таблице bigQuery:

function runQuery() {
   var projectId = 'bigquery';
   var datasetId = 'Test';  
   var date = '20181206';
   var tableId = 'ga_sessions_'+date;
// Configuration
   var configuration = {
    "query": {
    "useQueryCache": false,
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "useLegacySql": false,
    query: "SELECT * EXCEPT (hits),ARRAY( SELECT AS STRUCT * EXCEPT (page, appInfo, eventInfo ),(SELECT "+
"AS STRUCT page.* EXCEPT (pagePath, pagePathLevel1, pagePathLevel2, pagePathLevel3, pagePathLevel4), "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePath,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel1, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel2,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel3, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel4, "+
"`bigquery.Test.ga_sessions_20181206`",
  destinationTable: { projectId: projectId, datasetId: datasetId, tableId: tableId } 
   }
 };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "bigquery");
  Logger.log(jobResult);
}

Код работает,но теперь я хотел бы изменить эту строку:

"`bigquery.Test.ga_sessions_20181206`"

Так, чтобы конечному пользователю не приходилось вводить дату, она берется из 'var date'.

Я изменил код так:

function runQuery() {
   var projectId = 'bigquery';
   var datasetId = 'Test';  
   var date = '20181206';
   var tableId = 'ga_sessions_'+date;
// Configuration
   var configuration = {
    "query": {
    "useQueryCache": false,
    "writeDisposition": "WRITE_TRUNCATE",
    "createDisposition": "CREATE_IF_NEEDED",
    "allowLargeResults": true,
    "useLegacySql": false,
    query: "SELECT * EXCEPT (hits),ARRAY( SELECT AS STRUCT * EXCEPT (page, appInfo, eventInfo ),(SELECT "+
"AS STRUCT page.* EXCEPT (pagePath, pagePathLevel1, pagePathLevel2, pagePathLevel3, pagePathLevel4), "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePath,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel1, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel2,"+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel3, "+
"REGEXP_REPLACE(page.pagePath, r'([^\\?]+?)(\\?.+)','\\\\1') AS pagePathLevel4, "+
"`bigquery.Test.ga_sessions_*` "+
"WHERE "+
      "  _TABLE_SUFFIX = 'date' " ,      

  destinationTable: { projectId: projectId, datasetId: datasetId, tableId: tableId } 
   }
 };

  var job = {
    "configuration": configuration
  };

  var jobResult = BigQuery.Jobs.insert(job, "bigquery");
  Logger.log(jobResult);
}

Проблема, с которой я столкнулся сейчас, состоит в том, что вместо того, чтобы вносить изменения в данные, они полностью удаляются.

Может кто-нибудь взглянуть на это, пожалуйста, идайте мне знать, где я ошибся.

Большое спасибо и наилучшие пожелания

Крис

1 Ответ

0 голосов
/ 20 декабря 2018

Проблема здесь:

"  _TABLE_SUFFIX = 'date' "

В запросе буквально ищется суффикс с именем 'date', а не тот, который указан пользователем.Кто-то, у кого есть среда Apps Script, может дать более конкретный ответ, но основная идея состоит в том, что вместо этого вы должны использовать параметр запроса , поэтому вместо него вы должны использовать @date (без кавычек).'date', и вы передадите указанную пользователем дату в качестве параметра запроса типа STRING вместе с запросом.

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