ข้อมูลไม่มีโครงสร้าง

BigQuery เบื้องต้น

Matt Forrest

Field CTO

ทำไมข้อมูลไม่มีโครงสร้างจึงสำคัญ

ตัวอย่างข้อมูลไม่มีโครงสร้าง:

/*--------------+-----------------------------------------*
 | customer_id  | emails                                  |
 +--------------+-----------------------------------------+
 | 12345        | ['[email protected]', '[email protected]']   |
 *--------------+-----------------------------------------*/
BigQuery เบื้องต้น

ARRAY

SELECT ARRAY
  (SELECT 'bigquery' UNION ALL
   SELECT 'analytics' UNION ALL
   SELECT 'sql') AS new_array;


/*------------------------------------* | new_array | +------------------------------------+ | ['bigquery', 'analytics', 'sql'] | *-----------------------------------*/
SELECT ARRAY
  (SELECT 'bigquery' UNION ALL
   SELECT 'analytics' UNION ALL
   SELECT 'sql')[1] as result;


/*---------------* | result | +---------------+ | 'analytics' | *---------------*/
BigQuery เบื้องต้น

STRUCT

SELECT
  STRUCT

<skill string, learning bool> ('big query', true) as skills;
/*--------------+--------------* | skills.skill | learning | +--------------+------------- + | 'big query' | true | *--------------+--------------*/
SELECT
  STRUCT
  <skill string, learning bool>

('big query', true).skill as key;
/*--------------+ | key. | +--------------+ | 'big query' | *--------------*/
BigQuery เบื้องต้น

ARRAY_LENGTH และ ARRAY_CONCAT

SELECT
  ARRAY_LENGTH(
    [
      '[email protected]', 
      '[email protected]'
    ]) as len;

/*------*
 | len  |
 +------+
 | 2    |
 *------*/     
SELECT
  ARRAY_CONCAT(
    ['one'], ['two']) as new_array;

/*-------------------*
 | new_array         |
 +-------------------+
 | ['one', 'two']    |
 *-------------------*/     
BigQuery เบื้องต้น

UNNEST

การ Unnest ข้อมูลอีเมล:

SELECT 
    * 
FROM
    UNNEST(['[email protected]', '[email protected]']) as emails;

/*-------------------+
 | emails            |
 +-------------------+
 | '[email protected]' |
 | '[email protected]'  |
 *-------------------*/
BigQuery เบื้องต้น

UNNEST ร่วมกับ STRUCT

ตัวอย่างข้อมูล — STRUCT ภายใน ARRAY:

[
    {'big query': true},
    {'sql': true}
]
SELECT 
    my_skills.skill, 
    my_skills.learned
FROM 
    UNNEST(skills) as my_skills

/*--------------+--------------* | skill | learned | +--------------+------------- + | 'big query' | true | +--------------+------------- + | 'sql' | true | *--------------+--------------*/
BigQuery เบื้องต้น

SEARCH

การใช้ SEARCH กับข้อมูลอีเมล:

SELECT 
    SEARCH(['[email protected]', '[email protected]'], 'gmail.com') as results;

/*----------*
 | results  |
 +----------+
 | true     |
 *----------*/
BigQuery เบื้องต้น

สรุปข้อมูลไม่มีโครงสร้าง

ARRAY

  • คล้าย list ที่มีลำดับค่า
  • เข้าถึงค่าด้วย index ที่เริ่มจาก 0 (เช่น my_array[0])

STRUCT

  • คล้าย JSON หรือ dictionary
  • รองรับหลาย data type ในโครงสร้างเดียว
  • โครงสร้างต้องเหมือนกันทุกแถวในคอลัมน์นั้น

ARRAY_CONCAT / ARRAY_LENGTH

  • ต่อ array ตั้งแต่สอง array ขึ้นไป และวัดความยาวของ array

UNNEST

  • แปลงข้อมูล ARRAY ให้เป็นแถวแบบแบน

SEARCH

  • ค้นหาค่าที่ตรงกันใน ARRAY หรือ STRUCT
BigQuery เบื้องต้น

มาฝึกกันเถอะ!

BigQuery เบื้องต้น

Preparing Video For Download...