BigQuery - 資料型別



在載入和查詢資料時,瞭解 BigQuery 如何使用和解釋資料型別至關重要。如模式章節所示,載入到 BigQuery 的每一列都必須具有定義的、可接受的型別。

BigQuery 接受其他 SQL 方言使用的許多資料型別,並且還提供 BigQuery 獨有的資料型別。

跨 SQL 方言的常見資料型別

跨 SQL 方言常見的資料型別包括:

  • STRING
  • INTEGER
  • FLOAT
  • BOOLEAN

BigQuery 還支援特殊資料型別,例如 JSON 陣列,這些將在後面的章節中討論。

注意 - 如果在載入過程中未提供模式或未指定型別,BigQuery 將推斷型別。但是,對於依賴於不可預測的上游資料的整合,這並非總是積極的結果。

與分割槽和聚類列類似,必須在建立表時指定型別。

使用 CAST() 函式更改型別

可以在查詢中(臨時或永久)更改型別。為此,請使用 CAST() 函式。CAST 使用以下語法:

CAST(column_name AS column_type)

例如:

CAST(id AS STRING)

與指定錯誤型別類似,嘗試強制將不相容型別 CAST 為其他型別可能會令人沮喪並導致基礎設施中斷。

要獲得更可靠的型別轉換方法,請使用SAFE_CAST(),它將為不相容的行返回 NULL,而不是完全中斷:

SAFE_CAST(id AS STRING)

深入瞭解 BigQuery 如何解釋給定輸入的型別對於建立健壯的 SQL 查詢至關重要。

BigQuery 資料型別 STRING

在 SQL 開發人員使用的最常見的資料型別中,BigQuery 中的 STRING 型別通常易於識別。但是,在字串操作或解釋方面偶爾會出現一些怪癖。

通常,字串型別由字母數字字元組成。雖然字串型別可以包含類似整數的數字和符號,但如果指定了 STRING 型別,則此資訊將像常規字串一樣儲存。

新開發人員遇到的一個棘手的情況是處理包含整數或浮點數以及符號的行,例如貨幣情況。

雖然可以假設 $5.00 是一個 FLOAT 因為有小數點,但美元符號使它成為一個字串。因此,在載入包含美元符號的行時,BigQuery 會期望在您的模式中將其定義為 STRING 型別。

DATE 資料型別

STRING 型別的一個子集是 DATE 資料型別。

  • 即使 BigQuery 有自己的日期值表示法,但日期值本身預設情況下表示為字串。
  • 對於使用 Python 中 Pandas 的人來說,這類似於日期欄位如何在資料框中表示為物件的方式。
  • 有各種各樣的函式專門用於解析 STRING 資料。

STRING 函式

值得注意的 STRING 函式包括:

  • LOWER() - 將字串中的所有內容轉換為小寫
  • UPPER() - LOWER() 的反函式;將值轉換為大寫
  • INITCAP() - 僅將每個句子的第一個字母大寫;即句子大小寫
  • CONCAT() - 組合字串元素

重要的是,BigQuery 中的資料型別預設為 STRING。除了常規字串元素之外,這還包括開發人員未指定 REPEATED 模式的列表。

INTEGER 和 FLOAT

如果要在企業(商業)規模上使用 BigQuery,則很可能需要處理涉及數字的資料。這可以是任何東西,從出勤資料到營業收入。

無論如何,STRING 資料型別對於這些用例都沒有意義。這不僅是因為這些數字沒有像美元或歐元這樣的貨幣符號,還因為為了生成有用的見解,需要使用特定於數值資料的函式。

注意 INTEGER 和 FLOAT 之間的區別很簡單:"."

在許多 SQL 方言中,在指定數值時,開發人員需要告訴 SQL 引擎期望多少位數字。這就是傳統 SQL 獲取諸如BIGINT之類的名稱的地方。

BigQuery 將 FLOAT 型別編碼為 64 位實體。因此,當您將列 CAST() 為 FLOAT 型別時,您需要這樣做:

CAST(column_name AS FLOAT64) 

值得注意的 INTEGER 和 FLOAT 函式

其他值得注意的 INTEGER 和 FLOAT 函式包括:

  • ROUND()
  • AVG()
  • MAX()
  • MIN()

需要注意的事項

FLOAT 型別的一個重要警告是,除了指定用句點分隔的數字外,FLOAT 型別還是 NULL 的預設型別。

如果使用SAFE_CAST(),最好包含其他邏輯以將從 FLOAT 返回的任何 NULL 值轉換為所需的型別。

廣告

© . All rights reserved.