12/08/2018, 17:10

Các kiểu dữ liệu của Google Cloud Bigquery

Bigquery suppost nhiều kiểu dữ liệu, có thể là những kiểu cơ bản như Interger, Boolean, hay những kiểu phức tạp hơn như Array, Struct. Chúng ta sẽ đi tìm hiểu khái quát từng kiểu dữ liệu. Khi lưu trữ cũng như truy vấn dữ liệu, hãy chú ý tới các thuộc tính của kiểu dữ liệu sau: Property ...

Bigquery suppost nhiều kiểu dữ liệu, có thể là những kiểu cơ bản như Interger, Boolean, hay những kiểu phức tạp hơn như Array, Struct. Chúng ta sẽ đi tìm hiểu khái quát từng kiểu dữ liệu.

Khi lưu trữ cũng như truy vấn dữ liệu, hãy chú ý tới các thuộc tính của kiểu dữ liệu sau:

Property Description Applies To
Nullable NULL là một giá trị hợp lệ Tất cả các kiểu dữ liệu, ngoại trừ: - Array không thể là NULL -Tất cả các phần tử của Array là NULL
Orderable Có thể được sử dụng trong mệnh đề ORDER BY Tất cả các kiểu dữ liệu ngoại trừ Array và Struct
Groupable Có thể xuất hiện trong một các biểu thức sau: GROUP BY, DISTINCT, PARTITION BY, tuy nhiên PARTITION BY không thể chứa kiểu Float và Double Tất cả các kiểu dữ liệu ngoại trừ Array và Struct
Comparable Các giá trị cùng loại có thể so sánh được với nhau Tất cả kiểu dữ liệu ngoại trừ Array vì Array thì so sánh là không được suppost, so sánh bằng trên Struct đã được suppost với field by field và bỏ qua tên field, không suppost nhỏ hơn hay lớn hơn trên struct. Tất cả các kiểu dữ liệu được suppost so sánh có thể được sử dụng trong điều kiện JOIN

Gồm các giá trị kiểu số nguyên:

Name Storage Size Range
INT64 8 bytes -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
Name Storage Size Range
FLOAT64 8 bytes Double precision (approximate) decimal values.
Name Description
BOOL Gồm hai giá trị TRUE và FALSE

Các string input và output phải là UTF-8 encoded. Tất cả các hàm và toán tử hoạt động trên các giá trị STRING hoạt động trên các ký tự Unicode thay vì byte. Chẳng hạn như, các function SUBSTR hay LENGTH được áp dụng trên kiểu dữ liệu String là Unicode, chứ không phải Byte.

Name Description
BYTES Variable-length binary data.

String và Byte là 2 kiểu dữ liệu riêng biệt, và không thể thay thế cho nhau. Hầu hết các function trên string cũng được định nghĩa trên byte.

Name Description Range
DATE Biểu thị 1 ngày chẵn trong lịch 0001-01-01 to 9999-12-31

Kiểu dữ liệu date biểu thị 1 ngày chắn trong lịch, độc lập với múi giờ. Giá trị DATE không đại diện cho một khoảng thời gian cụ thể 24h. format:

    'YYYY-[M]M-[D]D'
    - YYYY: Four-digit year
    - [M]M: One or two digit month
    - [D]D: One or two digit day
Name Description Range
DATETIME Biểu thị chi tiết 1 điểm thời gian cụ thể bao gồm: year, month, day, hour, minute, second, and subsecond. 0001-01-01 00:00:00 to 9999-12-31 23:59:59.999999

Không giống như TIMESTAMP, một đối tượng DATETIME không biểu thị một thời gian tuyệt đối, mà chỉ là một thời gian nào đó trên đồng hồ hoặc lịch. Format:

    YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]]
    - YYYY: Four-digit year
    - [M]M: One or two digit month
    - [D]D: One or two digit day
    - ( |T): A space or a T separator
    - [H]H: One or two digit hour (valid values from 00 to 23)
    - [M]M: One or two digit minutes (valid values from 00 to 59)
    - [S]S: One or two digit seconds (valid values from 00 to 59)
    - [.DDDDDD]: Up to six fractional digits (i.e. up to microsecond precision)
