Создание таблицы AWS Athena завершается неудачно, «на входе« создать внешнюю »нет реальной альтернативы» - PullRequest
0 голосов
/ 06 ноября 2018

Это моя первая попытка с Афиной, пожалуйста, будьте осторожны:)

Этот запрос не завершается с ошибкой -> Нет приемлемой альтернативы

    CREATE EXTERNAL TABLE IF NOT EXISTS dev.mytokendata (
             'dateandtime' timestamp, 'requestid' string, 
 'ip' string, 'caller' string, 'token' string, 'requesttime' int, 
 'httpmethod' string, 'resourcepath' string, 'status' smallint, 
 'protocol' string, 'responselength' int ) 
    ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'
    WITH SERDEPROPERTIES ( 
    'input.format'='%{TIMESTAMP_ISO8601:dateandtime}
      \s+\{\"requestId\":\s+\"%{USERNAME:requestid}\",
      \s+\"ip\":\s+\"%{IP:ip}\",
      \s+\"caller\":\s+\"%{USERNAME:caller}\",
      \s+\"token\":\s+\"%{USERNAME:token}\",
      \s+\"requestTime\":\s+\"%{INT:requesttime}\",
      \s+\"httpMethod\":\s+\"%{WORD:httpmethod}\",
      \s+\"resourcePath\":\s+\"%{UNIXPATH:resourcepath}\",
      \s+\"status\":\s+\"%{INT:status}\",
      \s+\"protocol\":\s+\"%{UNIXPATH:protocol}\",
      \s+\"responseLength:\"\s+\"%{INT:responselength}\"\s+\}' ) 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 's3://athena-abc/1234/' 
TBLPROPERTIES ('has_encrypted_data'='false', 'compressionType'='gzip');

Это строка из файла журнала, которую я пытаюсь проанализировать (файл .gz)

2018-07-30T02:23:34.134Z { "requestId":
"810000-9100-1100-a100-f100000", "ip": "01.01.01.001", "caller": "-", 
"token": "1234-5678-78910-abcd", "requestTime": 
 "1002917414000", "httpMethod": "POST", "resourcePath": 
 "/MyApp/v1.0/MyService.wsdl", 
 "status": "200", "protocol": "HTTP/1.1", "responseLength": "1000" }

Может кто-нибудь указать, что может быть не так? Это было бы очень полезно

1 Ответ

0 голосов
/ 06 ноября 2018

Вы использовали ненужные апострофы в именах столбцов, а также была проблема с escape-символами.

Правильная версия:

 CREATE EXTERNAL TABLE mytokendata (
 `dateandtime` timestamp,
`requestid` string, 
`ip` string,
`caller` string, 
`token` string,
`requesttime` int,  
`httpmethod` string,
`resourcepath` string,
`status` smallint,  
`protocol` string,
`responselength` int ) 
ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'
WITH SERDEPROPERTIES ( 
'input.format'='%{TIMESTAMP_ISO8601:dateandtime}
  \\s+\\{\"requestId\":\\s+\"%{USERNAME:requestid}\",
  \\s+\"ip\":\\s+\"%{IP:ip}\",
  \\s+\"caller\":\\s+\"%{USERNAME:caller}\",
  \\s+\"token\":\\s+\"%{USERNAME:token}\",
  \\s+\"requestTime\":\\s+\"%{INT:requesttime}\",
  \\s+\"httpMethod\":\\s+\"%{WORD:httpmethod}\",
  \\s+\"resourcePath\":\\s+\"%{UNIXPATH:resourcepath}\",
  \\s+\"status\":\\s+\"%{INT:status}\",
  \\s+\"protocol\":\\s+\"%{UNIXPATH:protocol}\",
  \\s+\"responseLength:\"\\s+\"%{INT:responselength}\"\\s+\\}' ) 
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 's3://athena-abc/1234/'  
TBLPROPERTIES ('has_encrypted_data'='false', 'compressionType'='gzip');
...