Использование impala-shell для подключения к Impala
Вы можете подключиться к Impala с помощью инструмента командной строки — impala-shell
. Эта утилита доступна на хостах, на которых установлен компонент Impala Client. Оболочка Impala может удаленно подключаться к любому экземпляру Impala Daemon.
Утилита impala-shell позволяет создавать базы данных и таблицы, управлять ими, добавлять данные и выполнять запросы. Вы также можете выполнять операторы SQL в интерактивном режиме. Можно указывать параметры командной строки для обработки одного оператора или script-файла, содержащего большое количество операторов.
Кроме того, вы можете сохранить набор настроек по умолчанию для impala-shell в файле конфигурации.
Запуск impala-shell
Чтобы запустить impala-shell, используйте следующую команду:
$ impala-shell
Для выполнения запросов необходимо подключиться к демону impalad. Команда impala-shell
подключается к impalad, работающему на том же хосте. Для получения информации о том, как подключиться к демону impalad на другом хосте, см. Подключение к impalad на определенном хосте.
ПРИМЕЧАНИЕ
Если при использовании impala-shell возникла ошибка ImportError: no module named pkg_resources , необходимо установить пакет python-setuptools . Для этого можно воспользоваться командой: yum install python-setuptools .
|
Параметры конфигурации
Для того чтобы настроить impala-shell под определенные задачи, используются параметры конфигурации. В таблице ниже перечислены параметры, которые могут быть переданы в качестве параметра командной строки или определены в конфигурационном файле.
Параметр командной строки | Настройка в конфигурационном файле | Описание |
---|---|---|
-B или --delimited |
write_delimited=true |
Выводит результаты запроса в виде текстового файла с разделителями. Применяется для создания файлов данных, которые могут быть использованы с другими компонентами Hadoop. Эта опция также помогает избежать снижения производительности из-за форматированного вывода при выполнении тестов производительности, в которых используются запросы, возвращающие большие наборы результатов. Чтобы указать символ-разделитель, используйте параметр |
-b или --kerberos_host_fqdn |
kerberos_host_fqdn=load-balancer-hostname |
Переопределяет имя хоста принципала Kerberos демона Impala. impala-shell проверяет, соответствует ли принципал сервера этому имени хоста. Его можно использовать, когда доступ к impalad осуществляется через балансировщик нагрузки, но impala-shell должен напрямую подключаться к определённому демону impalad |
--print_header |
print_header=true |
Определяет, следует ли печатать строку заголовка |
-o filename или --output_file filename |
output_file=filename |
Указывает имя выходного файла. Обычно он используется для хранения результатов единичного запроса, выполненного из командной строки с параметром |
--output_delimiter=character |
output_delimiter=character |
Указывает символ, используемый в качестве разделителя между полями, когда результаты запроса печатаются в формате текста (параметр |
-E или --vertical |
vertical=true |
Выводит итоговые данные запроса (строки) по вертикали. Эта опция не действует, если используется опция |
-p или --show_profiles |
show_profiles=true |
Отображает план выполнения запроса (тот же результат, что и оператор |
-h или --help |
— |
Отображает справочную информацию |
— |
history_max=1000 |
Устанавливает максимальное количество запросов для хранения в файле истории выполненных запросов в impala-shell |
-i hostname или --impalad=hostname[:port_num] |
impalad=hostname[:port_num] |
Подключается к демону impalad, установленному на указанном хосте. Если параметр |
-q query или --query=query |
query=query |
Позволяет выполнить один запрос из командной строки, не запуская интерактивный интерпретатор. Вы можете использовать эту опцию для запуска impala-shell из script-файла оболочки или при вызове команды из Python, Perl или других скриптов. Запрос должен содержать один оператор, например, |
-f query_file или --query_file=query_file |
query_file=path_to_query_file |
Позволяет обрабатывать файл, содержащий несколько операторов SQL. Например, набор операторов DDL для создания группы таблиц и представлений. Несколько операторов должны быть разделены точкой с запятой ( |
--query_option="option=value" или -Q "option=value" |
Строка заголовка — |
Устанавливает параметры запроса по умолчанию для команд impala-shell. Чтобы задать сразу несколько параметров запроса, используйте несколько экземпляров этой опции командной строки. Имена параметров запроса не чувствительны к регистру |
-k или --kerberos |
use_kerberos=true |
Определяет использовать ли аутентификацию Kerberos при подключении к impalad. Если Kerberos не включен на экземпляре impalad, к которому подключается impala-shell, отображается ошибка. См. Enabling Kerberos Authentication for Impala |
-s kerberos_service_name или --kerberos_service_name=name |
kerberos_service_name=name |
Определяет имя impala-shell для аутентификации в определённом принципале сервиса impalad. Если |
-V или --verbose |
verbose=true |
Включает подробный вывод |
--quiet |
verbose=false |
Отключает подробный вывод |
-v или --version |
version=true |
Выводит информацию о версии impala-shell |
-c |
ignore_query_failure=true |
Определяет игнорировать ли ситуацию, когда запрос не смог выполниться |
-d default_db или --database=default_db |
default_db=default_db |
Указывает начальную базу данных. Эквивалентен выполнению оператора USE после подключения. Если параметр не указан, используется база данных |
-ssl |
ssl=true |
Включает TLS/SSL для impala-shell |
--ca_cert=path_to_certificate |
ca_cert=path_to_certificate |
Локальный путь к стороннему сертификату CA или к копии сертификата сервера для самоподписанных сертификатов сервера. Если |
-l |
use_ldap=true |
Включает LDAP-аутентификацию |
-u |
user=user_name |
Указывает имя пользователя, когда аутентификация LDAP включена. Используйте короткое имя пользователя, а не полное отличительное имя LDAP. После использования этой опции оболочка запросит пароль |
--ldap_password_cmd=command |
ldap_password_cmd |
Указывает команду для получения пароля LDAP, когда аутентификация LDAP включена. Если команда включает аргументы, разделенные пробелами, заключите команду и ее аргументы в кавычки. Например, |
--config_file=path_to_config_file |
— |
Указывает путь к файлу, содержащему настройки конфигурации impala-shell. Путь по умолчанию — |
--live_progress |
live_progress=true |
Отображает индикатор выполнения, показывающий приблизительный процент выполнения каждого запроса. Информация обновляется в интерактивном режиме по мере обработки запроса. См. LIVE_PROGRESS Query Option |
--disable_live_progress |
live_progress=false |
Позволяет отключить |
--live_summary |
— |
Отображает подробный отчет, аналогичный команде |
-var=variable_name=value |
— |
Определяет подстановочную переменную, которую можно использовать в сессии impala-shell. Переменная может быть заменена в операторах, обрабатываемых опциями |
--auth_creds_ok_in_clear |
auth_creds_ok_in_clear |
Позволяет использовать аутентификацию LDAP при небезопасном подключении к impala-shell. Обратите внимание, что учетные данные для аутентификации отправляются в незашифрованном виде и могут быть уязвимы для атак |
--protocol=protocol |
— |
Протокол, используемый для подключения к Impala. Допустимые значения:
|
--hs2_fp_format=HS2_FP_FORMAT |
hs2_fp_format=HS2_FP_FORMAT |
Задает спецификацию формата вывода для значений с плавающей запятой при использовании протокола HS2. По умолчанию значения обрабатываются встроенным методом Python |
Конфигурационный файл impala-shell
Как упоминалось выше, можно сохранить набор настроек по умолчанию для impala-shell в конфигурационном файле.
Путь по умолчанию к глобальному файлу конфигурации impala-shell — /etc/impalarc. Путь по умолчанию к файлу конфигурации пользовательского уровня — ~/.impalarc. Обратите внимание, что имя файла глобального уровня не включает точку (.
). Чтобы изменить путь по умолчанию к глобальному файлу конфигурации, установите переменную среды $IMPALA_SHELL_GLOBAL_CONFIG_FILE
.
Поскольку файлы конфигурации ADH Impala расположены в каталоге /etc/impala/conf, вы можете создать глобальный файл конфигурации impala-shell в этом каталоге и установить переменную $IMPALA_SHELL_GLOBAL_CONFIG_FILE
:
$ export IMPALA_SHELL_GLOBAL_CONFIG_FILE=/etc/impala/conf
Также можно запустить impala-shell с параметром --config_file
, устанавливающим путь к файлу конфигурации.
Параметры, указанные в файле конфигурации пользователя, имеют более высокий приоритет, чем параметры из глобального файла конфигурации. В свою очередь, любые параметры, указанные в командной строке impala-shell, переопределяют соответствующие параметры из файлов конфигурации.
Файл конфигурации impala-shell (глобальный или пользовательский) должен содержать заголовок [impala]
, за которым следуют параметры.
Имена параметров в файле конфигурации аналогичны длинным формам аргументов командной строки impala-shell. Они перечислены в таблице выше.
Вы также можете указать опции, представляющие собой пары ключ/значение, используя keyval
, аналогично параметру командной строки --var
. Например, keyval=variable1=value1
.
Файл конфигурации также может содержать параметры запроса в секции [impala.query_options]
. Параметры, указанные в разделе [impala]
, переопределяют параметры из раздела [impala.query_options]
.
В приведенном ниже примере показан файл конфигурации, в котором включен подробный режим вывода, таким образом каждый вывод SQL-запроса сопровождается информацией о времени. impala-shell выполняет запросы к базе данных test
по умолчанию. Вывод запроса форматируется как текст с разделителями и сохраняется в файле. Также включается опция show_profiles
. Эта опция выводит подробную информацию о производительности после каждого запроса.
[impala] verbose=true default_db=test write_delimited=true output_delimiter=, output_file=/home/test_result.csv show_profiles=true keyval=var1=value1,keyval=var2=value2
В следующем примере показан файл конфигурации, который подключается к определенному хосту Impala, выполняет один запрос к базе данных test
, а затем завершает работу. Любые параметры запроса, предварительно определенные в разделе [impala.query_options]
, применяются во время сессии.
[impala] impalad=ees-adh1.ru-central1.internal default_db=test # Run the query and exit query=select count(*) from customers [impala.query_options] mem_limit=32g
Вы можете использовать второй тип файла конфигурации с параметром командной строки --config_file
, чтобы легко выбирать между множеством предопределенных запросов, которые можно запускать для разных баз данных, хостов или даже разных кластеров. Чтобы запустить последовательность операторов вместо одного запроса, создайте файл с операторами и укажите параметр конфигурации query_file=path_to_query_file
в тексте запроса.
Подключение к impalad на определенном хосте
Для подключения к демону impalad на другом хосте необходимо указать параметры подключения одним из описанных ниже способов.
С помощью параметров командной строки
Вы можете использовать параметры командной строки при запуске команды impala-shell:
$ impala-shell -i ees-1adh3.ru-central1.internal:28000 --protocol='hs2-http'
Этот пример подключается к impalad на хосте ees-1adh3.ru-central1.internal
и порте 28000, через HiveServer2 по HTTP.
С помощью конфигурационного файла
Параметры подключения можно указать в файле. Создайте файл с настройками подключения, как описано в разделе Конфигурационный файл impala-shell. Например:
$ cat > ~/custom_conf1
[impala]
impalad=ees-1adh2.ru-central1.internal
query=select version()
При использовании команды cat
нажмите CTRL+D
, чтобы выйти.
Запустите impala-shell:
$ impala-shell --config_file=~/custom_conf1
Результат:
Starting Impala Shell with no authentication using Python 2.7.5 Warning: live_progress only applies to interactive shell sessions, and is being skipped for now. Opened TCP connection to ees-1adh2.ru-central1.internal:21050 Connected to ees-1adh2.ru-central1.internal:21050 Server version: impalad version 4.2.0-RELEASE RELEASE (build 978afcfae9aa626de182b2872c4469646f42e0f6) Query: select version() Query submitted at: 2023-07-25 14:36:57 (Coordinator: http://ees-1adh2.ru-central1.internal:25000) Query progress can be monitored at: http://ees-1adh2.ru-central1.internal:25000/query_plan?query_id=084b59535cac1baf:5f5e61f500000000 +----------------------------------------------------------------------------------------+ | version() | +----------------------------------------------------------------------------------------+ | impalad version 4.2.0-RELEASE RELEASE (build 978afcfae9aa626de182b2872c4469646f42e0f6) | | Built on Mon Jun 5 16:33:03 UTC 2023 | +----------------------------------------------------------------------------------------+ Fetched 1 row(s) in 0.44s
С помощью команды CONNECT
Выполните команду CONNECT
во время сессии impala-shell:
$ impala-shell
connect ees-1adh3.ru-central1.internal;
Результат:
Opened TCP connection to ees-1adh3.ru-central1.internal:21050 Connected to ees-1adh3.ru-central1.internal:21050 Server version: impalad version 4.2.0-RELEASE RELEASE (build 978afcfae9aa626de182b2872c4469646f42e0f6) [ees-1adh3.ru-central1.internal:21050] default>
Подключение к определенной базе данных
Вы можете использовать все те же параметры подключения, что и в предыдущих примерах, и добавить параметр -d
с именем базы данных:
$ impala-shell -i localhost -d my_db
localhost
ссылается на тот же хост, на котором работает impala-shell.
Выполнение операторов SQL в неинтерактивном режиме
Вызовите impala-shell с параметром -q
для запуска единичного оператора или с параметром -f
для запуска последовательности операторов из файла. Команда impala-shell возвращает результат сразу, без перехода в интерактивный режим:
$ impala-shell -i localhost -d my_db -q 'show tables'
$ impala-shell -i localhost -d my_db -f recreate_tables.sql
Выполнение команд и операторов SQL
Интерпретатор impala-shell принимает операторы SQL, описанные в статье Impala SQL Statements, и команды оболочки, которые можно использовать для настройки работоспособности и диагностики проблем.
В неинтерактивном режиме результат запроса выводится в stdout или в файл, указанный в параметре -o
. Ошибки выводятся в stderr. Таким образом, вы можете обрабатывать результат запроса как часть пайплайна Unix.
В интерактивном режиме impala-shell использует библиотеку Readline для вызова и редактирования предыдущих команд.
Вы можете использовать следующие сочетания клавиш и правила синтаксиса для запуска команд и операторов SQL в impala-shell:
-
Чтобы увидеть полный список доступных команд, дважды нажмите
TAB
. -
Чтобы пролистать предыдущие команды, нажмите клавиши со стрелками вверх и вниз.
-
Используйте стандартный набор сочетаний клавиш в библиотеке GNU Readline для редактирования и перемещения курсора, например
Ctrl+A
для перемещения курсора в начало строки иCtrl+E
— в конец строки. -
Команды и операторы SQL могут занимать несколько строк и должны заканчиваться точкой с запятой (
;
). -
Используйте
--
, чтобы закомментировать однострочный комментарий, и/* <content> */
, чтобы закомментировать несколько строк. Комментарий рассматривается как часть оператора, которому он предшествует. Когда вы вводите комментарий, вы получаете запрос на продолжение, пока не введете точку с запятой. Например:default> -- Show tables starting with t > SHOW TABLES LIKE 't*';
Если комментарий содержит
${variable_name}
и не предназначен для замены переменной, символ$
должен быть заэкранирован, например —\${hello}
.
Приведенный ниже пример использует и команды impala-shell и операторы SQL, чтобы создать базу данных test
и таблицу table1
:
create database test;
use test;
create table table1 (field1 int, field2 boolean, field3 string);
insert into table1 values ((1,true,"row1"), (2,true,"row2"), (3,false,"row3"));
select * from table1;
Результат:
+--------+--------+--------+ | field1 | field2 | field3 | +--------+--------+--------+ | 1 | true | row1 | | 2 | true | row2 | | 3 | false | row3 | +--------+--------+--------+
Подстановка переменных
Можно определить переменные, которые будут подставляться в операторы SQL, обрабатываемые impala-shell. Для этого в командной строке укажите параметр --var=variable_name=value
. В интерактивной сессии или в файле скрипта, переданного с помощью параметра -f
, используйте команду SET VAR:variable_name=value
. Чтобы добавить переменную в оператор SQL, используйте запись: ${VAR:variable_name}
.
Примеры ниже содержат несколько команд, определяющих переменные, и используют их в операторах SQL, выполняемых с помощью -q
. Строки аргументов -q
, в которых есть ссылки на переменные ${var:value}
, заключены в одинарные кавычки.
Пример 1:
$ impala-shell --var=tname=table1 --var=colname=col1 --var=coltype=string -q 'CREATE TABLE ${var:tname} (${var:colname} ${var:coltype}) STORED AS PARQUET'
Результат:
Query: CREATE TABLE table1 (col1 string) STORED AS PARQUET +-------------------------+ | summary | +-------------------------+ | Table has been created. | +-------------------------+
Пример 2:
$ impala-shell --quiet --var=tname=table1
use test;
select count(*) from ${var:tname};
Результат:
+----------+ | count(*) | +----------+ | 3 | +----------+
Пример 3:
$ impala-shell
set var:tname=table1;
select count(*) from ${var:tname};
Результат:
+----------+ | count(*) | +----------+ | 3 | +----------+