복붙노트

[HADOOP] JSON 데이터에서 HIVE 테이블을 어떻게 만들 수 있습니까?

HADOOP

JSON 데이터에서 HIVE 테이블을 어떻게 만들 수 있습니까?

일부 JSON 데이터 (중첩)에서 하이브 테이블을 만들고 쿼리를 실행하고 싶습니다. 이것은 가능한가?

지금까지 JSON 파일을 S3에 업로드하고 EMR 인스턴스를 시작했지만 JSON 파일을 하이브 테이블로 가져 오려면 하이브 콘솔에 입력 할 내용을 모르겠습니다.

누구든지 나를 시작하게하는 몇 가지 예제 명령이 있습니까, 나는 Google에서 유용한 것을 찾을 수 없습니다 ...

해결법

  1. ==============================

    1.Hive가 JSON을 테이블의 열에 매핑하려면 JSON serde를 사용해야합니다.

    Hive가 JSON을 테이블의 열에 매핑하려면 JSON serde를 사용해야합니다.

    어떻게 좋은지 보여주는 좋은 예가 여기에 있습니다.

    http://aws.amazon.com/articles/2855

    불행히도 제공된 JSON serde는 중첩 된 JSON을 잘 처리하지 않으므로 사용하기 위해 JSON을 병합해야 할 수도 있습니다.

    다음은이 기사의 올바른 구문 예입니다.

    create external table impressions (
        requestBeginTime string, requestEndTime string, hostname string
      )
      partitioned by (
        dt string
      )
      row format 
        serde 'com.amazon.elasticmapreduce.JsonSerde'
        with serdeproperties ( 
          'paths'='requestBeginTime, requestEndTime, hostname'
        )
      location 's3://my.bucket/' ;
    
  2. ==============================

    2.실제로 JSON SerDe를 사용할 필요는 없습니다. 훌륭한 블로그 게시물이 있습니다. (나는 어떤 식 으로든 저자와 제휴하지 않았습니다.)

    실제로 JSON SerDe를 사용할 필요는 없습니다. 훌륭한 블로그 게시물이 있습니다. (나는 어떤 식 으로든 저자와 제휴하지 않았습니다.)

    http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/

    쿼리의 시간에 json을 파싱하기 위해 내장 함수 json_tuple을 사용하는 전략의 개요 (테이블 정의 당시가 아님) :

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple

    기본적으로 테이블 스키마는 각 행을 단일 '문자열'열로로드 한 다음 필요에 따라 쿼리별로 관련 json 필드를 추출하기 만하면됩니다. 예 : 그 블로그 게시물의이 쿼리 :

    SELECT b.blogID, c.email FROM comments a LATERAL VIEW json_tuple(a.value, 'blogID', 'contact') b 
    AS blogID, contact  LATERAL VIEW json_tuple(b.contact, 'email', 'website') c 
    AS email, website WHERE b.blogID='64FY4D0B28';
    

    저의 겸손한 경험에 비추어 볼 때 이것은 더욱 안정적입니다 (특히 중첩 된 객체를 사용하여 JSON serdes를 처리하는 다양한 비밀스러운 문제가 발생했습니다).

  3. ==============================

    3.난 그냥 똑같은 문제를 해결해야했고, 아직 JSON SerDes에 연결된 것 중 아무 것도 충분하지 않게 보였다. 아마존은 좋을지 모르지만 어디서나 소스를 찾을 수는 없습니다 (링크가있는 사람이 있습니까?).

    난 그냥 똑같은 문제를 해결해야했고, 아직 JSON SerDes에 연결된 것 중 아무 것도 충분하지 않게 보였다. 아마존은 좋을지 모르지만 어디서나 소스를 찾을 수는 없습니다 (링크가있는 사람이 있습니까?).

    HCatalog는 JsonSerDe에 내장되어 있습니다. 실제로 다른 곳에서는 HCatalog를 사용하지는 않지만 저에게 도움이됩니다.

    https://github.com/apache/hcatalog/blob/branch-0.5/core/src/main/java/org/apache/hcatalog/data/JsonSerDe.java

    HCatalog의 JsonSerDe를 사용하려면 Hiberal-core .jar를 Hive의 auxpath에 추가하고 하이브 테이블을 생성하십시오 :

    $ hive --auxpath /path/to/hcatalog-core.jar
    
    hive (default)>
    create table my_table(...)
    ROW FORMAT SERDE
      'org.apache.hcatalog.data.JsonSerDe'
    ...
    ;
    

    나는 여기에 자세한 내용과 함께 게시물을 썼다.

    http://ottomata.org/tech/too-many-hive-json-serdes/

  4. ==============================

    4.hcatalog-core의 Hive 0.12 이상에는 JSON 데이터를 직렬화 및 비 직렬화하는 JsonSerDe가 있습니다. 따라서 다음 예제와 같이 외부 테이블을 작성하면됩니다.

    hcatalog-core의 Hive 0.12 이상에는 JSON 데이터를 직렬화 및 비 직렬화하는 JsonSerDe가 있습니다. 따라서 다음 예제와 같이 외부 테이블을 작성하면됩니다.

    CREATE EXTERNAL TABLE json_table (
        username string,
        tweet string,
        timestamp long)
    ROW FORMAT SERDE
    'org.apache.hive.hcatalog.data.JsonSerDe'
    STORED AS TEXTFILE
    LOCATION
     'hdfs://data/some-folder-in-hdfs'
    

    해당 json 데이터 파일은 다음 예제와 같아야합니다.

    {"username":"miguno","tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 }
    {"username":"BlizzardCS","tweet":"Works as intended.  Terran is IMBA.","timestamp": 1366154481 }
    
  5. ==============================

    5..json 파일이 큰 경우 손으로 스키마를 작성하는 것이 지루할 수 있습니다. 그렇다면이 편리한 도구를 사용하여 자동으로 생성 할 수 있습니다.

    .json 파일이 큰 경우 손으로 스키마를 작성하는 것이 지루할 수 있습니다. 그렇다면이 편리한 도구를 사용하여 자동으로 생성 할 수 있습니다.

    https://github.com/strelec/hive-serde-schema-gen

  6. ==============================

    6.JSON 프로세싱 기능은 이제 Hive에서 즉시 사용할 수 있습니다.

    JSON 프로세싱 기능은 이제 Hive에서 즉시 사용할 수 있습니다.

    CREATE TABLE ... STORED AS JSONFILE
    

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-StorageFormatsStorageFormatsRowFormat,StorageFormat,andSerDe

    각 JSON 객체는 한 행에 맞게 병합되어야합니다 (개행 문자는 지원되지 않음). 이 객체는 정식 JSON 배열의 일부가 아닙니다.

    {"firstName":"John","lastName":"Smith","Age":21}
    {"firstName":"Jane","lastName":"Harding","Age":18}
    
  7. from https://stackoverflow.com/questions/11479247/how-do-you-make-a-hive-table-out-of-json-data by cc-by-sa and MIT license