Перейти к основному содержимому
Версия: 2.0.x

Прочие часто задаваемые вопросы

В этом разделе приведены ответы на некоторые общие вопросы.

Занимают ли VARCHAR (32) и STRING одинаковое место в хранилище?

Оба являются типами данных переменной длины. При хранении данных одинаковой длины VARCHAR (32) и STRING занимают одинаковое место в хранилище.

Одинакова ли производительность VARCHAR (32) и STRING при запросе данных?

Да.

Почему TXT-файлы, импортированные из Oracle, по-прежнему отображаются с искажёнными символами после установки кодировки UTF-8?

Для решения этой проблемы выполните следующие шаги:

  1. Например, есть файл с именем original, текст которого искажён. Кодировка этого файла — ISO-8859-1. Выполните следующий код, чтобы определить кодировку файла.

    file --mime-encoding origin.txt
    origin.txt: iso-8859-1
  2. Выполните команду iconv, чтобы преобразовать кодировку этого файла в UTF-8.

    iconv -f iso-8859-1 -t utf-8 origin.txt > origin_utf-8.txt
  3. После преобразования текст файла по-прежнему искажён. Вы можете переопределить кодировку этого файла как GBK и снова преобразовать кодировку в UTF-8.

    iconv -f gbk -t utf-8 origin.txt > origin_utf-8.txt

Одинакова ли длина STRING, определённая в MySQL и в Selena?

Для VARCHAR(n) Selena определяет "n" в байтах, а MySQL определяет "n" в символах. Согласно UTF-8, один китайский иероглиф равен трём байтам. Когда Selena и MySQL определяют "n" как одно и то же число, MySQL сохраняет в три раза больше символов, чем Selena.

Может ли тип данных партиционированных полей таблицы быть FLOAT, DOUBLE или DECIMAL?

Нет, поддерживаются только DATE, DATETIME и INT.

Как проверить объём хранилища, занимаемый данными в таблице?

Выполните оператор SHOW DATA, чтобы увидеть соответствующий объём хранилища. Вы также можете увидеть объём данных, количество копий и количество строк.

Примечание: В статистике данных есть временная задержка.

Как запросить увеличение квоты для базы данных Selena?

Чтобы запросить увеличение квоты, выполните следующий код:

ALTER DATABASE example_db SET DATA QUOTA 10T;

Поддерживает ли Selena обновление отдельных полей в таблице с помощью оператора UPSERT?

Selena 2.2 и более поздние версии поддерживают обновление определённых полей в таблице с использованием таблицы с первичным ключом. Selena 1.9 и более поздние версии поддерживают обновление всех полей в таблице с использованием таблицы с первичным ключом. Дополнительную информацию см. в разделе Таблица с первичным ключом в Selena 2.2.

Как поменять местами данные между двумя таблицами или двумя партициями?

Выполните оператор SWAP WITH для обмена данными между двумя таблицами или двумя партициями. Оператор SWAP WITH более безопасен, чем оператор INSERT OVERWRITE. Перед обменом данными сначала проверьте данные, а затем убедитесь, что данные после обмена соответствуют данным до обмена.

  • Обмен двух таблиц: например, есть таблица с именем table1. Если вы хотите заменить table1 другой таблицей, выполните следующие шаги:

    1. Создайте новую таблицу с именем table2.

      create table2 like table1;
    2. Используйте Stream Load, Broker Load или Insert Into для загрузки данных из table1 в table2.

    3. Замените table1 на table2.

      ALTER TABLE table1 SWAP WITH table2;

      Таким образом, данные будут точно загружены в table1.

  • Обмен двух партиций: например, есть таблица с именем table1. Если вы хотите заменить данные партиции в table1, выполните следующие шаги:

    1. Создайте временную партицию.

      ALTER TABLE table1

      ADD TEMPORARY PARTITION tp1

      VALUES LESS THAN("2020-02-01");
    2. Загрузите данные партиции из table1 во временную партицию.

    3. Замените партицию table1 на временную партицию.

      ALTER TABLE table1

      REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);

