Создать таблицу кустов с дефисом (-) в имени таблицы - PullRequest
1 голос
/ 07 января 2020

Мне нужно создать таблицу в Hive (v-1.2.2) с дефисом (-) в имени таблицы.

Чтение куста документации , я попытался округлить имя таблицы с помощью обратных кавычек (`), и это не удалось.

Запрос выполнен

CREATE EXTERNAL TABLE `kpisample_MarkContent_db786910-bd59-11e7-8329-9f28c9dd3095` STORED AS AVRO LOCATION '/prod/kpisample/dataset=0c253b00-2f04-11e6-ae13-d90f2a2beea0/KPI_id=MarkContent/year=2019/month=11/day=18/hour=4/' TBLPROPERTIES ('avro.schema.url'='/prod/schemas/kpisample/dataset=0c253b00-2f04-11e6-ae13-d90f2a2beea0/KPI_id=MarkContent/kpisetting_MarkContent.avsc');

Сообщение об ошибке

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.ql.metadata.HiveException: [kpisample_MarkContent_db786910-bd59-11e7-8329-9f28c9dd3095]: is not a valid table name

Есть ли способ сделать это?

Благодарим вас за помощь .

1 Ответ

0 голосов
/ 08 января 2020

На самом деле, имя таблицы, содержащее -, недопустимо.
Исходный код, взятый из org.apache.hadoop.hive.metastore.MetaStoreUtils, показывает, что только символов , чисел и подчеркивания * В именах таблиц допускается 1009 *:

/**
   * validateName
   *
   * Checks the name conforms to our standars which are: "[a-zA-z_0-9]+". checks
   * this is just characters and numbers and _
   * ...
   */
  static public boolean validateName(String name) {
    Pattern tpat = Pattern.compile("[\\w_]+");
    Matcher m = tpat.matcher(name);
    if (m.matches()) {
      return true;
    }
    return false;
  }
...