1

私はグーグルでBigQueryに非常に新しいです

yyyy/mm/dd:hh:mm:ss日と月に基づいてタイムスタンプ()を解析し、日を週にバケット化します。これを行うBigQuery関数は見つかりませんでした。

UDFしたがって、 BigQueryクエリでを記述してアクセスする方法があるかどうか疑問に思いました。

4

2 に答える 2

2

ここには2つの質問があるので、2つの答えがあります。

  • BigQueryUDFをサポートしています:docs。(私が最初にこれに答えたときはそうではありませんでした。)

  • UDFがなくても、日付バケット化は実行可能です。PARSE_UTC_USECBigQueryには、フォームへの入力を期待する1回限りの解析関数がありYYYY-MM-DD hh:mm:ssます。REGEXP_REPLACE日付を正しい形式にするには、を使用する必要があります。それが済んだら、UTC_USEC_TO_WEEK物事を数週間にブロックし、それでグループ化することができます。したがって、これらすべてを結び付けると、テーブルにと呼ばれる列がある場合、timestamp次のような方法で週ごとのカウントを取得できます。

    SELECT week, COUNT(week)
    FROM (SELECT UTC_USEC_TO_WEEK(
                   PARSE_UTC_USEC(
                     REGEXP_REPLACE(
                       timestamp, 
                       r"(\d{4})/(\d{2})/(\d{2}):(\d{2}):(\d{2}):(\d{2})", 
                       r"\1-\2-\3 \4:\5:\6")), 0) AS week
          FROM mytable) 
    GROUP BY week;
    

    0ここに、「開始」として使用する曜日の引数があることに注意してください。私は日曜日を使用しましたが、「ビジネス」の場合は、1月曜日を使用する方が理にかなっていると思われます。

必要な場合に備えて、ドキュメントのタイムスタンプ関数に関するセクションが役立ちます。

于 2012-07-27T06:12:45.730 に答える
1

BigQueryでのUDFサポートがここにあります! https://cloud.google.com/bigquery/user-defined-functions

文字列の時刻指定子をJavaScriptのDateオブジェクトに変換し、そこからいくつかのプロパティを抽出するコードを次に示します。JS日付で使用可能なプロパティについては、 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Dateを参照してください。

QUERY(ネストされたselectをテーブルに置き換えます):

SELECT day_of_week, month_date
FROM parseDate(select '2015/08/01 12:00:00' as date_string);

コード:

function parsedate(row, emit) {
  var d = new Date(row.date_string);
  emit({day_of_week: d.getDay(),
        month_date: d.getDate()});
}

bigquery.defineFunction(
  'parseDate',                           // Name of the function exported to SQL
  ['date_string'],                    // Names of input columns
  [{'name': 'day_of_week', 'type': 'integer'},
   {'name': 'month_date', 'type': 'integer'}],
  parsedate
);
于 2015-09-23T21:33:23.957 に答える