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
Дополнительные замечания
- Если 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.