Alibaba Cloud Data Lake Analytics (DLA) позволяет напрямую запрашивать и анализировать данные, хранящиеся в экземплярах Object Storage Service (OSS) и Table Store, с помощью стандартных операторов SQL.

Перед запросом данных необходимо создать таблицу в DLA на основе формата и содержимого файла данных. В этом руководстве используется файл, хранящийся в экземпляре OSS, в качестве примера, чтобы объяснить, как указать РАСПОЛОЖЕНИЕ таблицы.

РАСПОЛОЖЕНИЕ ОСС

В 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 определяет, что recursive.directories имеет значение 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
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive.directories' = 'false');

Если для параметра recursive.directories задано значение false, файл данных этой таблицы является файлом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
'oss://my-bucket/datasets/test/test_create/create_table/csv'
TBLPROPERTIES ('recursive.directories' = 'true');

Если для параметра recursive.directories установлено значение true, файлы данных этой таблицы — это все файлы .csv в папке LOCATION и во всех ее подкаталогах:

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 вы можете увидеть данные с искаженными символами или неверными данными.

2.В настоящее время DLA не поддерживает файлы .csv с заголовками. Если первая строка файла является заголовком, вы должны вручную обрабатывать данные. В противном случае DLA идентифицирует заголовок как запись данных.

Чтобы узнать больше о Alibaba Cloud Data Lake Analytics (DLA), посетите www.alibabacloud.com/products/data-lake-analytics.

Ссылка: https://www.alibabacloud.com/blog/how-to-use-oss-location-in-data-lake-analytics_594189?spm=a2c41.12311609.0.0