Внешняя таблица
Функция внешних таблиц больше не рекомендуется, за исключением определенных редких случаев использования, и может быть объявлена устаревшей в будущих выпусках. Для управления и запроса данных из внешних источников данных в общих сценариях рекомендуется использовать External Catalog.
-
Начиная с v1.5.2, мы рекомендуем использовать catalogs для запроса данных из Hive, Iceberg и Hudi. См. Hive catalog, Iceberg catalog и Hudi catalog.
-
Начиная с v1.5.2, мы рекомендуем использовать JDBC catalog для запроса данных из MySQL и PostgreSQL и использовать Elasticsearch catalog для запроса данных из Elasticsearch.
-
Начиная с v1.5.2, мы рекомендуем использовать JDBC catalog для запроса данных из Oracle и SQL Server.
-
Функция внешних таблиц была разработана для помощи в загрузке данных в Selena, а НЕ для выполнения эффективных запросов к внешним системам в качестве обычной операции. Более производительным решением будет загрузка данных в Selena.
Selena поддерживает доступ к другим источникам данных с использованием внешних таблиц. Внешние таблицы создаются на основе таблиц данных, которые хранятся в других источниках данных. Selena хранит только метаданные таблиц данных. Вы можете использовать внешние таблицы для прямого запроса данных из других источников данных. В настоящее время, за исключением внешних таблиц Selena, все другие внешние таблицы объявлены устаревшими. Вы мож ете только записывать данные из другого cluster Selena в текущий cluster Selena. Вы не можете читать данные из него. Для источников данных, отличных от Selena, вы можете только читать данные из этих источников данных.
Начиная с версии 2.5, Selena предоставляет функцию Data Cache, которая ускоряет запросы горячих данных во внешних источниках данных. Для получения дополнительной информации см. Data Cache.
Внешняя таблица Selena
Начиная с Selena 1.19, Selena позволяет вам использовать внешнюю таблицу Selena для записи данных из одного cluster Selena в другой. Это обеспечивает разделение чтения и записи и предоставляет лучшую изоляцию ресурсов. Вы можете сначала создать целевую таблицу в целевом cluster Selena. Затем в исходном cluster Selena вы можете создать внешнюю таблицу Selena, которая имеет ту же схему, что и целевая таблица, и указать информацию о целевом cluster и таблице в поле PROPERTIES.
Данные могут быть записаны из исходного cluster в целевой cluster с помощью оператора INSERT INTO для записи во внешнюю таблицу Selena. Это может помочь реализовать следующие цели:
- Синхронизация данных между clusters Selena.
- Разделение чтения и записи. Данные записываются в исходный cluster, а изменения данных из исходного cluster синхронизируются с целевым cluster, который предоставляет сервисы запросов.
Следующий код показывает, как создать целевую таблицу и внешнюю таблицу.
# Создайте целевую таблицу в целевом cluster Selena.
CREATE TABLE t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1);
# Создайте внешнюю таблицу в исходном cluster Selena.
CREATE EXTERNAL TABLE external_t
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=olap
DISTRIBUTED BY HASH(k1)
PROPERTIES
(
"host" = "127.0.0.1",
"port" = "9020",
"user" = "user",
"password" = "passwd",
"database" = "db_test",
"table" = "t"
);
# Запишите данные из исходного cluster в целевой cluster путем записи данных во внешнюю таблицу Selena. Второй оператор рекомендуется для производственной среды.
insert into external_t values ('2020-10-11', 1, 1, 'hello', '2020-10-11 10:00:00');
insert into external_t select * from other_table;
Параметры:
-
EXTERNAL: Это ключевое слово указывает, что создаваемая таблица является внешней таблицей.
-
host: Этот параметр указывает IP-адрес узла leader FE целевого cluster Selena.
-
port: Этот параметр указывает RPC порт узла FE целевого cluster Selena.
примечаниеЧтобы обеспечить доступ исходного cluster, к которому принадлежат внешние таблицы Selena, к целевому cluster Selena, вы должны настроить свою сеть и брандмауэр для разрешения доступа к следующим портам:
- RPC порт узла FE. См.
rpc_portв файле конфигурации FE fe/fe.conf. RPC порт по умолчанию —9020. - bRPC порт узла BE. См.
brpc_portв файле конфигурации BE be/be.conf. bRPC порт по умолчанию —8060.
- RPC порт узла FE. См.
-
user: Этот параметр указывает имя пользователя, используемое для доступа к целевому cluster Selena.
-
password: Этот параметр указывает пароль, используемый для доступа к целевому cluster Selena.
-
database: Этот параметр указывает базу данных, к которой принадлежит целевая таблица.
-
table: Этот параметр указывает имя целевой таблицы.
Следующие ограничения применяются при использовании внешней таблицы Selena:
- Вы можете выполнять только команды INSERT INTO и SHOW CREATE TABLE для внешней таблицы Selena. Другие методы записи данных не поддерживаются. Кроме того, вы не можете запрашивать данные из внешней таблицы Selena или выполнять операции DDL для внешней таблицы.
- Синтаксис создания внешней таблицы такой же, как при создании обычной таблицы, но имена столбцов и другая информация во внешней таблице должны быть такими же, как в целевой таблице.
- Внешняя таблица синхронизирует метаданные таблицы из целевой таблицы каждые 10 секунд. Если выполняется операция DDL для целевой таблицы, может возникнуть задержка синхронизации данных между двумя таблицами.
(Устарело) Внешняя таблица для базы данных, совместимой с JDBC
Начиная с v1.5.2, Selena предоставляет внешние таблицы для запроса баз данных, совместимых с JDBC. Таким образом, вы можете анализировать данные таких баз данных невероятно быстро без необходимости импорта данных в Selena. В этом разделе описывается, как создать внешнюю таблицу в Selena и запросить данные в базах данных, совместимых с JDBC.
Предварительные требования
Перед использованием внешней таблицы JDBC для запроса данных убедитесь, что FE и BE имеют доступ к URL загрузки драйвера JDBC. URL загрузки указывается параметром driver_url в операторе, используемом для создания ресурса JDBC.
Создание и управление ресурсами JDBC
Создание ресурса JDBC
Перед созданием внешней таблицы для запроса данных из базы данных вам необходимо создать ресурс JDBC в Selena для управления информацией о подключении к базе данных. База данных должна поддерживать драйвер JDBC и называется "целевой базой данных". После создания ресурса вы можете использовать его для создания внешних таблиц.
Выполните следующий оператор для создания ресурса JDBC с именем jdbc0:
CREATE EXTERNAL RESOURCE jdbc0
PROPERTIES (
"type"="jdbc",
"user"="postgres",
"password"="changeme",
"jdbc_uri"="jdbc:postgresql://127.0.0.1:5432/jdbc_test",
"driver_url"="https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar",
"driver_class"="org.postgresql.Driver"
);
Обязательные параметры в PROPERTIES следующие:
-
type: тип ресурса. Установите значениеjdbc. -
user: имя пользователя, используемое для подключения к целевой базе данных. -
password: пароль, используемый для подключения к целевой базе данных. -
jdbc_uri: URI, который драйвер JDBC использует для подключения к целевой базе данных. Формат URI должен удовлетворять синтаксису URI базы данных. Для синтаксиса URI некоторых распространенных баз данных посетите официальные веб-сайты Oracle, PostgreSQL, SQL Server.
Примечание: URI должен включать имя целевой базы данных. Например, в предыдущем примере кода
jdbc_test— это имя целевой базы данных, к которой вы хотите подключиться.
-
driver_url: URL загрузки JAR-пакета драйвера JDBC. Поддерживается HTTP URL или file URL, например,https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jarилиfile:///home/disk1/postgresql-42.3.3.jar. -
driver_class: имя класса драйвера JDBC. Имена классов драйверов JDBC распространенных баз данных следующие:- MySQL: com.mysql.jdbc.Driver (MySQL 5.x и более ранние версии), com.mysql.cj.jdbc.Driver (MySQL 6.x и более поздние версии)
- SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver
- Oracle: oracle.jdbc.driver.OracleDriver
- PostgreSQL: org.postgresql.Driver
При создании ресурса FE загружает JAR-пакет драйвера JDBC, используя URL, указанный в параметре driver_url, генерирует контрольную сумму и использует контрольную сумму для проверки драйвера JDBC, загруженного BE.
Примечание: Если загрузка JAR-пакета драйвера JDBC не удается, создание ресурса также не удается.
Когда BE запрашивают внешнюю таблицу JDBC в первый раз и обнаруживают, что соответствующий JAR-пакет драйвера JDBC не существует на их машинах, BE загружают JAR-пакет драйвера JDBC, используя URL, указанный в параметре driver_url, и все JAR-пакеты драйверов JDBC сохраняются в директории ${SELENA_HOME}/lib/jdbc_drivers.
Просмотр ресурсов JDBC
Выполните следующий оператор для просмотра всех ресурсов JDBC в Selena:
SHOW RESOURCES;
Примечание: Столбец
ResourceType— этоjdbc.
Удаление ресурса JDBC
Выполните следующий оператор для удаления ресурса JDBC с именем jdbc0:
DROP RESOURCE "jdbc0";
Примечание: После удаления ресурса JDBC все внешние таблицы JDBC, созданные с использованием этого ресурса JDBC, становятся недоступными. Однако данные в целевой базе данных не теряются. Если вам все еще нужно использовать Selena для запроса данных в целевой базе данных, вы можете снова создать ресурс JDBC и внешние таблицы JDBC.
Создание базы данных
Выполните следующий оператор для создания и доступа к базе данных с именем jdbc_test в Selena:
CREATE DATABASE jdbc_test;
USE jdbc_test;
Примечание: Имя базы данных, которое вы указываете в предыдущем операторе, не обязательно должно совпадать с именем целевой базы данных.
Создание внешней таблицы JDBC
Выполните следующий оператор для создания внешней таблицы JDBC с именем jdbc_tbl в базе данных jdbc_test:
create external table jdbc_tbl (
`id` bigint NULL,
`data` varchar(200) NULL
) ENGINE=jdbc
properties (
"resource" = "jdbc0",
"table" = "dest_tbl"
);
Обязательные параметры в properties следующие:
-
resource: имя ресурса JDBC, используемого для создания внешней таблицы. -
table: имя целевой таблицы в базе данных.
Для поддерживаемых типов данных и сопоставления типов данных между Selena и целевыми базами данных см. [Сопоставление типов данных](External_table.md#Data type mapping).
Примечание:
- Индексы не поддерживаются.
- Вы не можете использовать PARTITION BY или DISTRIBUTED BY для указания правил распределения данных.
Запрос внешней таблицы JDBC
Перед запросом внешних таблиц JDBC вы должны выполнить следующий оператор для включения движка Pipeline:
set enable_pipeline_engine=true;
Примечание: Если движок Pipeline уже включен, вы можете пропустить этот шаг.
Выполните следующий оператор для запроса данных в целевой базе данных с использованием внешних таблиц JDBC.
select * from JDBC_tbl;
Selena поддерживает проталкивание предикатов путем проталкивания условий фильтрации в целевую таблицу. Выполнение условий фильтрации как можно ближе к источнику данных может улучшить производительность запросов. В настоящее время Selena может проталкивать операторы, включая бинарные операторы сравнения (>, >=, =, < и <=), IN, IS NULL и BETWEEN ... AND .... Однако Selena не может проталкивать функции.
Сопоставление типов данных
В настоящее время Selena может запрашивать только данные базовых типов в целевой базе данных, такие как NUMBER, STRING, TIME и DATE. Если диапазоны значений данных в целевой базе данных не поддерживаются Selena, запрос сообщает об ошибке.
Сопоставление между целевой базой данных и Selena варьируется в зависимости от типа целевой базы данных.
MySQL и Selena
| MySQL | Selena |
|---|---|
| BOOLEAN | BOOLEAN |
| TINYINT | TINYINT |
| SMALLINT | SMALLINT |
| MEDIUMINTINT | INT |
| BIGINT | BIGINT |
| FLOAT | FLOAT |
| DOUBLE | DOUBLE |
| DECIMAL | DECIMAL |
| CHAR | CHAR |
| VARCHAR | VARCHAR |
| DATE | DATE |
| DATETIME | DATETIME |
Oracle и Selena
| Oracle | Selena |
|---|---|
| CHAR | CHAR |
| VARCHARVARCHAR2 | VARCHAR |
| DATE | DATE |
| SMALLINT | SMALLINT |
| INT | INT |
| BINARY_FLOAT | FLOAT |
| BINARY_DOUBLE | DOUBLE |
| DATE | DATE |
| DATETIME | DATETIME |
| NUMBER | DECIMAL |
PostgreSQL и Selena
| PostgreSQL | Selena |
|---|---|
| SMALLINTSMALLSERIAL | SMALLINT |
| INTEGERSERIAL | INT |
| BIGINTBIGSERIAL | BIGINT |
| BOOLEAN | BOOLEAN |
| REAL | FLOAT |
| DOUBLE PRECISION | DOUBLE |
| DECIMAL | DECIMAL |
| TIMESTAMP | DATETIME |
| DATE | DATE |
| CHAR | CHAR |
| VARCHAR | VARCHAR |
| TEXT | VARCHAR |
SQL Server и Selena
| SQL Server | Selena |
|---|---|
| BOOLEAN | BOOLEAN |
| TINYINT | TINYINT |
| SMALLINT | SMALLINT |
| INT | INT |
| BIGINT | BIGINT |
| FLOAT | FLOAT |
| REAL | DOUBLE |
| DECIMALNUMERIC | DECIMAL |
| CHAR | CHAR |
| VARCHAR | VARCHAR |
| DATE | DATE |
| DATETIMEDATETIME2 | DATETIME |
Ограничения
-
При создании внешних таблиц JDBC вы не можете создавать индексы для таблиц или использовать PARTITION BY и DISTRIBUTED BY для указани я правил распределения данных для таблиц.
-
При запросе внешних таблиц JDBC Selena не может проталкивать функции в таблицы.
(Устарело) Внешняя таблица Elasticsearch
Selena и Elasticsearch — это две популярные аналитические системы. Selena демонстрирует высокую производительность в крупномасштабных распределенных вычислениях. Elasticsearch идеально подходит для полнотекстового поиска. Selena в сочетании с Elasticsearch может предоставить более полное решение OLAP.
Пример создания внешней таблицы Elasticsearch
Синтаксис
CREATE EXTERNAL TABLE elastic_search_external_table
(
k1 DATE,
k2 INT,
k3 SMALLINT,
k4 VARCHAR(2048),
k5 DATETIME
)
ENGINE=ELASTICSEARCH
PROPERTIES (
"hosts" = "http://192.168.0.1:9200,http://192.168.0.2:9200",
"user" = "root",
"password" = "root",
"index" = "tindex",
"type" = "_doc",
"es.net.ssl" = "true"
);
Следующая таблица описывает параметры.
| Параметр | Обязательно | Значение по умолчанию | Описание |
|---|---|---|---|
| hosts | Да | Нет | Адрес подключения cluster Elasticsearch. Вы можете указать один или несколько адресов. Selena может разобрать версию Elasticsearch и распределение сегментов индекса по этому адресу. Selena взаимодействует с вашим cluster Elasticsearch на основе адреса, возвращаемого API операцией GET /_nodes/http. Следовательно, значение параметра host должно совпадать с адресом, возвращаемым API операцией GET /_nodes/http. В противном случае BE могут не иметь возможности связаться с вашим cluster Elasticsearch. |
| index | Да | Нет | Имя индекса Elasticsearch, созданного для таблицы в Selena. Имя может быть псевдонимом. Этот параметр поддерживает подстановочные знаки (*). Например, если вы установите index в hello*, Selena извлечет все индексы, имена которых начинаются с hello. |
| user | Нет | Пусто | Имя пользователя, используемое для входа в cluster Elasticsearch с включенной базовой аутентификацией. Убедитесь, что у вас есть доступ к /*cluster/state/*nodes/http и индексу. |
| password | Нет | Пусто | Пароль, используемый для входа в cluster Elasticsearch. |
| type | Нет | _doc | Тип индекса. Значение по умолчанию: _doc. Если вы хотите запросить данные в Elasticsearch 8 и более поздних версиях, вам не нужно настраивать этот параметр, потому что типы сопоставления были удалены в Elasticsearch 8 и более поздних версиях. |
| es.nodes.wan.only | Нет | false | Указывает, использует ли Selena только адреса, указанные hosts, для доступа к cluster Elasticsearch и получения данных.
|
| es.net.ssl | Нет | false | Указывает, можно ли использовать протокол HTTPS для доступа к вашему cluster Elasticsearch. Только Selena 2.4 и более поздние версии поддерживают настройку этого параметра.
|
| enable_docvalue_scan | Нет | true | Указывает, получать ли значения целевых полей из колоночного хранилища Elasticsearch. В большинстве случаев чтение данных из колоночного хранилища превосходит чтение данных из строкового хранилища. |
| enable_keyword_sniff | Нет | true | Указывает, определять ли поля типа TEXT в Elasticsearch на основе полей типа KEYWORD. Если этот параметр установлен в false, Selena выполняет сопоставление после токенизации. |
Колоночное сканирование для более быстрых запросов
Если вы установите enable_docvalue_scan в true, Selena следует этим правилам при получении данных из Elasticsearch:
- Попробовать и посмотреть: Selena автоматически проверяет, включено ли колоночное хранилище для целевых полей. Если да, Selena получает все значения в целевых полях из колоночного хранилища.
- Автоматическое понижение: Если какое-либо одно из целевых полей недоступно в колоночном хранилище, Selena разбирает и получает все значения в целевых полях из строкового хранилища (
_source).
ПРИМЕЧАНИЕ
- Колоночное хранилище недоступно для полей типа TEXT в Elasticsearch. Следовательно, если вы запрашиваете поля, содержащие значения типа TEXT, Selena получает значения полей из
_source.- Если вы запрашиваете большое количество (больше или равно 25) полей, чтение значений полей из
docvalueне показывает заметных преимуществ по сравнению с чтением значений полей из_source.
Определение полей типа KEYWORD
Если вы установите enable_keyword_sniff в true, Elasticsearch позволяет прямую загрузку данных без индекса, потому что он автоматически создаст индекс после загрузки. Для полей типа STRING Elasticsearch создаст поле как с типами TEXT, так и KEYWORD. Так работает функция Multi-Field в Elasticsearch. Сопоставление следующее:
"k4": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
Например, для выполнения фильтрации "=" по k4, Selena в Elasticsearch преобразует операцию фильтрации в Elasticsearch TermQuery.
Исходный SQL фильтр следующий:
k4 = "Selena On Elasticsearch"
Преобразованный Elasticsearch query DSL следующий:
"term" : {
"k4": "Selena On Elasticsearch"
}
Первое поле k4 — это TEXT, и оно будет токенизировано анализатором, настроенным для k4 (или стандартным анализатором, если анализатор не был настроен для k4) после загрузки данных. В результате первое поле будет токенизировано на три термина: Selena, On и Elasticsearch. Детали следующие:
POST /_analyze
{
"analyzer": "standard",
"text": "Selena On Elasticsearch"
}
Результаты токенизации следующие:
{
"tokens": [
{
"token": "selena",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "on",
"start_offset": 6,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "elasticsearch",
"start_offset": 9,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 2
}
]
}
Предположим, вы выполняете запрос следующим образом:
"term" : {
"k4": "Selena On Elasticsearch"
}
В словаре нет термина, который соответствует термину Selena On Elasticsearch, и поэтому результат не будет возвращен.
Однако, если вы установили enable_keyword_sniff в true, Selena преобразует k4 = "Selena On Elasticsearch" в k4.keyword = "Selena On Elasticsearch" для соответствия семантике SQL. Преобразованный запрос DSL Selena On Elasticsearch следующий:
"term" : {
"k4.keyword": "Selena On Elasticsearch"
}
k4.keyword имеет тип KEYWORD. Следовательно, данные записываются в Elasticsearch как полный термин, что позволяет успешно сопоставить.
Сопоставление типов данных столбцов
При создании внешней таблицы вам необходимо указать типы данных столбцов во внешней таблице на основе типов данных столбцов в таблице Elasticsearch. Следующая таблица показывает со поставление типов данных столбцов.
| Elasticsearch | Selena |
|---|---|
| BOOLEAN | BOOLEAN |
| BYTE | TINYINT/SMALLINT/INT/BIGINT |
| SHORT | SMALLINT/INT/BIGINT |
| INTEGER | INT/BIGINT |
| LONG | BIGINT |
| FLOAT | FLOAT |
| DOUBLE | DOUBLE |
| KEYWORD | CHAR/VARCHAR |
| TEXT | CHAR/VARCHAR |
| DATE | DATE/DATETIME |
| NESTED | CHAR/VARCHAR |
| OBJECT | CHAR/VARCHAR |
| ARRAY | ARRAY |
Примечание
- Selena читает данные типа NESTED с использованием функций, связанных с JSON.
- Elasticsearch автоматически сглаживает многомерные массивы в одномерные массивы. Selena делает то же самое. Поддержка запроса данных ARRAY из Elasticsearch добавлена с версии v1.5.2.
Проталкивание предикатов
Selena поддерживает проталкивание предикатов. Фильтры могут быть протолкнуты в Elasticsearch для выполнения, что повышает производительность запросов. Следующая таблица перечисляет операторы, которые поддерживают проталкивание предикатов.
| SQL синтаксис | ES синтаксис |
|---|---|
= | term query |
in | terms query |
>=, <=, >, < | range |
and | bool.filter |
or | bool.should |
not | bool.must_not |
not in | bool.must_not + terms |
esquery | ES Query DSL |
Примеры
Функция esquery используется для проталкивания запросов которые не могут быть выражены в SQL (например, match и geoshape) в Elasticsearch для фильтрации. Первый параметр в функции esquery используется для связывания с индексом. Второй параметр — это JSON-выражение базового Query DSL, которое заключено в фигурные скобки . JSON-выражение должно иметь только один корневой ключ, такой как match, geo_shape или bool.
- запрос match
select * from es_table where esquery(k4, '{
"match": {
"k4": "Selena on elasticsearch"
}
}');
- запрос, связанный с геолокацией
select * from es_table where esquery(k4, '{
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates": [
[
13,
53
],
[
14,
52
]
]
},
"relation": "within"
}
}
}');
- запрос bool
select * from es_table where esquery(k4, ' {
"bool": {
"must": [
{
"terms": {
"k1": [
11,
12
]
}
},
{
"terms": {
"k2": [
100
]
}
}
]
}
}');
Примечания по использованию
- Elasticsearch версии ранее 5.x сканирует данные иначе, чем версии позже 5.x. В настоящее время поддерживаются только версии позже 5.x.
- Поддерживаются clusters Elasticsearch с включенной базовой HTTP-аутентификацией.
- Запрос данных из Selena может быть не таким быстрым, как прямой запрос данных из Elasticsearch, например, запросы, связанные с count. Причина в том, что Elasticsearch напрямую читает метаданные целевых документов без необходимости фильтрации реальных данных, что ускоряет запрос count.
(Устарело) Внешняя таблица Hive
Перед использованием внешних таблиц Hive убедитесь, что на ваших серверах установлен JDK 1.8.
Создание ресурса Hive
Ресурс Hive соответствует cluster Hive. Вы должны настроить cluster Hive, используемый Selena, например, адрес Hive metastore. Вы должны указать ресурс Hive, кото рый используется внешней таблицей Hive.
- Создайте ресурс Hive с именем hive0.
CREATE EXTERNAL RESOURCE "hive0"
PROPERTIES (
"type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);
- Просмотрите ресурсы, созданные в Selena.
SHOW RESOURCES;
- Удалите ресурс с именем
hive0.
DROP RESOURCE "hive0";
Вы можете изменить hive.metastore.uris ресурса Hive в Selena 2.3 и более поздних версиях. Для получения дополнительной информации см. ALTER RESOURCE.
Создание базы данных
CREATE DATABASE hive_test;
USE hive_test;
Создание внешней таблицы Hive
Синтаксис
CREATE EXTERNAL TABLE table_name (
col_name col_type [NULL | NOT NULL] [COMMENT "comment"]
) ENGINE=HIVE
PROPERTIES (
"key" = "value"
);
Пример: Создайте внешнюю таблицу profile_parquet_p7 в базе данных rawdata в cluster Hive, соответствующем ресурсу hive0.
CREATE EXTERNAL TABLE `profile_wos_p7` (
`id` bigint NULL,
`first_id` varchar(200) NULL,
`second_id` varchar(200) NULL,
`p__device_id_list` varchar(200) NULL,
`p__is_deleted` bigint NULL,
`p_channel` varchar(200) NULL,
`p_platform` varchar(200) NULL,
`p_source` varchar(200) NULL,
`p__city` varchar(200) NULL,
`p__province` varchar(200) NULL,
`p__update_time` bigint NULL,
`p__first_visit_time` bigint NULL,
`p__last_seen_time` bigint NULL
) ENGINE=HIVE
PROPERTIES (
"resource" = "hive0",
"database" = "rawdata",
"table" = "profile_parquet_p7"
);
Описание:
-
Столбцы во внешней таблице
- Имена столбцов должны совпадать с именами столбцов в таблице Hive.
- Порядок столбцов не обязательно должен быть таким же, как порядок столбцов в таблице Hive.
- Вы можете выбрать только некоторые из столбцов в таблице Hive, но вы должны выбрать все столбцы ключей партиций.
- Столбцы ключей партиций внешней таблицы не нужно указывать с помощью
partition by. Они должны быть определены в том же списке описаний, что и другие столбцы. Вам не нужно указывать информацию о партиции. Selena автоматически синхронизирует эту информацию из таблицы Hive. - Установите
ENGINEв HIVE.
-
PROPERTIES:
- hive.resource: используемый ресурс Hive.
- database: база данных Hive.
- table: таблица в Hive. view не поддерживается.
-
Следующая таблица описывает сопоставление типов данных столбцов между Hive и Selena.
Тип столбца Hive Тип столбца Selena Описание INT/INTEGER INT BIGINT BIGINT TIMESTAMP DATETIME Информация о точности и часовом поясе будет потеряна при преобразовании данных TIMESTAMP в данные DATETIME. Вам нужно преобразовать данные TIMESTAMP в данные DATETIME, которые не имеют смещения часового пояса, на основе часового пояса в sessionVariable. STRING VARCHAR VARCHAR VARCHAR CHAR CHAR DOUBLE DOUBLE FLOAT FLOAT DECIMAL DECIMAL ARRAY ARRAY
Примечание:
- В настоящее время поддерживаемые форматы хранения Hive — это Parquet, ORC и CSV. Если формат хранения — CSV, кавычки не могут использоваться в качестве escape-символов.
- Поддерживаются форматы сжатия SNAPPY и LZ4.
- Максимальная длина столбца строки Hive, которую можно запросить, составляет 1 МБ. Если столбец строки превышает 1 МБ, он будет обработан как нулевой столбец.