2011-08-03 8 views
1

私は活発に使用しました。 cassandra列ファミリは自動的にHiveテーブルにマップされます。
ただし、データ型が列ファミリでtimeuuidの場合、Hiveテーブルではデータ型が読み取れません。盛んなカサンドラTimeUUIDType

たとえば、次のコマンドを使用して、列ファミリをマップする外部表を作成します。

Hive > create external table A (rowkey string, column_name string, value string) 
    > STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler' 
    > WITH SERDEPROPERTIES (
    > "cassandra.columns.mapping" = ":key,:column,:value"); 

カラム名がcassandraのTimeUUIDTypeの場合、Hiveテーブルでは読み取り不可能になります。例えば

、カサンドラの列ファミリ内の行は次のようになります。

列名がTimeUUIDTypeある
RowKey: 2d36a254bb04272b120aaf79d70a3578 
     => (column=29139210-b6dc-11df-8c64-f315e3a329d6, value={"event_id":101},timestamp=1283464254261) 

。ハイブテーブルで

、それは次の行のようになります。

2d36a254bb04272b120aaf79d70a3578 t��ߒ4��!�� {"event_id":101} 

ので、列名がハイブテーブルに読み取ることができません。

+0

ここからレンダリングを取得していますか?たとえHiveツールがtimeuuidを人間が読める文字列に変換する方法を知らないとしても、それをうまく照会できるはずです。 – jbellis

+0

cassandraのレコードについては、cassandraのコンソールから取得します。ハイブレコードの場合は、ハイブコンソールからレンダリングを取得します。 – chnet

+1

読み取り不可能な列名を照会できませんでした。たとえば、In Hiveでは、 'select * from table a where column_name = '29139210-b6dc-11df-8c64-f315e3a329d6'を使用します。マッパー/リダクションジョブが始まりますが、私は自分が望む行を得られません。それは何も返さない。 – chnet

答えて

2

これは自動テーブルマッピングに関する既知の問題です。 timeUUIDTypeで最良の結果を得るために、自動マッピングを回し$のbrisk_home /リソース/ハイブ/ハイブ-site.xmlの中でオフ機能: 「cassandra.autoCreateHiveSchema」

と手動ハイブにテーブルを作成します。

+0

私は自動マッピング機能をオフにしました。しかし、私は私の質問で手動で外部テーブルを作成するためにコマンドを使用しました。これは 'STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler''と' SERDEPROPERTIES'を使ってマップします。 TimeUUIDTypeはまだ読み取れません。 – chnet

+1

私の謝罪 - ハイブの表示面にも問題があることが確認されました。これは、ハイブが特定のタイプの表示をどのように処理し、どのようにしてcassandraから戻ってくるデータからコンバージョンを処理するかに関係します。私たちは積極的に両サイドから作業を進めています。サイドとハイブサイドを自動変換しますが、最初は思っていたよりもやっかいです。しかし、それを持っていただきありがとうございます。豚はこれらのタイプで正しく動作します。 – zznate