zoukankan      html  css  js  c++  java
  • Data Lake Analytics中OSS LOCATION的使用说明

    前言

    Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS、TableStore上的数据进行查询分析。

    在查询前,用户需要根据数据文件的格式和内容在DLA中创建一张表。Data Lake Analytics + OSS数据文件格式处理大全 一文中介绍了如何定义表的SERDE和ROW FORMAT。

    本文将以存储在OSS上的文件为例详细介绍如何指定表LOCATION。

    LOCATION

    DLA中的建表语句的语法为

    CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name
        [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
        [COMMENT table_comment]
        [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
        [ROW FORMAT row_format]
        [STORE AS file_format]
            | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
        LOCATION oss_path
    

    其中 LOCATION可以是数据文件本身,也可以是数据文件所在的目录。

    LOCATION是数据文件

    建表时可以将表直接关联到数据文件,此时的LOCATION需要是该文件在OSS上的绝对路径。
    例如:

    CREATE EXTERNAL TABLE loc_file_csv(
        N_NATIONKEY INT,
        N_NAME STRING,
        N_REGIONKEY INT,
        N_COMMENT STRING
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
    STORED AS TEXTFILE
    LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv';
    

    LOCATION是目录

    LOCATION也可以指向OSS上的目录,该目录下的文件即是表的数据文件。
    建表时,可以通过设置属性 recursive.directories 来控制是遍历该目录下的所有数据文件。默认或不显式指定recursive.directories,DLA会解析为false,即不遍历。

    例如,OSS上的目录结构为

    2018-07-05 11:16:11 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv
    2018-07-05 11:15:57 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
    2018-07-05 11:16:17 1752.00B Standard oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
    

    建表语句为:

    CREATE EXTERNAL TABLE loc_file_csv(
        N_NATIONKEY INT,
        N_NAME STRING,
        N_REGIONKEY INT,
        N_COMMENT STRING
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
    STORED AS TEXTFILE
    LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/'
    TBLPROPERTIES ('recursive.directories' = 'false');
    

    当recursive.directories=false,该表的数据文件为只有LOCATION下的nation.csv一个文件,即

    oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
    

    建表语句为:

    CREATE EXTERNAL TABLE loc_file_csv(
        N_NATIONKEY INT,
        N_NAME STRING,
        N_REGIONKEY INT,
        N_COMMENT STRING
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
    STORED AS TEXTFILE
    LOCATION 'oss://my-bucket/datasets/test/test_create/create_table/csv/'
    TBLPROPERTIES ('recursive.directories' = 'true');
    

    当recursive.directories=true,该表的数据文件为LOCATION目录下及其子目录下的所有csv文件,即

    oss://my-bucket/datasets/test/test_create/create_table/csv/nation.csv
    oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/nation.csv
    oss://my-bucket/datasets/test/test_create/create_table/csv/dir1/dir2/nation.csv
    

    注意事项

    1. 当LOCATION为目录时,DLA默认该目录下的数据文件为相同的数据格式,并根据建表语句中指定的SERDE解析文件。当目录下的数据文件格式不同时,DLA会解析失败,导致表中的数据信息错误,影响查询结果。

    例如,建表时指定STORED AS TEXTFILE,但是目录下除了csv文件,还有orc格式的文件。这种情况下,在建表和查询时并不会报错,但是SELECT时可能会看到数据乱码或不准确。

    1. 目前不支持CSV文件有header。当文件的第一行为header时,需要用户自己手动处理数据;否则,会将header识别为一条数据记录

    为了给大家带来更好的查询分析体验, 目前DLA还在不断完善中,欢迎大家试用,提出您的宝贵意见或建议。



    本文作者:金络

    原文链接

    本文为云栖社区原创内容,未经允许不得转载。

  • 相关阅读:
    单例模式的七种写法
    Android省电开发 浅析
    android省电开发之cpu降频
    什么是签名、为什么要给应用程序签名、如何给应用程序签名
    内存溢出和内存泄漏的区别、产生原因以及解决方案
    Android Studio 使用GitHub
    sharesdk 的使用
    当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?
    laravel安装笔记
    erlang的一些小技巧(不定期更新)
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/10670916.html
Copyright © 2011-2022 走看看