Amazon Athena 中的資料類型 - Amazon Athena

Amazon Athena 中的資料類型

當您執行 CREATE TABLE 時,您需指定資料欄名稱和每個資料欄可包含的資料類型。Athena 支援下列資料類型。如需有關 JDBC 驅動程式在 Athena、JDBC 和 Java 之間支援的資料類型映射的資訊,請參閱《JDBC 驅動程式安裝和設定指南》中的資料類型。如需有關 ODBC 驅動程式在 Athena 和 SQL 之間支援的資料類型映射的資訊,請參閱《ODBC 驅動程式安裝和設定指南》中的資料類型

  • boolean – 值為 truefalse

  • tinyint – 以兩的補數格式表示的 8 位元的有號整數,最小值為 -27,而最大值為 27-1。

  • smallint – 以兩的補數格式表示的 16 位元的有號整數,最小值為 -215,而最大值為 215-1。

  • intinteger – Athena 會根據查詢類型使用不同的整數運算式。

    • int CREATE TABLE – 在資料定義語言 (DDL) 查詢中,使用 int 資料類型。

    • integer – 像是 SELECT * FROM 的 DML 查詢中,Athena 使用 integer 資料類型。integer 為以兩的補數格式表示的 32 位元有號值,最小值為 -231,而最大值為 231-1。

      • 為確保與商業分析應用程式的相容性,JDBC 驅動程式會傳回 integer 類型。

  • bigint – 以兩的補數格式表示的 64 位元的有號整數,最小值為 -263,而最大值為 263-1。

  • double – 64 位元雙精度浮點數。該範圍為 4.94065645841246544e-324d 至 1.79769313486231570e+308d,正極或負極。double 遵循浮點數運算的 IEEE 標準 (IEEE 754)。

  • float – 32 位元單精度浮點數。該範圍為 1.40129846432481707e-45 至 3.40282346638528860e+38,正極或負極。float 遵循浮點數運算的 IEEE 標準 (IEEE 754)。等同於 Prestor 中的 real。在 Athena 中,請使用 DDL 陳述式中的 float,例如 CREATE TABLE,以及 SQL 函數中的 real,例如 SELECT CAST。AWS Glue 爬蟲程式會傳回 float 中的值,而 Athena 會在內部轉譯 realfloat 類型 (請參閱 2018 年 6 月 5 日 版本備註)。

  • decimal(precision, scale)precision 是位數的總數。scale (選用) 則是分數部分的位數數目,預設值為 0。例如,使用這些類型定義:decimal(11,5)decimal(15)。最大精確度為 38,而最大擴展值為 38。

    若要指定小數值為常值,例如在查詢 DDL 表達式中以特定小數值選取列,可指定 decimal 類型定義,並 (在單引號中) 列出小數值為常值,如同此範例中的 decimal_value = decimal '0.12'

  • char – 固定長度的字元資料,介於 1 到 255 的指定長度,例如 char(10)。如需詳細資訊,請參閱 CHAR Hive 資料類型

    注意

    若要使用 substr 函數從 char 資料類型傳回指定長度的子字串,您必須先將 char 值轉換為 varchar,如下列範例所示。

    substr(cast(col1 as varchar), 1, 4)
  • varchar – 可變長度的字元資料,介於 1 到 65535 的指定長度,例如 varchar(10)。如需詳細資訊,請參閱 VARCHAR Hive 資料類型

  • string – 用單引號或雙引號括住的字串文字。如需詳細資訊,請參閱 STRING Hive 資料類型

    注意

    非字串資料類型不能轉換為 Athena 中的 string;請改將它們轉換為 varchar

  • binary – 用於 Parquet 中的資料。

  • date – ISO 格式的日期,例如 YYYY-MM-DD。例如,date '2008-09-15'。一個例外是 OpenCSVSerDe,它使用自 1970 年 1 月 1 日以來經過的天數。如需詳細資訊,請參閱 用於處理 CSV 的 OpenCSVSerDe

  • timestamp – 在 java.sql.Timestamp 相容格式下的日期和時間常數,最大解析度為毫秒,例如 yyyy-MM-dd HH:mm:ss[.f...]。例如,timestamp '2008-09-15 03:04:05.324'。一個例外是 OpenCSVSerDe,它使用 UNIX 數字格式的 timestamp 資料 (例如 1579059880000)。如需詳細資訊,請參閱 用於處理 CSV 的 OpenCSVSerDe

  • array<data_type> – 給定元件類型的陣列。

    範例

    CREATE TABLE table array_table (c1 array<integer>) LOCATION '...'; INSERT INTO array_table values(ARRAY[1,2,3]);
  • map<primitive_type, data_type> – 給定元件類型之間的映射。

    範例

    CREATE TABLE map_table(c1 map<string, integer>) LOCATION '...'; INSERT INTO map_table values(MAP(ARRAY['foo', 'bar'], ARRAY[1, 2]));
  • struct<col_name : data_type [comment col_comment] , ...> – 不同元件類型的元素的集合。

    範例

    CREATE TABLE struct_table(c1 struct<name:varchar(10), age:integer>) LOCATION '...'; INSERT INTO struct_table SELECT CAST(ROW('Bob', 38) AS ROW(name VARCHAR(10), age INTEGER));