سؤال
أنا جديد جدًا على BigQuery من Google
أريد تحليل الطابع الزمني (yyyy/mm/dd:hh:mm:ss
) استنادًا إلى اليوم والشهر الذي ترغب في تقسيم الأيام إلى أسابيع.لم أجد أي وظيفة BigQuery تقوم بذلك.
ومن ثم، كنت أتساءل عما إذا كانت هناك طريقة يمكنني من خلالها الكتابة UDF
ومن ثم الوصول إليه في استعلام BigQuery
المحلول
هناك سؤالان هنا، لذا إجابتان:
BigQuery يفعل دعم UDFs: مستندات.(لم يحدث ذلك عندما أجبت على هذا لأول مرة.)
حتى بدون UDFs، لا يزال تجميع التاريخ ممكنًا.لدى BigQuery وظيفة التحليل لمرة واحدة،
PARSE_UTC_USEC
, ، والذي يتوقع الإدخال في النموذج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
هذه هي الحجة حول أي يوم من أيام الأسبوع يجب استخدامه باعتباره "البداية"؛لقد استخدمت يوم الأحد، ولكن لأشياء "العمل" -y باستخدام1
(أي.الاثنين) من المرجح أن يكون أكثر منطقية.
فقط في حال كنت في حاجة إليها، و قسم عن وظائف الطابع الزمني في المستندات مفيد.
نصائح أخرى
دعم UDF في BigQuery متوفر الآن! https://cloud.google.com/bigquery/user-defense-functions
فيما يلي بعض التعليمات البرمجية التي ستحول محدد وقت السلسلة إلى كائن JavaScript Date، واستخراج بعض الخصائص منه؛يرى https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date للحصول على معلومات حول الخصائص المتاحة لتواريخ JS.
QUERY (استبدل التحديد المتداخل بجدولك):
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
);