私はグーグルでBigQueryに非常に新しいです
yyyy/mm/dd:hh:mm:ss
日と月に基づいてタイムスタンプ()を解析し、日を週にバケット化します。これを行うBigQuery関数は見つかりませんでした。
UDF
したがって、 BigQueryクエリでを記述してアクセスする方法があるかどうか疑問に思いました。
私はグーグルでBigQueryに非常に新しいです
yyyy/mm/dd:hh:mm:ss
日と月に基づいてタイムスタンプ()を解析し、日を週にバケット化します。これを行うBigQuery関数は見つかりませんでした。
UDF
したがって、 BigQueryクエリでを記述してアクセスする方法があるかどうか疑問に思いました。
ここには2つの質問があるので、2つの答えがあります。
BigQueryはUDFをサポートしています:docs。(私が最初にこれに答えたときはそうではありませんでした。)
UDFがなくても、日付バケット化は実行可能です。PARSE_UTC_USEC
BigQueryには、フォームへの入力を期待する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
月曜日を使用する方が理にかなっていると思われます。
必要な場合に備えて、ドキュメントのタイムスタンプ関数に関するセクションが役立ちます。
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
);