Перейти к основному содержимому

SQL-запросы

Эта тема содержит ответы на часто задаваемые вопросы о SQL.

Ошибка "fail to allocate memory." при создании материализованного представления

Для решения этой проблемы увеличьте значение параметра memory_limitation_per_thread_for_schema_change в файле be.conf. Этот параметр определяет максимальный объем памяти, который может быть выделен для одной задачи изменения схемы. Значение по умолчанию составляет 2 ГБ.

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

Selena не кэширует напрямую финальные результаты запросов. Начиная с версии 1.5.0, Selena использует функцию Query Cache для сохранения промежуточных результатов агрегации первого этапа в кэше. Новые запросы, семантически эквивалентные предыдущим запросам, могут повторно использовать кэшированные результаты вычислений для ускорения обработки. Query Cache использует память BE. Для получения дополнительной информации см. Query cache.

Когда в вычисления включается Null, результаты вычислений функций становятся ложными, за исключением функции ISNULL()

В стандартном SQL любое вычисление, включающее операнд со значением NULL, возвращает NULL.

Поддерживает ли Selena функцию DECODE?

Selena не поддерживает функцию DECODE базы данных Oracle. Selena совместима с MySQL, поэтому вы можете использовать оператор CASE WHEN.

Можно ли сразу запросить последние данные после загрузки данных в таблицу Primary Key в Selena?

Да. Selena объединяет данные способом, который ссылается на Google Mesa. В Selena BE запускает объединение данных и имеет два типа compaction для слияния данных. Если объединение данных не завершено, оно завершается во время вашего запроса. Поэтому вы можете читать последние данные после загрузки данных.

Обрезаются ли символы utf8mb4, хранящиеся в Selena, или отображаются искаженными?

Нет.

Ошибка "table's state is not normal" возникает при выполнении команды alter table

Эта ошибка возникает, потому что предыдущее изменение не было завершено. Вы можете выполнить следующий код для проверки статуса предыдущего изменения:

show tablet from lineitem where State="ALTER"; 

Время, затрачиваемое на операцию изменения, связано с объемом данных. Обычно изменение может быть завершено за несколько минут. Мы рекомендуем остановить загрузку данных в Selena во время изменения таблиц, поскольку загрузка данных снижает скорость завершения изменений.

Ошибка "get partition detail failed: org.apache.doris.common.DdlException: get hive partition meta data failed: java.net.UnknownHostException:hadooptest" возникает при запросе внешних таблиц Apache Hive

Эта ошибка возникает, когда невозможно получить метаданные разделов Apache Hive. Для решения этой проблемы скопируйте core-sit.xml и hdfs-site.xml в файл fe.conf и файл be.conf.

Ошибка "planner use long time 3000 remaining task num 1" возникает при запросе данных

Эта ошибка обычно возникает из-за полной сборки мусора (full GC), что можно проверить с помощью мониторинга backend и лога fe.gc. Для решения этой проблемы выполните одну из следующих операций:

  • Разрешите SQL-клиенту одновременно обращаться к нескольким frontend (FE) для распределения нагрузки.
  • Измените размер кучи Java Virtual Machine (JVM) с 8 ГБ на 16 ГБ в файле fe.conf для увеличения памяти и снижения влияния full GC.

Когда кардинальность столбца A мала, результаты запроса select B from tbl order by A limit 10 различаются каждый раз

SQL может гарантировать только упорядоченность столбца A и не может гарантировать, что порядок столбца B будет одинаковым для каждого запроса. MySQL может гарантировать порядок столбца A и столбца B, поскольку это автономная база данных.

Selena — это распределенная база данных, данные которой хранятся в базовой таблице в виде шардов. Данные столбца A распределены по нескольким машинам, поэтому порядок столбца B, возвращаемый несколькими машинами, может отличаться для каждого запроса, что приводит к несогласованному порядку B каждый раз. Для решения этой проблемы измените select B from tbl order by A limit 10 на select B from tbl order by A,B limit 10.

Почему существует большой разрыв в эффективности столбцов между SELECT * и SELECT?

Для решения этой проблемы проверьте профиль и посмотрите детали MERGE:

  • Проверьте, занимает ли агрегация на уровне хранения слишком много времени.

  • Проверьте, есть ли слишком много столбцов индикаторов. Если да, агрегируйте сотни столбцов миллионов строк.

MERGE:

- aggr: 26s270ms

- sort: 15s551ms

Поддерживает ли DELETE вложенные функции?

Вложенные функции не поддерживаются, такие как to_days(now()) в DELETE from test_new WHERE to_days(now())-to_days(publish_time) >7;.

Как повысить эффективность использования базы данных, когда в ней сотни таблиц?

Для повышения эффективности добавьте параметр -A при подключении к клиентскому серверу MySQL: mysql -uroot -h127.0.0.1 -P8867 -A. Клиентский сервер MySQL не будет предварительно читать информацию о базе данных.

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

Настройте уровень логирования и соответствующие параметры. Для получения дополнительной информации см. Конфигурация параметров.

Ошибка "table *** is colocate table, cannot change replicationNum" возникает при изменении числа репликаций

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

  1. Установите group_with в empty для всех таблиц в группе.
  2. Установите подходящий replication_num для всех таблиц в группе.
  3. Верните group_with к исходному значению.

Влияет ли установка VARCHAR на максимальное значение на хранение?

VARCHAR — это тип данных переменной длины, который имеет указанную длину, которая может изменяться в зависимости от фактической длины данных. Указание различной длины varchar при создании таблицы мало влияет на производительность запросов для одних и тех же данных.

Ошибка "create partititon timeout" возникает при усечении таблицы

Для усечения таблицы необходимо создать соответствующие разделы, а затем поменять их местами. Если необходимо создать большое количество разделов, возникает эта ошибка. Кроме того, если есть много задач загрузки данных, блокировка будет удерживаться в течение длительного времени во время процесса compaction. Поэтому блокировка не может быть получена при создании таблиц. Если есть слишком много задач загрузки данных, установите tablet_map_shard_size в 512 в файле be.conf для уменьшения конкуренции за блокировки.

Ошибка "Failed to specify server's Kerberos principal name" возникает при доступе к внешним таблицам Apache Hive

Добавьте следующую информацию в hdfs-site.xml в файле fe.conf и файле be.conf:

<property>

<name>dfs.namenode.kerberos.principal.pattern</name>

<value>*</value>

</property>

Является ли "2021-10" форматом даты в Selena?

Нет.

Можно ли использовать "2021-10" как поле раздела?

Нет, используйте функции для изменения "2021-10" на "2021-10-01", а затем используйте "2021-10-01" как поле раздела.

Где можно запросить размер базы данных или таблицы Selena?

Вы можете использовать команду SHOW DATA.

SHOW DATA; отображает размер данных и реплики всех таблиц в текущей базе данных.

SHOW DATA FROM <db_name>.<table_name>; отображает размер данных, количество реплик и количество строк в указанной таблице указанной базы данных.