Cassandra / Java несовпадение символов Исключение при создании таблицы с именем MD5 - PullRequest
0 голосов
/ 10 июня 2019

Я настраиваю базу данных Cassandra и пытаюсь создать таблицы с хеш-кодом MD5 в качестве имени таблицы.Когда я делаю это, я получаю исключение com.datastax.oss.driver.api.core.servererrors.SyntaxError: line 1:35 mismatched character '2' expecting '-'.

Мой запрос:

CREATE TABLE IF NOT EXISTS 77f2d6b127b7d4a89a940d0829ff1e672afb4362_status (
    jsonSchema TEXT,
    onlineStatus INT,
    key text,
    timestamp timeuuid,
    primary key(key, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC) 
  AND compaction = {'class': 'TimeWindowCompactionStrategy', 
                    'compaction_window_size': 1, 
                    'compaction_window_unit': 'DAYS'};

И исключение:

Caused by: com.datastax.oss.driver.api.core.servererrors.SyntaxError: line 1:35 mismatched character '2' expecting '-'
    at com.datastax.oss.driver.api.core.servererrors.SyntaxError.copy(SyntaxError.java:48)
    at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:113)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:53)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:30)
    at com.datastax.oss.driver.internal.core.session.DefaultSession.execute(DefaultSession.java:207)
    at com.datastax.oss.driver.api.core.CqlSession.execute(CqlSession.java:47)
    at com.datastax.oss.driver.api.core.CqlSession.execute(CqlSession.java:56)

Интересно, почему это происходит.Согласно https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/ref-lexical-valid-chars.html запрос должен иметь правильный синтаксис.

Что я пробовал

Двойные кавычки

Это работает, когда я ставлю имя таблицы вдвойные кавычки (CREATE TABLE IF NOT EXISTS "77f2d6b127b7d4a89a940d0829ff1e672afb4362_status" (..., но у меня возникают проблемы с IDE базы данных IntelliJ, потому что он не запрашивает базу данных, используя двойные кавычки для имен таблиц.

Начинайте имя таблицы с буквы ([az])

Когда я добавляю перед именем таблицы вручную букву (а не число; например, a77f2d6b127b7d4a89a940d0829ff1e672afb4362_status), таблица создается, но я получаю еще одно исключение тайм-аута:

com.datastax.oss.driver.api.core.DriverTimeoutException: Query timed out after PT2S
    at com.datastax.oss.driver.api.core.DriverTimeoutException.copy(DriverTimeoutException.java:34)
    at com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures.getUninterruptibly(CompletableFutures.java:113)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:53)
    at com.datastax.oss.driver.internal.core.cql.CqlRequestSyncProcessor.process(CqlRequestSyncProcessor.java:30)
    at com.datastax.oss.driver.internal.core.session.DefaultSession.execute(DefaultSession.java:207)
    at com.datastax.oss.driver.api.core.CqlSession.execute(CqlSession.java:47)
    at com.datastax.oss.driver.api.core.CqlSession.execute(CqlSession.java:56)

Послеисключение тайм-аута я могу выполнить тот же запрос снова. На этот раз без ошибок -> таблица была успешно создана.


Я использую следующий драйвер Java: [Maven: com.datastax.oss:java-driver-core:4.0.1]

Любая помощь большечем добро пожаловать.

1 Ответ

1 голос
/ 10 июня 2019

Я думаю, что документация неверна - она ​​должна сказать:

начинается с буквенного символа и содержит буквенно-цифровой код, ...

У меня нетнашел это определение для имен таблиц / ключей в грамматике для CQL (только для имен столбцов), но оно видно в коде cqlsh .

...