阿夫羅 SerDe - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

阿夫羅 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>.jar 檔案。使用getschema參數傳回可在陳述式中使用的結構描WITH SERDEPROPERTIES述,如下列範例所示。

java -jar avro-tools-1.8.2.jar getschema my_data.avro

若要下載 Avro,請參閱 Apache Avro 版本。若要直接下載 Apache Avro 工具,請參閱 Apache Avro 工具 Maven 儲存庫

取得結構描述之後,請使用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-myregion/path/to/data/使用您執行 Athena 的地區識別碼,例如,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;
注意

航班資料表資料來自美國運輸部交通統計局提供的航班。從原本資料去掉飽和度。