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

Ошибки SQL

Q1. Ошибка запроса: Failed to get scan range, no queryable replica found in tablet: xxxx​

Это происходит, когда для соответствующего tablet не удаётся найти реплику, доступную для запросов. Обычно причина в том, что BE не работает, реплика отсутствует и т. п. Сначала можно выполнить оператор show tablet tablet_id, а затем оператор show proc, чтобы просмотреть сведения о репликах этого tablet и проверить их полноту. Также с помощью show proc "/cluster_balance" можно отслеживать ход планирования размещения и восстановления реплик в кластере.

Описание команд для управления репликами данных см. в разделе Управление репликами данных.

Q2. Show backends/frontends: отображается неполная информация​

После выполнения некоторых операторов, например show backends/frontends, можно обнаружить, что информация в отдельных столбцах результата неполная. Например, в результате show backends могут отсутствовать сведения о ёмкости дисков.

Обычно эта проблема возникает, когда в кластере несколько узлов FE. Если пользователь выполняет эти операторы, подключившись к узлу FE, который не является Master FE, он получает неполную информацию. Это связано с тем, что некоторые сведения, например об использовании дисков BE, хранятся только на узле Master FE. Поэтому получить полную информацию можно лишь при прямом подключении к Master FE.

Также перед выполнением этих операторов можно выполнить set forward_to_master=true;. Если эта переменная сеанса имеет значение true, некоторые последующие операторы просмотра информации автоматически перенаправляются на Master FE для получения результатов. Таким образом, пользователь получает полный результат независимо от того, к какому узлу FE он подключён.

Q3. invalid cluster id: xxxx​

Эта ошибка может появляться в результатах команд show backends или show frontends. Обычно она отображается в столбце сообщений об ошибках узла FE или BE. Ошибка означает, что после получения сигнала heartbeat от Master FE узел обнаружил несовпадение идентификатора кластера в сигнале с идентификатором, сохранённым локально, и поэтому отказался отвечать на сигнал heartbeat.

Узел Master FE в Doris регулярно отправляет сигналы heartbeat каждому узлу FE или BE и включает в них cluster_id. cluster_id — это уникальный идентификатор кластера, который Master FE генерирует при инициализации кластера. Когда FE или BE впервые получает сигнал heartbeat, cluster_id сохраняется локально в файле. Для FE этот файл находится в подкаталоге image/ каталога метаданных, а для BE файл cluster_id создаётся в каждом каталоге данных. В дальнейшем при получении каждого сигнала heartbeat узел сравнивает локально сохранённый cluster_id со значением в сигнале. Если значения не совпадают, узел отказывается отвечать на сигнал heartbeat.

Этот механизм аутентификации узлов защищает от поддельных сигналов heartbeat, отправленных узлами вне кластера.

Чтобы устранить эту ошибку, сначала убедитесь, что все узлы относятся к нужному кластеру. Затем для узла FE можно попробовать изменить значение cluster_id в файле image/VERSION в каталоге метаданных и перезапустить FE. Для узла BE можно удалить все файлы cluster_id в каталогах данных и перезапустить BE.

Q4. Результаты запросов к таблице с моделью Unique Key различаются​

В некоторых случаях при повторном выполнении одного и того же SQL-запроса к таблице с моделью Unique Key результаты могут различаться. При этом результат каждый раз принимает один из 2-3 вариантов.

Причина может заключаться в том, что один пакет загружаемых данных содержит записи с одинаковым ключом, но разными значениями. Из-за неопределённого порядка перезаписи данных результаты на разных репликах могут различаться.

Например, таблица содержит столбцы k1, v1. Загружается следующий пакет данных:

1, "abc"
1, "def"

Тогда результатом на реплике 1 может оказаться 1, "abc", а на реплике 2 — 1, "def". В итоге результаты запросов различаются.

Чтобы обеспечить однозначный порядок данных на разных репликах, можно воспользоваться столбцом последовательности (Sequence Column).

Q5. При запросе данных типа bitmap/hll возвращается NULL​

Если в версии 1.1.x при включённой векторизации запрос к полю типа bitmap в таблице возвращает NULL:

  1. Сначала выполните set return_object_data_as_binary=true;
  2. Отключите векторизацию: set enable_vectorized_engine=false;
  3. Отключите кеш SQL: set [global] enable_sql_cache = false;

Это связано с тем, что в векторизованном движке выполнения для типов bitmap / hll, если все входные значения равны NULL, результатом также будет NULL вместо 0.

Q6. Ошибка при обращении к объектному хранилищу: curl 77: Problem with the SSL CA cert​

Если в журнале be.INFO появляется ошибка curl 77: Problem with the SSL CA cert, попробуйте устранить её следующим образом:

  1. Скачайте сертификат cacert.pem со страницы https://curl.se/docs/caextract.html.
  2. Скопируйте сертификат в указанное расположение: sudo cp /tmp/cacert.pem /etc/ssl/certs/ca-certificates.crt
  3. Перезапустите узел BE.

Q7. Ошибка загрузки: "Message": "[INTERNAL_ERROR]single replica load is disabled on BE."​

  1. Убедитесь, что параметр enable_single_replica_load в be.conf имеет значение true.
  2. Перезапустите узел BE.