Ошибка "error to open replicated environment, will exit" возникает при перезапуске фронтенда (FE)

Эта ошибка возникает из-за бага BDBJE. Чтобы решить эту проблему, обновите версию BDBJE до 1.17 или более поздней.

Ошибка "Broker list path exception" возникает при запросе данных из новой таблицы Apache Hive

Описание проблемы

msg:Broker list path exception

path=hdfs://172.31.3.136:9000/user/hive/warehouse/zltest.db/student_info/*, broker=TNetworkAddress(hostname:172.31.4.233, port:8000)

Решение

Обратитесь в техническую поддержку Selena и проверьте, правильны ли адрес и порт namenode, а также есть ли у вас разрешение на доступ к адресу и порту namenode.

Ошибка "get hive partition metadata failed" возникает при запросе данных из новой таблицы Apache Hive

Описание проблемы

msg:get hive partition meta data failed: java.net.UnknownHostException: emr-header-1.cluster-242

Решение

Убедитесь, что сеть подключена, и загрузите файл host на каждый бэкенд (BE) в вашем cluster Selena.

Ошибка "do_open failed. reason = Invalid ORC postscript length" возникает при доступе к внешней таблице ORC в Apache Hive

Описание проблемы

Метаданные Apache Hive кэшируются в FE. Но для обновления метаданных в Selena требуется задержка в два часа. Если до завершения обновления Selena вы вставляете новые данные или обновляете данные в таблице Apache Hive, данные в HDFS, сканируемые BE, и данные, полученные FE, различаются. Поэтому возникает эта ошибка.

MySQL [bdp_dim]> select * from dim_page_func_s limit 1;

ERROR 1064 (HY000): HdfsOrcScanner::do_open failed. reason = Invalid ORC postscript length

Решение

Чтобы решить эту проблему, выполните одно из следующих действий:

Ошибка "caching_sha2_password cannot be loaded" возникает при подключении внешних таблиц MySQL

Описание проблемы

Плагин аутентификации по умолчанию в MySQL 8.0 — caching_sha2_password. Плагин аутентификации по умолчанию в MySQL 5.7 — mysql_native_password. Эта ошибка возникает из-за использования неправильного плагина аутентификации.

Решение

Чтобы решить эту проблему, выполните одно из следующих действий:

  • Подключитесь к Selena.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
  • Измените файл my.cnf.
vim my.cnf

[mysqld]

default_authentication_plugin=mysql_native_password

Как немедленно освободить дисковое пространство после удаления таблицы?

Если вы выполняете оператор DROP TABLE для удаления таблицы, Selena требуется некоторое время для освобождения выделенного дискового пространства. Чтобы немедленно освободить выделенное дисковое пространство, выполните оператор DROP TABLE FORCE для удаления таблицы. При выполнении оператора DROP TABLE FORCE Selena удаляет таблицу напрямую, не проверяя, есть ли в ней незавершённые события. Рекомендуется выполнять оператор DROP TABLE FORCE с осторожностью, поскольку после удаления таблицы её нельзя восстановить.

Как просмотреть текущую версию Selena?

Выполните команду select current_version(); или CLI-команду ./bin/show_fe_version.sh для просмотра текущей версии.

Как установить размер памяти для FE?

Метаданные хранятся в памяти, используемой FE. Вы можете установить размер памяти FE в соответствии с количеством tablet, как показано в таблице ниже. Например, если количество tablet меньше 1 миллиона, следует выделить минимум 16 ГБ памяти для FE. Вы можете настроить значения параметров -Xms и -Xmx в элементе конфигурации JAVA_OPTS в файле fe.conf, и значения параметров -Xms и -Xmx должны быть одинаковыми. Обратите внимание, что конфигурация должна быть одинаковой для всех FE, поскольку любой из FE может быть избран лидером.

