Код SQLite для преобразования даты (дд / мм / гггг в ггггQ1) не работает в редакторе SQL BigQuery - PullRequest
0 голосов
/ 14 февраля 2019

Чтобы визуализировать пузырьковую диаграмму в Gapminder, все даты должны быть преобразованы из dd / mm / yyyy в yyyyQ1.Этот код выполняет преобразование в SQLite.

Я могу с помощью этого кода преобразовать даты на моем локальном клиенте SQLite, а затем загрузить выведенный CSV-файл в Gapminder для просмотра пузырьковой диаграммы.

Однако эта база данных объемом 25 ГБ вышла за пределы клиента SQLite, и ее необходимо запрашивать с помощью BigQuery.

Есть две проблемы.

1: Во-первых, для BigQuery этот код должен преобразовать столбец даты csv из дд / мм / гггг в мм / дд / гггг.

Тогда для Gapminder необходимо, чтобы конечный результат был yyyyQ1 ..

Проблема в том, что когда я запускаю тот же код в редакторе SQL веб-интерфейса BigQuery, я получаю сообщение об ошибке "неожиданный канал"":

Ввод:

replace(substr(PCR.repdte,6),'/','')||'q'||CAST(1+ . 
      ((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER) 

Ввод:

  Syntax error: Unexpected "|" at [3:44]

enter image description here

Вот весь операторЯ успешно запустил клиент SQLite и попытался запустить его в редакторе веб-интерфейса Bigquery SQL:

SELECT 
  (SELECT
      replace(substr(PCR.repdte,6),'/','')||'q'||CAST(1+ . 
      ((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER) 
  FROM All_Reports_19920331_Performance_and_Condition_Ratios as PCR) AS 
    Quarter,
  (SELECT 
      Round(AVG(PCR.lnlsdepr))
      FROM All_Reports_19920331_Performance_and_Condition_Ratios as PCR) AS 
      NetLoansAndLeasesToDeposits,
 (SELECT sum(CAST(LD.IDdepsam as int))
 FROM 
  'All_Reports_19920331_Deposits_Based_on_the_Dollars250,000_
  Reporting_Threshold' AS LD) AS DepositAccountsWith$LessThan$250k
UNION ALL
SELECT 
  (SELECT
     replace(substr(PCR.repdte,6),'/','')||'q'||CAST(1+ . 
    ((substr(PCR.repdte,1,2)-1) / 3) AS INTEGER) --converts date format 
    from dd/mm/yyyy to yyyyq1 (financial quarters)
  FROM All_Reports_19920630_Performance_and_Condition_Ratios as PCR) AS 
  Quarter,
  (SELECT 
      Round(AVG(PCR.lnlsdepr))
  FROM All_Reports_19920630_Performance_and_Condition_Ratios as PCR) AS 
      NetLoansAndLeasesToDeposits,
  (SELECT sum(CAST(LD.IDdepsam as int))
  FROM 
    'All_Reports_19920630_Deposits_Based_on_the_Dollars
     250,000_Reporting_Threshold' AS LD) AS 
     DepositAccountsWith$LessThan$250k

Цель - преобразовать дату из дд / мм / гггг в мм / дд / гггг, так что BigQueryмогу прочитать.Затем снова конвертируйте его в yyyyQ1, чтобы Gapminder мог его прочитать.

enter image description here

1 Ответ

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

все даты должны быть преобразованы из, дд / мм / гггг в ггггQ1

Ниже приведен упрощенный пример для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '31/12/2018' dt UNION ALL
  SELECT '31/01/2019'
)
SELECT dt, 
  CONCAT(
    FORMAT_DATE('%Y', PARSE_DATE('%d/%m/%Y', dt)),
    'Q', CAST(EXTRACT(QUARTER FROM PARSE_DATE('%d/%m/%Y', dt)) AS STRING)
  ) date_yyyyQ1
FROM `project.dataset.table`   

с результатом

Row dt          date_yyyyQ1  
1   31/12/2018  2018Q4   
2   31/01/2019  2019Q1   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...