本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
阿夫羅 SerDe
使用 Avro 從 Avro SerDe 資料建立 Athena 資料表。
序列化程式庫名稱
Avro SerDe 的序列化程式庫名稱為。org.apache.hadoop.hive.serde2.avro.AvroSerDe
如需技術資訊,請參閱 Apache 文件AvroSerDe
使用阿夫羅 SerDe
基於安全理由,Athena 不支援使用avro.schema.url
來指定資料表結構定義;請avro.schema.literal
改為使用。
若要從 Avro 格式的資料擷取結構定義,請使用位於已安裝 Avro 發行版本java
子目錄中的 Apache avro-tools-
檔案。使用<version>
.jargetschema
參數傳回可在陳述式中使用的結構描WITH SERDEPROPERTIES
述,如下列範例所示。
java -jar avro-tools-1.8.2.jar getschema my_data.avro
若要下載 Avro,請參閱 Apache Avro 版本
取得結構描述之後,請使用CREATE TABLE
陳述式根據 Amazon S3 中存放的基礎 Avro 資料建立 Athena 資料表。若要在CREATE TABLE
陳述式 SerDe中指定 Avro,請使用ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
。使用WITH SERDEPROPERTIES
子句指定結構描述,如下列範例所示。
注意
Replace (取代) myregion
s3://athena-examples-
使用您執行 Athena 的地區識別碼,例如,myregion
/path/to/data/s3://athena-examples-us-west-1/path/to/data/
.
CREATE EXTERNAL TABLE flights_avro_example ( yr INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, flightnum STRING, origin STRING, dest STRING, depdelay INT, carrierdelay INT, weatherdelay INT ) PARTITIONED BY (year STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' WITH SERDEPROPERTIES ('avro.schema.literal'=' { "type" : "record", "name" : "flights_avro_subset", "namespace" : "default", "fields" : [ { "name" : "yr", "type" : [ "null", "int" ], "default" : null }, { "name" : "flightdate", "type" : [ "null", "string" ], "default" : null }, { "name" : "uniquecarrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "airlineid", "type" : [ "null", "int" ], "default" : null }, { "name" : "carrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "flightnum", "type" : [ "null", "string" ], "default" : null }, { "name" : "origin", "type" : [ "null", "string" ], "default" : null }, { "name" : "dest", "type" : [ "null", "string" ], "default" : null }, { "name" : "depdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "carrierdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "weatherdelay", "type" : [ "null", "int" ], "default" : null } ] } ') STORED AS AVRO LOCATION 's3://athena-examples-
myregion
/flight/avro/';
對資料表執行 MSCK REPAIR TABLE
陳述式,以重新整理分割區中繼資料。
MSCK REPAIR TABLE flights_avro_example;
透過出境總數查詢 10 大出境城市。
SELECT origin, count(*) AS total_departures FROM flights_avro_example WHERE year >= '2000' GROUP BY origin ORDER BY total_departures DESC LIMIT 10;