1

ハイブに保存されたファイル:

[
  {
    "occupation": "guitarist",
    "fav_game": "football",
    "name": "d1"
  },
  {
    "occupation": "dancer",
    "fav_game": "chess",
    "name": "k1"
  },
  {
    "occupation": "traveller",
    "fav_game": "cricket",
    "name": "p1"
  },
  {
    "occupation": "drummer",
    "fav_game": "archery",
    "name": "d2"
  },
  {
    "occupation": "farmer",
    "fav_game": "cricket",
    "name": "k2"
  },
  {
    "occupation": "singer",
    "fav_game": "football",
    "name": "s1"
  }
]

Hadoop の CSV ファイル:

name,age,city
d1,23,delhi
k1,23,indore
p1,23,blore
d2,25,delhi
k2,30,delhi
s1,25,delhi

個別に問い合わせたところ、問題なく動作しています。次に、結合クエリを試しました:

select * from hdfs.`/demo/distribution.csv` d join hive.demo.`user_details` u on d.name = u.name

次の問題が発生しました。

org.apache.drill.common.exceptions.UserRemoteException: システム エラー: DrillRuntimeException: Join は、1. 数値データ 2. Varchar、Varbinary データ 3. 日付、タイムスタンプ データ間の暗黙的なキャストのみをサポートします。左の型: INT、右の型: VARCHAR。このエラーを回避するには、明示的なキャストを追加してください

4

2 に答える 2

0

デフォルトでは varchar を使用していますが、キャストする必要があります。これを試して:

select * from hdfs.`/demo/distribution.csv` d join hive.demo.`user_details` u on cast(d.name as VARCHAR) = cast(u.name as VARCHAR)

ただし、csv から直接列名を参照することはできません。名前の列[0]を考慮する必要があります。

于 2016-10-15T16:54:54.903 に答える
0

これを参照してください https://drill.apache.org/docs/data-type-conversion/この ようなシナリオに対処するには、明示的な型キャストを行う必要があります。

JSON ファイル employee.json と csv ファイル sample.csv があるとします。両方を同時にクエリするには、1 つのクエリで型キャストを行う必要があります。

0: jdbc:drill:zk=local> select emp.employee_id, dept.department_description, phy.columns[2], phy.columns[3] FROM cp.`employee.json` emp , cp.`department.json` dept, dfs.`/tmp/sample.csv` phy where CAST(emp.employee_id AS INT) =  CAST(phy.columns[0] AS INT) and emp.department_id = dept.department_id;

ここでは、CAST(emp.employee_id AS INT) = CAST(phy.columns[0] AS INT)を型キャストして、等価性が失われないようにしています。

詳細については、これを参照してください:- http://www.devinline.com/2015/11/apache-drill-setup-and-SQL-query-execution.html#multiple_src

于 2015-11-21T08:34:06.000 に答える