2017-11-06 19 views
1

2つのシート(csv)が存在するシナリオがあります。それに対して2つのテーブルを作成しました。 良いデータがあると、2番目のテーブルの値(ID統計値)でマップできます。私が悪いデータを持っているならば、私はそれをid統計値でもう一度マップしなければなりません(ただし値は異なります)。しかし、私はspark SQLには存在しません。そして、私は以下のエラーを受け取ります:SPARK SQLが存在しないか存在しない

期待通りの 'from'期待値{、 'WHERE'、 'GROUP'、 'ORDER'、 'HAVING'、 'LIMIT'、 'LATERAL'、 'WINDOW'、 'UNION' 、 'INTERSECT'、 'ソート'、 'C​​LUSTER' 'を除き'、 'DISTRIBUTE'}(行1、POS 386)

at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:197) 
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:99) 
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:45) 

CODE:

select 
    a.ptf_id,a.ptf_code,a.share_id,a.share_code,a.bench_id,a.bench_code 
    , a.l1_calculation_date,a.l1_begin_date,a.l1_end_date,a.l1_running_date 
    , a.l1_frequency,a.l1_calculation_step,a.l1_performance_currency 
    , a.l1_configuration,a.l1_valuation_source,a.l1_nav_valuation_type 
    , a.l1_setting_reference_type, a.l1_setting_valuation_type 
    , a.l1_sharpe_ratio_annualized as value,b.id_statistic 
from 
    parquetFile a, 
    pairRDD b, 
    stats c 
where 
    a.l1_nav_valuation_type= b.l1_nav_valuation_type 
    and a.l1_valuation_source = b.l1_valuation_source 
    and b.l1_Perf = 'l1_sharpe_ratio_annualized' 
    OR (a.ptf_id not EXISTS (
     select e.ptf_id from pairRDD d, parquetFile e 
     where d.l1_valuation_source = e.l1_valuation_source 
     AND d.l1_nav_valuation_type = e.l1_nav_valuation_type) 
    and b.l1_valuation_source ='') 

このクエリ作品SQLで "NOT IN"を使用する場合 このシーンで使用する他のオプションについて教えてくださいアリオ以外には存在しない。

+0

1つのオプションは外部結合を使用することです。あなたの質問は率直に少し読みにくいですが、私はあなたが結合を使ってそれを変換することができるはずだと思います。がんばろう。 – lrnzcig

答えて

0

クエリは、と書かれているように少し難しいです。 テーブルテーブルの目的は何も選択していないので、あなたの意図は何であるかは明らかではありません(とにかく私には分かりません)。明らかに私はこれを自分で試したことはありませんが、一見すると次のようなものを試してみるかもしれません:

select 
    a.PTF_ID, 
    a.PTF_CODE, 
    a.SHARE_ID, 
    a.SHARE_CODE, 
    a.BENCH_ID, 
    a.BENCH_CODE, 
    a.L1_CALCULATION_DATE, 
    a.L1_BEGIN_DATE, 
    a.L1_END_DATE, 
    a.L1_RUNNING_DATE, 
    a.L1_FREQUENCY, 
    a.L1_CALCULATION_STEP, 
    a.L1_PERFORMANCE_CURRENCY, 
    a.L1_CONFIGURATION, 
    a.L1_VALUATION_SOURCE, 
    a.L1_NAV_VALUATION_TYPE, 
    a.L1_SETTING_REFERENCE_TYPE, 
    a.L1_SETTING_VALUATION_TYPE, 
    a.L1_SHARPE_RATIO_ANNUALIZED as VALUE, 
    b.ID_STATISTIC 
from 
    PARQUETFILE a 
inner join 
    PAIRRDD b 
on 
    a.L1_NAV_VALUATION_TYPE = b.L1_NAV_VALUATION_TYPE and 
    a.L1_VALUATION_SOURCE = b.L1_VALUATION_SOURCE 
left outer join (
    select 
     e.PTF_ID 
    from 
     PAIRRDD d 
    inner join 
     PARQUETFILE e 
    on 
     d.L1_VALUATION_SOURCE = e.L1_VALUATION_SOURCE AND 
     d.L1_NAV_VALUATION_TYPE = e.L1_NAV_VALUATION_TYPE 
    where 
     b.L1_VALUATION_SOURCE = '' 
    ) x 
on 
    a.PTF_ID = x.PTF_ID 
where 
    b.L1_PERF = 'l1_sharpe_ratio_annualized' or 
    x.PTF_ID is null 
+0

ありがとう@dgg。それは私の目的を解決しました。さらに、要件のロジックを追加しました。いずれかが同じ問題に直面し、助けが必要な場合。 Plsは私に知らせる。 – Ans8

+0

こんにちは@Ans8 - それは助けてうれしいです。この質問に_answered_と記入しますか? – dgg

関連する問題