스파크 SQL을 사용해서 다음과 같은 작업을 수행할 수 있음
스파크 SQL은 DataFrame과 Dataset API에 통합되어 있음
스파크 2.0 버전에는 하이브를 지원할 수 있는 상위 호환 기능으로 ANSI-SQL과 HiveQL을 모두 지원하는 자체 개발 파서가 포함됨
스파크 SQL은 DataFrame과의 뛰어난 호환성 덕분에 다양한 기업에서 강력한 기능으로 자리매김할 것임
스파크 SQL은 OLTP가 아닌 OLAP DB로 동작함
스파크 SQL CLI(Command Line Interface)
로컬 환경의 명령행에서 기본 스파크 SQL 쿼리를 실행할 수 있는 편리한 도구
쓰리프트 JDBC서버와 통신 불가능
사용하려면 스파크 디렉터리에서 다음 명령을 실행
spark.sql("SELECT 1+1").show()
+-------+
(1 + 1)|
+-------+
2|
+-------+
path= "/FileStore/tables/2010_summary.json"
spark.read.json(path).createOrReplaceTempView('some_sql_view')#DataFrame을 SQL에서 사용할 수 있도록 뷰 등록
spark.sql("select dest_country_name,sum(count) from some_sql_view group by dest_country_name")\
.where("dest_country_name like 'S%'").where("'sum(count)' > 10") #SQL 결과를 DataFrame으로 반환
spark.sql("create table flights (dest_country_name string, origin_country_name string, count long) \
using json options (path '/FileStore/tables/2010_summary.json')") ```
```python
Out[6]: DataFrame[]
#/FileStore/tables/flight-data-hive에 있는 데이터 파일의 내용을 기반으로 외부 테이블 생성
spark.sql('create external table hive_flights\
(dest_country_name string, origin_country_name string, count long)\
row format delimited fields terminated by "," location "/FileStore/tables/flight-data-hive/"') ```
```python
Out[9]: DataFrame[]
spark.sql('describe table flights')
Out[17]: DataFrame[col_name: string, data_type: string, comment: string]
spark.sql("drop table if exists flights_csv")
Out[19]: DataFrame[]
spark.sql("create view just_usa_view as select * from flights where dest_country_name = 'united states'")
Out[60]: DataFrame[]
#등록되지 않고 현재 세션에만 사용할 수 있는 임시 뷰 생성
spark.sql("create temp view just_usa_view as select * from flights where dest_country_name = 'united states'")
Out[61]: DataFrame[]
#전역적 임시 뷰 생성
spark.sql("create global temp view just_usa_view as select * from flights where dest_country_name = 'united states'")
Out[62]: DataFrame[]
spark.sql('show tables').show()
+--------+-------------+-----------+
database| tableName|isTemporary|
+--------+-------------+-----------+
default| flights| false|
default| hive_flights| false|
default|just_usa_view| false|
default| nested_data| false|
|just_usa_view| true|
+--------+-------------+-----------+
spark.sql("drop view if exists just_usa_view")
Out[67]: DataFrame[]
spark.sql('show databases').show()
+------------+
databaseName|
+------------+
default|
+------------+
spark.sql('create database some_db')
Out[33]: DataFrame[]
spark.sql('show databases').show()
+------------+
databaseName|
+------------+
default|
some_db|
+------------+
#현재 어떤 디비를 사용 중인지 확인
spark.sql('select current_database()').show()
+------------------+
current_database()|
+------------------+
default|
+------------------+
spark.sql('use some_db')
Out[36]: DataFrame[]
#현재 어떤 디비를 사용 중인지 확인
spark.sql('select current_database()').show()
+------------------+
current_database()|
+------------------+
some_db|
+------------------+
#기본 디비로 돌아갈 수 있음
spark.sql('use default')
Out[39]: DataFrame[]
#현재 어떤 디비를 사용 중인지 확인
spark.sql('select current_database()').show()
+------------------+
current_database()|
+------------------+
default|
+------------------+
spark.sql('drop database if exists some_db')
Out[41]: DataFrame[]
spark.sql('show databases').show()
+------------+
databaseName|
+------------+
default|
+------------+
spark.sql("create view if not exists nested_data as select (dest_country_name, origin_country_name) as country, count from flights")
Out[29]: DataFrame[]
# 스파크 SQL이 제공하는 전체 함수 목록
spark.sql('show functions').show(10)
```python
+--------+
function|
+--------+
!|
%|
&|
*|
+|
-|
/|
<|
<=|
<=>|
+--------+
only showing top 10 rows
# 스파크에 내장된 시스템 함수 목록
spark.sql('show system functions').show(10)
+--------+
function|
+--------+
!|
%|
&|
*|
+|
-|
/|
<|
<=|
<=>|
+--------+
only showing top 10 rows
# 사용자 정의 함수 목록
spark.sql('show user functions').show(10)
+--------+
function|
+--------+
+--------+
#와일드 카드 문자(*)가 포함된 문자열을 사용하여 결과 필터링 가능
#'s'로 시작하는 모든 함수 필터링
spark.sql('show functions "s*"').show(10)
+------------------+
function|
+------------------+
schema_of_json|
second|
sentences|
sequence|
sha|
sha1|
sha2|
shiftleft|
shiftright|
shiftrightunsigned|
+------------------+
only showing top 10 rows