Добавить данные во внешнюю таблицу Hive

Я следую руководству по потоковой передаче данных из Amazon Kinesis в Hive на Amazon EMR. Мне удалось сделать это с внутренней таблицей Hive, но когда я пытаюсь сделать то же самое с внешней таблицей, я сталкиваюсь со странной ошибкой EOF. Раньше я не использовал STORED BY и STORED AS вместе, и я думаю, что это может быть проблемой. Я использовал руководство IBM (http://www-01.ibm.com/support/knowledgecenter/SSPT3X_2.1.1/com.ibm.swg.im.infosphere.biginsights.bigsql.doc/doc/bsql_create_table.html), чтобы убедиться, что их можно использовать вместе.

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

DROP TABLE apachelog;

CREATE EXTERNAL TABLE apachelog (
  host STRING,
  IDENTITY STRING,
  USER STRING,
  TIME STRING,
  request STRING,
  STATUS STRING,
  SIZE STRING,
  referrer STRING,
  agent STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") ([0-9]*) ([0-9]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\")"
)
STORED AS TEXTFILE
STORED BY
'com.amazon.emr.kinesis.hive.KinesisStorageHandler'
TBLPROPERTIES("kinesis.stream.name"="AccessLogStream")
LOCATION 's3://<bucket-name>/AccessLogStreamOP/';

И вот ошибка:

hive> source create_access_log.hql;
OK
Time taken: 0.464 seconds
FAILED: ParseException line 19:0 missing EOF at 'STORED' near 'TEXTFILE'

person user3277217    schedule 02.10.2014    source источник


Ответы (1)


В соответствии с Hive LanguageManual DDL.

  [
    [ROW FORMAT row_format] [STORED AS file_format]
    | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  
  ]

вы можете использовать предложение ROW FORMAT или STORED BY, а WITH SERDEPROPERTIES следует за STORED BY

person Alex Dvoretsky    schedule 02.10.2014