阿里云数据湖分析(DLA) 是阿里云的无服务器交互式查询和分析服务。只需运行标准 SQL 语句即可查询和分析存储在对象存储服务(OSS) 和表存储实例中的数据, 而无需移动数据。
目前, DLA 已在阿里云正式上市。您可以申请试用此箱即用数据分析服务。
访问官方文档页面, 申请欧华服务的激活。
除了纯文本文件 (如 CSV 和 TSV 文件) 之外, DLA 还可以查询和分析其他格式的数据文件, 如兽人、实木复合地板、JSON、RCFile 和 Avro。DLA 甚至可以按照 ESRI 标准和与指定正则表达式匹配的文件查询地理 JSON 数据。
本文介绍如何使用 DLA 分析基于文件格式存储在 OSS 实例中的文件。DLA 为文件处理提供了各种内置序列化程序/反序列化 (SerDes)。您可以选择一个或多个 SerDes 来匹配 OSS 实例中的数据文件格式, 而不是自行编译程序。如果 SerDes 不满足您处理特殊文件格式的需要, 请联系我们。
存储格式和 SerDe
使用 DLA 创建表后, 运行 “显示创建表” 语句查询完整表创建语句。
CREATE EXTERNAL TABLE nation (
N_NATIONKEY INT,
N_NAME STRING,
N_REGIONKEY INT,
N_COMMENT STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS TEXTFILE
LOCATION 'oss://test-bucket-julian-1/tpch_100m/nation';
创建表后, 查看您刚创建的表的详细信息。
mysql> show create table nation;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Result |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE EXTERNAL TABLE `nation`(
`n_nationkey` int,
`n_name` string,
`n_regionkey` int,
`n_comment` string)
ROW FORMAT SERDE
'org
hadoop.hive.serde2.lazy.LazySimpleSerDe 与 SERDEPROPERTIES (“字段. delim” = “|”, “序列化. 格式” = “|”)
存储为 INPUTFORMAT “org.apache.hadoop.mapred.TextInputFormat” 默认 “org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat” 位置 “oss://test-bucket-julian-1/tpch_100m/nation” TBLPROPERTIES (“COLUMN_STATS_ACCURATE” = “false “、” numFiles’=’1 “、” numRows’=’-1 “、” rawDataSize’=’-1 “、” totalSize’=’2224 “、” transient_lastDdlTime’=’1528440011 “) |
+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–+ 1 行 (1.81 秒)
如果将表创建语句与表的详细信息进行比较, 您会注意到在表创建语句中存储为符合已被行格式 SERDE 替换.。存储为 INPUTFORMAT..。默认.
DLA 使用 INPUTFORMAT 读取存储在 OSS 实例中的数据文件, 并使用 SERDE 从文件中解析表记录。
下表列出了 DLA 当前支持的文件格式。若要为下列任何格式的文件创建表, 只需运行 “存储为”。DLA 选择合适的 SERDE、INPUTFORMAT 和默认。
存储格式 | 描述 |
存储为符合 | 数据文件以纯文本格式存储。这是默认的文件格式。文件中的每一行对应于表中的记录。常见的 JSON 数据也属于此类型。 |
作为兽人存储 | 数据文件以 ORC 格式存储。 |
存储为实木复合地板 | 数据文件以镶木格式存储。 |
存储为 RCFILE | 数据文件以 RCFile 格式存储。 |
存储为 AVRO | 数据文件以 Avro 格式存储。 |
也可以使用指定的 SerDe 和特殊的列分隔符来运行存储。
以下部分介绍了一些示例。
例子
CSV 文件
CSV 文件实际上是纯文本文件。您可以运行存储为符合创建 CSV 文件的表。
通过运行行格式分隔字段以逗号 (,) 分隔列, 以 “,” 终止。
常见 CSV 文件
例如, 数据文件的内容 oss://存储桶用于测试/oss/文本/城市/城市. csv 如下所示:
Beijing,China,010
ShangHai,China,021
Tianjin,China,022
表创建语句如下所示:
CREATE EXTERNAL TABLE city (
city STRING,
country STRING,
code INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 'oss://bucket-for-testing/oss/text/cities';
使用 OpenCSVSerde 处理带引号的字段
使用 OpenCSVSerde 时请注意以下事项:
- 可以为行字段指定字段分隔符、字段内容引用字符和转义符, 例如, 使用 SERDEPROPERTIES (“separatorChar” = “、”、”quoteChar” = “”、”escapeChar” = “”)。
- 不支持字段内的行分隔符。
- 所有字段都是字符串类型。
- 您可以使用 SQL 语句中的函数转换其他类型的数据, 然后处理数据
apache.hadoop.hive.serde2.OpenCSVSerde ‘ 与 serdeproperties (“separatorChar” = “,”, “quoteChar” = “\” “,” escapeChar “=” \\ “) 存储为符合位置” oss://test-bucket-julian-1/test_csv_serde_1 “;
自定义分隔符
您必须自定义列分隔符 (终止于的字段)、转义字符 (转义者) 和行终止符 (终止的行)。
必须在表创建语句中指定字符。
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
TSV 文件
与 CSV 文件类似, TSV 文件是纯文本文件。列与选项卡隔开。
例如, 数据文件的内容 oss://存储桶用于测试/oss/文本/城市/城市. tsv 如下:
Beijing China 010
ShangHai China 021
Tianjin China 022
表创建语句如下所示:
CREATE EXTERNAL TABLE city (
city STRING,
country STRING,
code INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 'oss://bucket-for-testing/oss/text/cities';
具有多字符数据字段分隔符的文件
如果数据字段分隔符包含多个字符, 则可以使用下面的示例表创建语句。每个行的数据字段分隔符为 “| |”, 可以用特定的分隔符字符串替换它。
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
with serdeproperties(
"field.delim"="||"
)
例子:
CREATE EXTERNAL TABLE test_csv_multidelimit (
id STRING,
name STRING,
location STRING,
create_date STRING,
create_timestamp STRING,
longitude STRING,
latitude STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
with serdeproperties(
"field.delim"="||"
)
STORED AS TEXTFILE LOCATION 'oss://bucket-for-testing/oss/text/cities/';
JSON 文件
可以由 DLA 处理的 JSON 文件存储为纯文本。创建表时, 必须运行存储为符合并定义 SERDE。
在 json 文件中, 每行必须包含一个完整的 json 对象。
例如, 以下文件格式是不可接受的:
{"id": 123, "name": "jack",
"c3": "2001-02-03 12:34:56"}
{"id": 456, "name": "rose", "c3": "1906-04-18 05:12:00"}
{"id": 789, "name": "tom", "c3": "2001-02-03 12:34:56"}
{"id": 234, "name": "alice", "c3": "1906-04-18 05:12:00"}
必须将该文件更改为:
{"id": 123, "name": "jack", "c3": "2001-02-03 12:34:56"}
{"id": 456, "name": "rose", "c3": "1906-04-18 05:12:00"}
{"id": 789, "name": "tom", "c3": "2001-02-03 12:34:56"}
{"id": 234, "name": "alice", "c3": "1906-04-18 05:12:00"}
不嵌套的 JSON 数据
表创建语句如下所示:
CREATE EXTERNAL TABLE t1 (id int, name string, c3 timestamp)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 'oss://path/to/t1/directory';
具有嵌套的 JSON 文件
使用结构和数组定义嵌套的 JSON 数据。
例如, 以下是您的原始数据 (注意: 无论是否需要嵌套, 都必须将完整的 JSON 数据放在一行中, 以便 DLA 处理数据):
{ "DocId": "Alibaba", "User_1": { "Id": 1234, "Username": "bob1234", "Name": "Bob", "ShippingAddress": { "Address1": "969 Wenyi West St
“,” Address2 “: 空,” 城市 “:” 杭州 “,” 省 “:” 浙江 “},” 订单 “: [{” ItemId “: 6789,” 订购日期 “”: “11/11/2017”}, {“项目Id “: 4352,” 订购日期 “”: “12/12/2017”}}}}
表创建语句如下所示 (注意: 位置中指定的路径必须是 JSON 数据文件的目录, 并且目录中的所有 JSON 文件必须标识为表数据):
CREATE EXTERNAL TABLE json_table_1 (
docid string,
user_1 struct<
id:INT,
username:string,
name:string,
shippingaddress:struct<
address1:string,
address2:string,
city:string,
province:string
>,
orders:array<
struct<
itemid:INT,
orderdate:string
>
>
>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 'oss://xxx/test/json/hcatalog_serde/table_1/';
查询表:
select * from json_table_1;
+---------+----------------------------------------------------------------------------------------------------------------+
| docid | user_1 |
+---------+----------------------------------------------------------------------------------------------------------------+
| Alibaba | [1234, bob1234, Bob, [969 Wenyi West St., null, Hangzhou, Zhejiang], [[6789, 11/11/2017], [4352, 12/12/2017]]] |
+---------+----------------------------------------------------------------------------------------------------------------+
对于由结构定义的嵌套结构, 可以对层次对象引用使用 “.”。对于由数组定义的数组结构, 可以对对象引用使用 “[数组下标]” (注: 数组下标从1开始)。
select DocId,
User_1.Id,
User_1.ShippingAddress.Address1,
User_1.Orders[1].ItemId
from json_table_1
where User_1.Username = 'bob1234'
and User_1.Orders[2].OrderDate = '12/12/2017';
+---------+------+--------------------+-------+
| DocId | id | address1 | _col3 |
+---------+------+--------------------+-------+
| Alibaba | 1234 | 969 Wenyi West St. | 6789 |
+---------+------+--------------------+-------+
使用 JSON 函数处理数据
例如, 将 “value_string” 的嵌套 JSON 值存储为字符串:
{"data_key":"com.taobao.vipserver.domains.meta.biz.alibaba.com","ts":1524550275112,"value_string":"{\"appName\":\"\",\"apps\":[],\"checksum\":\"50fa0540b430904ee78dff07c7350e1c\",\"clusterMap\":{\"DEFAULT\":{\"defCkport\":80,\"defIPPort\":80,\"healthCheckTask\":null,\"healthChecker\":{\"checkCode\":200,\"curlHost\":\"\",\"curlPath\":\"/status.taobao\",\"type\":\"HTTP\"},\"name\":\"DEFAULT\",\"nodegroup\":\"\",\"sitegroup\":\"\",\"submask\":\"0.0.0.0/0\",\"syncConfig\":{\"appName\":\"trade-ma\",\"nodegroup\":\"tradema\",\"pubLevel\":\"publish\",\"role\":\"\",\"site\":\"\"},\"useIPPort4Check\":true}},\"disabledSites\":[],\"enableArmoryUnit\":false,\"enableClientBeat\":false,\"enableHealthCheck\":true,\"enabled\":true,\"envAndSites\":\"\",\"invalidThreshold\":0.6,\"ipDeleteTimeout\":1800000,\"lastModifiedMillis\":1524550275107,\"localSiteCall\":true,\"localSiteThreshold\":0.8,\"name\":\"biz.alibaba.com\",\"nodegroup\":\"\",\"owners\":[\"junlan.zx\",\"张三\",\"李四\",\"cui.yuanc\"],\"protectThreshold\":0,\"requireSameEnv\":false,\"resetWeight\":false,\"symmetricCallType\":null,\"symmetricType\":\"warehouse\",\"tagName\":\"ipGroup\",\"tenantId\":\"\",\"tenants\":[],\"token\":\"1cf0ec0c771321bb4177182757a67fb0\",\"useSpecifiedURL\":false}"}
使用联机 JSON 格式设置工具进行格式化后, 数据内容如下所示:
{
"data_key": "com
vipserver.domains.meta.biz.alibaba.com “,” ts “: 1524550275112,” value_string “:” {\ “appName \”: \ “\”, \ “应用程序 \”: [], \ “校验和 \”: \ “50fa0540b430904ee78dff07c7350e1c \”, \ “clusterMap \”: {\ “默认 \”: {\ “defCkport \”:80, \ “defIPPort \”:80, \ “healthCheckTask \ “: null, \” healthChecker \ “: {\” 答案 \ “: 200, \” curlHost \ “: \” \ “, \” curlPath \ “: \”/状态. 淘宝 \ “, \” 类型 \ “: \” HTTP \ “}, \” 名称 \ “: \” 默认 \ “, \” 节点组 \ “: \” \ “, \” sitegroup \ “: \” \ “, \” submask \ “: \” 0.0. 0.0/0 \ “, \”syncConfig \ “: {\” appName \ “: \” 交易-ma \ “, \” 节点组 \ “: \” tradema \ “, \” pubLevel \ “: \” 发布 \ “, \” 角色 \ “: \” \ “, \” 站点 \ “: \” \ “}, \” useIPPort4Check \ “: true}}, \” disabledSites \ “: [], \” enableArmoryUnit \ “: false, \” enableClientBeat \ “: false, \”enableHealthCheck \ “: true, \” 已启用 \ “: true, \” envAndSites \ “: \” \ “, \” invalidThreshold \ “: 0.6, \” ipDeleteTimeout \ “: 1800000, \” lastModifiedMillis \ “: 1524550275107, \” localSiteCall \ “: 真, \” localSiteThreshold \ “: 0.8, \” 名称 \ “: \”biz.alibaba.com \ “, \” 节点组 \ “: \” \ “, \” 所有者 \ “: [\” 冯君 “, \” 张三 \ “, \” 李四 \ “, \” cui yuanc \ “], \” protectThreshold \ “: 0, \” requireSameEnv \ “: false, \” resetWeight \ “: false, \” symmetricCallType \ “: 空, \” symmetricType \ “: \” 仓库 \ “, \”tagName \ “: \” ipGroup \ “, \” tenantId \ “: \” \ “, \” 租户 \ “: [], \” 令牌 \ “: \” 1cf0ec0c771321bb4177182757a67fb0 \ “, \” useSpecifiedURL \ “: false}”}
表创建语句如下所示:
CREATE external TABLE json_table_2 (
data_key string,
ts bigint,
value_string string
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 'oss://xxx/test/json/hcatalog_serde/table_2/';
创建表后, 查询它:
select * from json_table_2;
+---------------------------------------------------+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
+---------------------------------------------------+---------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| com.taobao.vipserver.domains.meta.biz.alibaba.com | 1524550275112 | {"appName":"","apps":[],"checksum":"50fa0540b430904ee78dff07c7350e1c","clusterMap":{"DEFAULT":{"defCkport":80,"defIPPort":80,"healthCheckTask":null,"healthChecker":{"checkCode":200,"curlHost":"","curlPath":"/status
0.0. 0/0 “,” syncConfig “: {” appName “:” 交易-ma “,” 节点组 “:” tradema “,” pubLevel “:” 发布 “,” 角色 “:” “,” 网站 “:”}, “useIPPort4Check”: 真}}, “disabledSites”: [], “enableArmoryUnit”: false, “enableClientBeat”: false, “enableHealthCheck”:true, “启用”: 真, “envAndSites”: “”, “invalidThreshold”: 0.6, “ipDeleteTimeout”: 1800000, “lastModifiedMillis”: 1524550275107, “localSiteCall”: true, “localSiteThreshold”: 0.8, “名称”: “biz.alibaba.com”, “节点组”: “,” 所有者 “: [“冯君. zx “,” 张三 “,” 李四 “,” 崔 yuanc “],” protectThreshold “: 0,” requireSameEnv “: 假,” resetWeight “: 假,” symmetricCallType “: 空,” symmetricType “:” 仓库 “,” tagName “:” ipGroup “,” tenantId “:” “,” 租户 “: [],” 令牌 “:”1cf0ec0c771321bb4177182757a67fb0 “,” useSpecifiedURL “: false} |
+—————————————————+—————+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+
下面的 SQL 语句是演示如何使用 json_parse、json_extract_scalar、json_extract 和其他常见 json 函数的示例:
mysql> select json_extract_scalar(json_parse(value), '$.owners[1]') from json_table_2;
+--------+
| _col0 |
+--------+
| John |
+--------+
mysql> select json_extract_scalar(json_obj.json_col, '$.DEFAULT.submask')
from (
select json_extract(json_parse(value), '$.clusterMap') as json_col from json_table_2
) json_obj
where json_extract_scalar(json_obj.json_col, '$.DEFAULT.healthChecker.curlPath') = '/status.taobao';
+-----------+
| _col0 |
+-----------+
| 0.0.0.0/0 |
+-----------+
mysql> with json_obj as (select json_extract(json_parse(value), '$.clusterMap') as json_col from json_table_2)
select json_extract_scalar(json_obj.json_col, '$.DEFAULT.submask')
from json_obj
where json_extract_scalar(json_obj.json_col, '$.DEFAULT.healthChecker.curlPath') = '/status.taobao';
+-----------+
| _col0 |
+-----------+
| 0.0.0.0/0 |
+-----------+
兽人档案
ORC 是 Apache 开源项目配置单元支持的优化的列存储文件格式。与 CSV 文件相比, ORC 文件不需要较大的存储空间, 并确保更好的查询性能。
对于 orc 文件, 您只需要在创建表时以兽人的形式运行存储。
例如,
CREATE EXTERNAL TABLE orders_orc_date (
O_ORDERKEY INT,
O_CUSTKEY INT,
O_ORDERSTATUS STRING,
O_TOTALPRICE DOUBLE,
O_ORDERDATE DATE,
O_ORDERPRIORITY STRING,
O_CLERK STRING,
O_SHIPPRIORITY INT,
O_COMMENT STRING
)
STORED AS ORC
LOCATION 'oss://bucket-for-testing/datasets/tpch/1x/orc_date/orders_orc';
实木复合地板文件
实木复合地板是 Apache 开源项目 Hadoop 支持的专栏存储文件格式。
使用 DLA 创建表时, 必须运行存储为实木复合地板。
例如,
CREATE EXTERNAL TABLE orders_parquet_date (
O_ORDERKEY INT,
O_CUSTKEY INT,
O_ORDERSTATUS STRING,
O_TOTALPRICE DOUBLE,
O_ORDERDATE DATE,
O_ORDERPRIORITY STRING,
O_CLERK STRING,
O_SHIPPRIORITY INT,
O_COMMENT STRING
)
STORED AS PARQUET
LOCATION 'oss://bucket-for-testing/datasets/tpch/1x/parquet_date/orders_parquet';
RCFile 文件
RCFile 是一种列存储文件格式, 可有效地在分布式系统中存储关系表结构, 并且可以有效地读取和处理
例如:
CREATE EXTERNAL TABLE lineitem_rcfile_date (
L_ORDERKEY INT,
L_PARTKEY INT,
L_SUPPKEY INT,
L_LINENUMBER INT,
L_QUANTITY DOUBLE,
L_EXTENDEDPRICE DOUBLE,
L_DISCOUNT DOUBLE,
L_TAX DOUBLE,
L_RETURNFLAG STRING,
L_LINESTATUS STRING,
L_SHIPDATE DATE,
L_COMMITDATE DATE,
L_RECEIPTDATE DATE,
L_SHIPINSTRUCT STRING,
L_SHIPMODE STRING,
L_COMMENT STRING
)
STORED AS RCFILE
LOCATION 'oss://bucke-for-testing/datasets/tpch/1x/rcfile_date/lineitem_rcfile'
Avro 文件
使用 DLA 为 Avro 文件创建表时, 必须以 Avro 的形式运行存储。定义的字段必须满足 Avro 文件的架构。
如果您不确定定义的字段是否满足架构, 请使用 Avro 提供的工具获取架构, 并相应地创建表。
从Apache avro 网站下载 avro 工具-. jar 到您的本地计算机, 然后运行以下命令以获取 avro 文件的架构:
java -jar avro-tools-1.8.2.jar getschema /path/to/your/doctors.avro
{
"type" : "record",
"name" : "doctors",
"namespace" : "testing.hive.avro.serde",
"fields" : [ {
"name" : "number",
"type" : "int",
"doc" : "Order of playing the role"
}, {
"name" : "first_name",
"type" : "string",
"doc" : "first name of actor playing role"
}, {
"name" : "last_name",
"type" : "string",
"doc" : "last name of actor playing role"
} ]
}
表创建语句如下所示。name 字段对应于表中的列名, 并且类型必须转换为配置单元支持的, 如下表所示。
CREATE EXTERNAL TABLE doctors(
number int,
first_name string,
last_name string)
STORED AS AVRO
LOCATION 'oss://mybucket-for-testing/directory/to/doctors';
在大多数情况下, Avro 类型可以直接转换为相应的 Hive 类型。如果类型不具有相应的 Hive 类型, 则该类型将转换为类似的配置单元。下表描述了 Avro 类型和 Hive 类型之间的关系。
Avro 型 | 蜂巢类型 |
空 | 无效 |
布尔 | 布尔 |
Int | Int |
长 | bigint |
浮动 | 浮动 |
双 | 双 |
字节 | 二 进 制 |
字符串 | 字符串 |
记录 | 结构 |
地图 | 地图 |
列表 | 阵 列 |
联盟 | 联盟 |
枚举 | 字符串 |
固定 | 二 进 制 |
与正则表达式匹配的文件
通常, 此类型的文件以纯文本格式存储在 OSS 实例中。每行表示表中的记录, 并且可以与正则表达式匹配。
例如, Apache web 服务器日志文件属于此类型。
日志文件的内容如下所示:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
127.0.0.1 - - [26/May/2009:00:00:00 +0000] "GET /someurl/?track=Blabla(Main) HTTP/1.1" 200 5864 - "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19"
文件的每一行都使用以下正则表达式表示, 列与空格隔开:
([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?
上述文件格式的表创建语句如下所示:
CREATE EXTERNAL TABLE serde_regex(
host STRING,
identity STRING,
userName STRING,
time STRING,
request STRING,
status STRING,
size INT,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org
hadoop.hive.serde2.RegexSerDe ‘ 与 SERDEPROPERTIES (“输入. regex” = “([^] *) ([^] *) ([^] *) (-| \\ [[^ \]] ***]) ([^ \”] * | \ “[^ \”] *** “) (-| [0-9] *) (-| [0-9] *) (?: ([^ \ “] * | \” [^ \ “] ***”) ([^ \ “] * | \” [^ \ “] **”))
存储为符合位置 “oss://存储桶用于测试/数据集/serde/正则表达式”;
查询结果:
mysql> select * from serde_regex;
+-----------+----------+-------+------------------------------+---------------------------------------------+--------+------+---------+--------------------------------------------------------------------------------------------------------------------------+
| host | identity | userName | time | request | status | size | referer | agent |
+-----------+----------+-------+------------------------------+---------------------------------------------+--------+------+---------+--------------------------------------------------------------------------------------------------------------------------+
| 127.0.0.1 | - | frank | [10/Oct/2000:13:55:36 -0700] | "GET /apache_pb.gif HTTP/1.0" | 200 | 2326 | NULL | NULL |
| 127.0.0.1 | - | - | [26/May/2009:00:00:00 +0000] | "GET /someurl/?track=Blabla(Main) HTTP/1.1" | 200 | 5864 | - | "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.65 Safari/525.19" |
+-----------+----------+-------+------------------------------+---------------------------------------------+--------+------+---------+--------------------------------------------------------------------------------------------------------------------------+
Esri ArcGIS 的地理 JSON 数据文件
DLA 支持 SerDe 处理 Esri ArcGIS 的地理 JSON 数据文件。有关地理 JSON 数据格式的详细信息, 请访问https://github.com/Esri/spatial-framework-for-hadoop/wiki/JSON-Formats.
例子:
CREATE EXTERNAL TABLE IF NOT EXISTS california_counties
(
Name string,
BoundaryShape binary
)
ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde'
STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'oss://test_bucket/datasets/geospatial/california-counties/'
结论
上述示例表明, 阿里云数据湖分析(DLA) 支持大多数开源存储格式的文件。根据存储在 OSS 实例中的文件的格式和大小, DLA 查询和分析数据的速度会有所不同。我们建议您将文件设置为用于存储和查询的 ORC 格式。
为了加快查询速度, DLA 不断优化, 未来将支持更多数据源, 为您提供更好的大数据分析体验。