52 lines
2.5 KiB
SQL
52 lines
2.5 KiB
SQL
## Задача 1:
|
||
|
||
У тебя в Hive есть таблица `sales (id, amount)`
|
||
|
||
Ты хочешь читать её из Greenplum, **не копируя**.
|
||
|
||
CREATE EXTERNAL TABLE hive_sales (
|
||
id INT,
|
||
amount NUMERIC
|
||
)
|
||
LOCATION ('pxf://hive.sales?PROFILE=hive')
|
||
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
|
||
|
||
Greenplum ↔ PXF ↔ Hive Metastore
|
||
│
|
||
▼
|
||
HDFS файлы (ORC, Parquet...)
|
||
|
||
### ❓ Вопросы:
|
||
|
||
1. Где реально хранятся данные?
|
||
ЖАННЫЕ ХРАНЯТСЯ В ХРАНИЛИЩЕ HIVE.
|
||
2. Можно ли писать обратно в Hive?
|
||
НЕТ, НЕЛЬЗЯ.
|
||
3. Что если структура таблицы в Hive изменилась?
|
||
В ТАКОМ СЛУЧАЕ ПРИ ЗАПРОСЕ МОГУТ БЫТЬ ОШИБКИ ИЛИ ПУСТЫЕ СТОЛБЦЫ СО ЗНАЧЕНИЯМИ, ТАК КАК GREENPLUM НИКАКИМ ОБРАЗОМ НЕ СМОЖЕТ УСЗНАТЬ КАКИЕ ИЗМЕНЕНИЯ ПРОИЗОШЛИ. ПОЭТОМУ НЕОБХОДИМО ПЕРЕСОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ ПУТЕМ УДАЛЕНИЯ И СОЗДАНИЯ.
|
||
|
||
## Задача 2:
|
||
|
||
Есть файл `s3://my-data-bucket/orders.parquet`. Нужно читать его как таблицу.
|
||
|
||
CREATE EXTERNAL TABLE s3_orders (
|
||
order_id INT,
|
||
amount NUMERIC
|
||
)
|
||
LOCATION ('pxf://my-data-bucket/orders.parquet?PROFILE=s3')
|
||
FORMAT 'CUSTOM' (FORMATTER='parquet');
|
||
|
||
### 🔍 Визуализация:
|
||
|
||
Greenplum ↔ PXF ↔ S3
|
||
▼
|
||
Чтение .parquet
|
||
|
||
### ❓ Вопросы:
|
||
|
||
1. Данные копируются в Greenplum?
|
||
НЕТ, ДАННЫЕ НЕ КОПИРУЮТСЯ.
|
||
2. Что быстрее: EXTERNAL или `CREATE TABLE AS SELECT`?
|
||
ВСЕ ЗАВИСИТ ОТ ЦЕЛЕЙ.
|
||
ДЛЯ РАЗОВОГО ИСПОЛЬЗОВАНИЯ МОЖНО ВЫБРАТЬ EXTERNAL, СОЗДАНИЕ ТАБЛИЦЫ БУДЕТ ПРАКТИЧЕСКИЕ МОМЕНТАЛЬНЫМ ПОТОМУ ЧТО СОЗДАЕТСЯ ПРОСТО ССЫЛКА НА ТАБЛИЦУ, А ВОТ ЧТЕНИЕ БУДЕТ НЕ ОЧЕНЬ ЭФФЕКТИВНЫМ.
|
||
ДЛЯ МНОГОКРАТНОГО ИСПОЛЬЗОВАНИЯ ЛУЧШЕ ВЫБРАТЬ CTAS, ХОТЬ МЫ И ДОЛГО КОПИРУЕМ (СОЗДАЕМ) ТАБЛИЦУ, ЗАТО ПОСЛЕДУЮЩИЕ ЧАСТЫЕ ОБРАЩЕНИЯ БУДУТ ПРОИСХОДИТЬ ГОРАЗДО БЫСТРЕЕ ЧЕМ ПРИ EXTERNAL. |