Форматы данных и алгоритмы сжатия
Ниже описаны поддерживаемые в Yandex Query форматы данных и алгоритмы сжатия.
Поддерживаемые форматы данных
В Yandex Query Language поддерживаются следующие форматы данных:
Формат csv_with_names
Данный формат основан на формате CSV
Пример данных:
Year,Manufacturer,Model,Price
1997,Ford,E350,3000.00
1999,Chevy,"Venture «Extended Edition»",4900.00
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=csv_with_names,
SCHEMA
(
Year int,
Manufacturer string,
Model string,
Price double
)
)
Результат выполнения запроса:
# | Manufacturer | Model | Price | Year |
---|---|---|---|---|
1 | Ford | E350 | 3000 | 1997 |
2 | Chevy | Venture «Extended Edition» | 4900 | 1999 |
Формат tsv_with_names
Данный формат основан на формате TSV0x9
), в первой строке файла находятся имена колонок.
Пример данных:
Year Manufacturer Model Price
1997 Ford E350 3000.00
1999 Chevy "Venture «Extended Edition»" 4900.00
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=tsv_with_names,
SCHEMA
(
Year int,
Manufacturer string,
Model string,
Price double
)
)
Результат выполнения запроса:
# | Manufacturer | Model | Price | Year |
---|---|---|---|---|
1 | Ford | E350 | 3000 | 1997 |
2 | Chevy | Venture «Extended Edition» | 4900 | 1999 |
Формат json_list
Данный формат основан на JSON-представлении
Пример корректных данных (данные представлены в виде списка объектов JSON):
[
{ "Year": 1997, "Manufacturer": "Ford", "Model": "E350", "Price": 3000.0 },
{ "Year": 1999, "Manufacturer": "Chevy", "Model": "Venture «Extended Edition»", "Price": 4900.00 }
]
Пример НЕкорректных данных (на каждой отдельной строке находится отдельный объект в формате JSON, но эти объекты не объединены в список):
{ "Year": 1997, "Manufacturer": "Ford", "Model": "E350", "Price": 3000.0 }
{ "Year": 1999, "Manufacturer": "Chevy", "Model": "Venture «Extended Edition»", "Price": 4900.00 }
Формат json_each_row
Данный формат основан на JSON-представлении
Пример корректных данных (на каждой отдельной строке находится отдельный объект в формате JSON, но эти объекты не объединены в список):
{ "Year": 1997, "Manufacturer": "Ford", "Model": "E350", "Price": 3000.0 },
{ "Year": 1999, "Manufacturer": "Chevy", "Model": "Venture «Extended Edition»", "Price": 4900.00 }
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=json_each_row,
SCHEMA
(
Year int,
Manufacturer string,
Model string,
Price double
)
)
Результат выполнения запроса:
# | Manufacturer | Model | Price | Year |
---|---|---|---|---|
1 | Ford | E350 | 3000 | 1997 |
2 | Chevy | Venture «Extended Edition» | 4900 | 1999 |
Формат raw
Данный формат позволяет считывать содержимое файлов как есть, в «сыром» виде. Считанные таким образом данные можно обработать средствами YQL
Этот формат стоит использовать, если встроенных возможностей парсинга исходных данных в Yandex Query не достаточно.
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=raw,
SCHEMA
(
Data String
)
)
Результат выполнения запроса:
Year,Manufacturer,Model,Price
1997,Ford,E350,3000.00
1999,Chevy,\"Venture «Extended Edition»\",4900.00
Формат json_as_string
Данный формат основан на JSON-представлении
В этом формате внутри каждого файла должен находиться:
- объект в корректном JSON-представлении в каждой отдельной строке файла;
- объекты в корректном JSON-представлении, объединенные в список.
Пример корректных данных (данные представлены в виде списка объектов JSON):
{ "Year": 1997, "Manufacturer": "Ford", "Model": "E350", "Price": 3000.0 }
{ "Year": 1999, "Manufacturer": "Chevy", "Model": "Venture «Extended Edition»", "Price": 4900.00 }
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=json_as_string,
SCHEMA
(
Data Json
)
)
Результат выполнения запроса:
# | Data |
---|---|
1 | {"Manufacturer": "Ford", "Model": "E350", "Price": 3000, "Year": 1997} |
2 | {"Manufacturer": "Chevy", "Model": "Venture «Extended Edition»", "Price": 4900, "Year": 1999} |
Формат parquet
Данный формат позволяет считывать содержимое файлов в формате Apache Parquet
Поддерживаемые алгоритмы сжатия данных внутри файлов Parquet:
- Без сжатия
- SNAPPY
- GZIP
- LZO
- BROTLI
- LZ4
- ZSTD
- LZ4_RAW
Пример запроса
SELECT
*
FROM <соединение>.<путь>
WITH
(
format=parquet,
SCHEMA
(
Year int,
Manufacturer string,
Model string,
Price double
)
)
Результат выполнения запроса:
# | Manufacturer | Model | Price | Year |
---|---|---|---|---|
1 | Ford | E350 | 3000 | 1997 |
2 | Chevy | Venture «Extended Edition» | 4900 | 1999 |
Пример чтения данных
Пример запроса для чтения данных из Yandex Object Storage.
SELECT
*
FROM
connection.`folder/filename.csv`
WITH(
format='csv_with_names',
SCHEMA
(
Year int,
Manufacturer String,
Model String,
Price Double
)
);
Где:
Поле | Описание |
---|---|
connection |
Название соединения с Yandex Object Storage |
folder/filename.csv |
Путь к файлу в бакете Yandex Object Storage |
SCHEMA |
Описание схемы данных в файле |
Поддерживаемые алгоритмы сжатия
Чтение
В Yandex Query поддерживаются следующие алгоритмы сжатия данных для чтения:
Формат сжатия | Название в Query |
---|---|
Gzip |
gzip |
Zstd |
zstd |
LZ4 |
lz4 |
Brotli |
brotli |
Bzip2 |
bzip2 |
Xz |
xz |
Формат файлов parquet поддерживает собственные внутренние алгоритмы сжатия. Yandex Query позволяет читать данные в формате parquet с использованием следующих алгоритмов сжатия:
Формат сжатия | Название в Query |
---|---|
Raw |
raw |
Snappy |
snappy |
Запись в Yandex Object Storage
В настоящий момент поддерживается запись в следующих форматах:
Формат данных | Название в Query |
---|---|
CSV |
csv_with_names |
Parquet |
parquet |
В Query поддерживаются следующие алгоритмы сжатия данных для записи:
Формат сжатия | Название в Query |
---|---|
Gzip |
gzip |
Zstd |
zstd |
LZ4 |
lz4 |
Brotli |
brotli |
Bzip2 |
bzip2 |
Xz |
xz |
Формат файлов parquet
поддерживает собственные внутренние алгоритмы сжатия. Query позволяет записывать данные в формате parquet
с использованием следующих алгоритмов сжатия:
Формат сжатия | Название в Query |
---|---|
Snappy |
Без названия, по умолчанию |
Запись в Yandex Data Streams
В Data Streams можно выполнять запись только в виде байтового потока, который интепретируется на принимающей стороне.
Настройки форматов файлов и алгоритмов сжатия при записи в Data Streams не применяются.