Name Description Range
TIME Biểu thị một thời gian cụ thể nào đó trong ngày 00:00:00 to 23:59:59.999999. 00:00:00 to 23:59:59.999999.

Format:

    [H]H:[M]M:[S]S[.DDDDDD]
    - [H]H: One or two digit hour (valid values from 00 to 23)
    - [M]M: One or two digit minutes (valid values from 00 to 59)
    - [S]S: One or two digit seconds (valid values from 00 to 59)
    - [.DDDDDD]: Up to six fractional digits (i.e. up to microsecond precision)
Name Description Range
TIMESTAMP Biểu thị một điểm thời gian tuyệt đối, với độ chính xác microsecond. 0001-01-01 00:00:00 to 9999-12-31 23:59:59.999999 UTC

format:

    YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]][time zone]
    - YYYY: Four-digit year
    - [M]M: One or two digit month
    - [D]D: One or two digit day
    - ( |T): A space or a T separator
    - [H]H: One or two digit hour (valid values from 00 to 23)
    - [M]M: One or two digit minutes (valid values from 00 to 59)
    - [S]S: One or two digit seconds (valid values from 00 to 59)
    - [.DDDDDD]: Up to six fractional digits (i.e. up to microsecond precision)
    - [time zone]: String representing the time zone. See the time zones section for details.

Timezone phải được chỉ định khi hiển thị kiểu dữ liệu timestamp. Nếu giá trị múi giờ không được chỉ định thì được hiểu đó là mặc định UTC.

Name Description
ARRAY Một danh sách được sắp sếp của 0 hoặc nhiều phần tử không phải kiểu ARRAY

Mảng của mảng là không được suppost. Và cả các truy vấn mà kết quả sinh ra một mảng của các mảng cũng raise lỗi. Thay vào đó, nên dùng một STRUCT chèn vào giữa các ARRAY và sử dụng cấu trúc SELECT AS STRUCT. Hiện tại, BigQuery có 2 giới hạn sau đối với NULLs và ARRAYs:

  • Bigquery sẽ raise ra lỗi nếu kết quả của truy vấn có mảng chứa những phần tử NULL mặc dù array có thể được dùng trong câu truy vấn
  • Bigquery sẽ dịch mảng null thành mảng rỗng trong kết quả của truy vấn mặc dù truy vấn mảng NULL và mảng rỗng là 2 khái niệm hoàn toàn khác nhau

Kiểu dữ liệu ARRAY được khai báo sử dụng cú pháp : (< and >), kiểu các phần tử của mảng có thể tùy ý, miễn là không phải kiểu mảng format:

    ARRAY<T>

Ví du:

  • ARRAY<INT64> : Một mảng đơn giản, các phần tử là các số nguyên 64 bit.
  • ARRAY<STRUCT<INT64, INT64>> : Một mảng, mỗi phần tử của mảng là là 1 struct. mỗi cấu trúc chứa 2 số nguyên 64 bit.
  • ARRAY<ARRAY<INT64>> (not supported): Đây là một khai báo invalid, mảng không thể chứa trực tiếp 1 mảng
  • ARRAY<STRUCT<ARRAY<INT64>>>: Một mảng gồm các mảng chứa số nguyên 64 bit. Chú ý rằng, Struct được chèn giữa 2 mảng vì mảng không thể chứa trực tiếp mảng.
Name Description
STRUCT Chứa các trường được sắp xếp, với kiểu dữ liệu(bắt buộc khai báo) và tên trường(tùy chọn)

Để khai báo struct, sử dụng dấu (< and >), với kiểu dữ liệu các phần tử của struct có thể tùy ý

    STRUCT<T>

Ví dụ:

  • STRUCT<INT64> : Một struct đơn giản với một trường kiểu số nguyên 64 bit và không có tên.
  • STRUCT<x STRUCT<y INT64, z INT64>>: Một STRUCT với một trường kiểu STRUCT có tên là x. Struct này có 2 trường y và z đều là kiểu số nguyên 64 bit.
  • STRUCT<inner_array ARRAY<INT64>>: Một struct có trường là 1 mảng với tên inner_array, mảng này gồm các phần tử kiểu số nguyên 64 bit
0