Количество tabletРазмер памяти каждого FE
менее 1 миллиона16 ГБ
1 - 2 миллиона32 ГБ
2 - 5 миллионов64 ГБ
5 - 10 миллионов128 ГБ

Как Selena рассчитывает время выполнения запроса?

Selena поддерживает запрос данных с использованием нескольких потоков. Время запроса относится к времени, затраченному несколькими потоками на запрос данных.

Поддерживает ли Selena указание пути при экспорте данных локально?

Нет.

Каковы верхние пределы параллелизма Selena?

Вы можете протестировать ограничения параллелизма на основе реальных или смоделированных бизнес-сценариев. По отзывам некоторых пользователей, можно достичь максимум 20 000 QPS или 30 000 QPS.

Почему первый тест SSB Selena медленнее, чем последующие?

Скорость чтения дисков при первом запросе зависит от производительности дисков. После первого запроса создаётся кэш страниц для последующих запросов, поэтому запрос выполняется быстрее.

Сколько минимально BE нужно настроить для cluster?

Selena поддерживает развертывание на одном узле, поэтому необходимо настроить минимум один BE. BE должны работать с поддержкой AVX2, поэтому рекомендуется развертывать BE на машинах с 8-ядерным процессором и 16 ГБ памяти или более высокой конфигурацией.

Как установить разрешения на данные при использовании Apache Superset для визуализации данных в Selena?

Вы можете создать новую учётную запись пользователя, а затем установить разрешения на данные, предоставив пользователю права на запрос к таблице.

Почему профиль не отображается после установки enable_profile в true?

Отчёт отправляется только на FE-лидер для доступа.

Как проверить аннотации полей в таблицах Selena?

Выполните команду show create table xxx.

При создании таблицы как указать значение по умолчанию для функции NOW()?

Только Selena 2.1 или более поздняя версия поддерживает указание значения по умолчанию для функции. Для версий ранее Selena 2.1 можно указать только константу для функции.

Как освободить пространство хранения узлов BE?

Вы можете удалить каталог trash с помощью команды rm -rf. Если вы уже восстановили данные из снимка, можете удалить каталог snapshot.

Можно ли добавить дополнительные диски к узлам BE?

Да. Вы можете добавить диски в каталог, указанный в параметре конфигурации BE storage_root_path.

Как предотвратить конфликты партиций выражений, вызванные одновременным выполнением задач загрузки и задач создания партиций?

В настоящее время для таблиц со стратегией партиционирования по выражениям партиции, созданные во время задач загрузки, конфликтуют с партициями, созданными во время задач ALTER TABLE. Поскольку задачи загрузки имеют приоритет, любые конфликтующие задачи ALTER завершатся неудачей. Чтобы предотвратить эту проблему, рассмотрите следующие обходные пути:

  • Если вы используете крупные временные партиции (например, партиционирование по дням или месяцам), вы можете предотвратить пересечение операций ALTER временных границ, уменьшая риск сбоев при создании партиций.
  • Если вы используете мелкие временные партиции (например, партиционирование по часам), вы можете вручную создать партиции для будущего временного диапазона, чтобы операции ALTER не прерывались новыми партициями, созданными задачами загрузки. Вы можете использовать функцию EXPLAIN ANALYZE для запуска создания партиций путём выполнения оператора INSERT без фиксации транзакции. Это позволяет создать необходимые партиции без влияния на фактические данные. Следующий пример демонстрирует, как создать партиции на следующие 8 часов:
CREATE TABLE t(
event_time DATETIME
)
PARTITION BY date_trunc('hour', event_time);

EXPLAIN ANALYZE
INSERT INTO t (event_time)
SELECT DATE_ADD(NOW(), INTERVAL d hour)
FROM table(generate_series(0, 8)) AS g(d);

SHOW PARTITIONS FROM t;