سؤال

أنا جديد جدًا على 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
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top