2017-11-09 4 views
-1

私は以下のコードを試しましたが、動作しません。SQLでWHEREを使用して配列から何かを照会する方法

spark.sql("""SELECT categories, business_id 
FROM business_data 
WHERE categories = 'Ice Cream' 
""").show(150, truncate=False) 

配列から照会する方法が異なるようですが、わかりません。 これは私のデータのようです。

サンプルデータ:あなたはarray_containsを使用する配列のうち、何かを照会したい場合は

image

のような、

+0

こんにちは。そのタイプの値の部分を総称的に照会している場合は、タイプの列を持つのは一般的にはあまり関係のない設計です。 'categories'型が配列の場合、' where'は型が間違っていて、コンマで区切られた文字列の場合は 'where'が文字列全体を' 'ice cream ''としています。なぜあなたは異なって期待していますか?残念ながら、あなたはあまりにも非公式です、値の種類やその部分が何であるかははっきりしていません。同様に、あなたは「うまくいきません」など、あなたが望むものや期待するものについては説明していません。あなた自身をはっきりと説明してください。 [mcve]を読んで行動してください。 – philipxy

+0

PS [テキストのためにリンク/画像ではなくテキストを使用](https://meta.stackoverflow.com/a/285557/3404097) – philipxy

答えて

1

MySQLの特定: FIND_IN_SET(str,strlist)

DOCS FROM

:文字列strがNサブストリングで構成される文字列リストstrlistにある場合

はN 1の範囲の値を返します。文字列リストは、文字で区切られた部分文字列で構成される文字列です。最初の引き数が定数ストリングで、2番目の引き数がSETタイプの列である場合、FIND_IN_SET()関数はビット算術を使用するように最適化されています。 strがstrlistにない場合、またはstrlistが空文字列の場合は0を返します。いずれかの引数がNULLの場合はNULLを返します。この関数は、最初の引数にカンマ(、)文字が含まれていると正しく動作しません。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');


だからあなたの場合は...

spark.sql("""SELECT categories, business_id 
FROM business_data 
WHERE Find_In_set('Ice Cream',categories)>1 
""").show(150, truncate=False) 
1

通常ありがとう:

SELECT business_id, categories 
FROM business_data 
WHERE array_contains(categories,'Ice Cream & Frozen Yogurt') 
関連する問題