빠른 참조: SQL 명령용 Snowpark Java API¶
이 항목에서는 SQL 명령에 해당하는 일부 Snowpark API에 대한 빠른 참조를 제공합니다.
(이것은 SQL 명령에 해당하는 API의 전체 목록이 아닙니다.)
이 항목의 내용:
쿼리 수행하기¶
열 선택하기¶
특정 열을 선택하려면 select 를 사용합니다.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT id, name FROM sample_product_data;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSelectedCols = df.select(Functions.col("id"), Functions.col("name"));
dfSelectedCols.show();
|
열 이름 바꾸기¶
열 이름을 바꾸려면 as 또는 alias 를 사용합니다.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT id AS item_id FROM sample_product_data;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfRenamedCol = df.select(Functions.col("id").as("item_id"));
dfRenamedCol.show();
|
DataFrame df = session.table("sample_product_data");
DataFrame dfRenamedCol = df.select(Functions.col("id").alias("item_id"));
dfRenamedCol.show();
|
데이터 필터링하기¶
데이터를 필터링하려면 filter 또는 where 를 사용합니다.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT * FROM sample_product_data WHERE id = 1;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfFilteredRows = df.filter(Functions.col("id").equal_to(Functions.lit(1)));
dfFilteredRows.show();
|
DataFrame df = session.table("sample_product_data");
DataFrame dfFilteredRows = df.where(Functions.col("id").equal_to(Functions.lit(1)));
dfFilteredRows.show();
|
데이터 정렬하기¶
데이터를 정렬하려면 sort 를 사용합니다.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT * FROM sample_product_data ORDER BY category_id;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSorted = df.sort(Functions.col("category_id"));
dfSorted.show();
|
반환되는 행 수 제한하기¶
반환되는 행 수를 제한하려면 limit 를 사용합니다. DataFrame의 행 수 제한하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT * FROM sample_product_data
ORDER BY category_id LIMIT 2;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfSorted = df.sort(Functions.col("category_id")).limit(2);
Row[] arrayRows = dfSorted.collect();
|
조인 수행하기¶
조인을 수행하려면 join 또는 naturalJoin 을 사용합니다. DataFrame 조인하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT * FROM sample_a
INNER JOIN sample_b
on sample_a.id_a = sample_b.id_a;
|
DataFrame dfLhs = session.table("sample_a");
DataFrame dfRhs = session.table("sample_b");
DataFrame dfJoined =
dfLhs.join(dfRhs, dfLhs.col("id_a").equal_to(dfRhs.col("id_a")));
dfJoined.show();
|
SELECT * FROM sample_a NATURAL JOIN sample_b;
|
DataFrame dfLhs = session.table("sample_a");
DataFrame dfRhs = session.table("sample_b");
DataFrame dfJoined = dfLhs.naturalJoin(dfRhs);
dfJoined.show();
|
반정형 데이터 쿼리하기¶
반정형 데이터를 탐색하려면 subField(“<필드_이름>”) 및 subField(<인덱스>) 를 사용합니다. 반정형 데이터로 작업하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT src:salesperson.name FROM car_sales;
|
DataFrame df = session.table("car_sales");
DataFrame dfJsonField =
df.select(Functions.col("src").subField("salesperson").subField("name"));
dfJsonField.show();
|
데이터를 그룹화하고 집계하기¶
데이터를 그룹화하려면 groupBy 를 사용합니다. 그러면 집계를 수행하는 데 사용할 수 있는 RelationalGroupedDataFrame 오브젝트가 반환됩니다.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT category_id, count(*)
FROM sample_product_data GROUP BY category_id;
|
DataFrame df = session.table("sample_product_data");
DataFrame dfCountPerCategory = df.groupBy(Functions.col("category_id")).count();
dfCountPerCategory.show();
|
윈도우 함수 호출하기¶
윈도우 함수 를 호출하려면 윈도우 오브젝트 메서드를 사용하여 WindowSpec 오브젝트를 빌드합니다. 그러면 이를 윈도우 함수에 사용할 수 있습니다(‘<function> OVER … PARTITION BY … ORDER BY’ 사용과 비슷함).
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
SELECT category_id, id, SUM(amount) OVER
(PARTITION BY category_id ORDER BY product_date)
FROM sample_product_data ORDER BY product_date;
|
WindowSpec window = Window.partitionBy(
Functions.col("category_id")).orderBy(Functions.col("product_date"));
DataFrame df = session.table("sample_product_data");
DataFrame dfCumulativePrices = df.select(
Functions.col("category_id"), Functions.col("product_date"),
Functions.sum(Functions.col("amount")).over(window)).sort(Functions.col("product_date"));
dfCumulativePrices.show();
|
행 업데이트, 삭제, 병합하기¶
테이블의 행을 업데이트, 삭제, 병합하려면 Updatable 을 사용합니다. 테이블의 행 업데이트, 삭제, 병합하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
UPDATE sample_product_data
SET serial_number = 'xyz' WHERE id = 12;
|
import java.util.HashMap;
import java.util.Map;
...
Map<Column, Column> assignments = new HashMap<>();
assignments.put(Functions.col("serial_number"), Functions.lit("xyz"));
Updatable updatableDf = session.table("sample_product_data");
UpdateResult updateResult =
updatableDf.update(
assignments,
Functions.col("id").equal_to(Functions.lit(12)));
System.out.println("Number of rows updated: " + updateResult.getRowsUpdated());
|
DELETE FROM sample_product_data
WHERE category_id = 50;
|
Updatable updatableDf = session.table("sample_product_data");
DeleteResult deleteResult =
updatableDf.delete(updatableDf.col("category_id").equal_to(Functions.lit(50)));
System.out.println("Number of rows deleted: " + deleteResult.getRowsDeleted());
|
MERGE INTO target_table USING source_table
ON target_table.id = source_table.id
WHEN MATCHED THEN
UPDATE SET target_table.description =
source_table.description;
|
import java.util.HashMap;
import java.util.Map;
Map<String, Column> assignments = new HashMap<>();
assignments.put("description", source.col("description"));
MergeResult mergeResult =
target.merge(source, target.col("id").equal_to(source.col("id")))
.whenMatched.updateColumn(assignments)
.collect();
|
스테이지 작업하기¶
스테이지 작업에 대한 자세한 내용은 스테이지에서 파일 작업하기 섹션을 참조하십시오.
스테이지에서 파일 업로드 및 다운로드하기¶
스테이지에서 파일을 업로드 및 다운로드하려면 FileOperation 을 사용합니다. 스테이지에서 파일 업로드 및 다운로드하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
PUT file:///tmp/*.csv @myStage OVERWRITE = TRUE;
|
import java.util.HashMap;
import java.util.Map;
...
Map<String, String> putOptions = new HashMap<>();
putOptions.put("OVERWRITE", "TRUE");
PutResult[] putResults = session.file().put(
"file:///tmp/*.csv", "@myStage", putOptions);
for (PutResult result : putResults) {
System.out.println(result.getSourceFileName() + ": " + result.getStatus());
}
|
GET @myStage file:///tmp PATTERN = '.*.csv.gz';
|
import java.util.HashMap;
import java.util.Map;
...
Map<String, String> getOptions = new HashMap<>();
getOptions.put("PATTERN", "'.*.csv.gz'");
GetResult[] getResults = session.file().get(
"@myStage", "file:///tmp", getOptions);
for (GetResult result : getResults) {
System.out.println(result.getFileName() + ": " + result.getStatus());
}
|
스테이지의 파일에서 데이터 읽기¶
스테이지의 파일에서 데이터를 읽으려면 DataFrameReader 를 사용하여 데이터에 대한 DataFrame을 만듭니다. 스테이지의 파일에 대한 DataFrame 설정하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
CREATE FILE FORMAT snowpark_temp_format TYPE = JSON;
SELECT "$1"[0]['salesperson']['name'] FROM (
SELECT $1::VARIANT AS "$1" FROM @mystage/car_sales.json(
FILE_FORMAT => 'snowpark_temp_format')) LIMIT 10;
DROP FILE FORMAT snowpark_temp_format;
|
DataFrame df = session.read().json(
"@mystage/car_sales.json").select(
Functions.col("$1").subField(0).subField("salesperson").subField("name"));
df.show();
|
스테이지의 파일에서 테이블로 데이터 복사하기¶
스테이지의 파일에서 테이블로 데이터를 복사하려면 DataFrameReader 를 사용하여 데이터에 대한 CopyableDataFrame 을 만들고, copyInto 메서드를 사용하여 데이터를 테이블에 복사합니다. 파일에서 테이블로 데이터 복사하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
COPY INTO new_car_sales
FROM @mystage/car_sales.json
FILE_FORMAT = (TYPE = JSON);
|
CopyableDataFrame dfCopyableDf = session.read().json("@mystage/car_sales.json");
dfCopyableDf.copyInto("new_car_sales");
|
스테이지의 파일에 DataFrame 저장하기¶
스테이지의 파일에 DataFrame을 저장하려면 사용하려는 파일의 형식을 따서 명명된 DataFrameWriter 메서드를 사용하십시오. 스테이지의 파일에 DataFrame 저장하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
COPY INTO @mystage/saved_data.json
FROM ( SELECT * FROM (car_sales) )
FILE_FORMAT = ( TYPE = JSON COMPRESSION = 'none' )
OVERWRITE = TRUE
DETAILED_OUTPUT = TRUE
|
DataFrame df = session.table("car_sales");
WriteFileResult writeFileResult = df.write().mode(
SaveMode.Overwrite).option(
"DETAILED_OUTPUT", "TRUE").option(
"compression", "none").json(
"@mystage/saved_data.json");
|
사용자 정의 함수(UDF)를 만들고 호출하기¶
익명 UDF를 만들려면 Functions.udf 를 사용합니다.
이름으로 호출할 수 있는 임시 또는 영구 UDF를 만들려면 UDFRegistration.registerTemporary 또는 UDFRegistration.registerPermanent 를 사용합니다.
영구 UDF를 이름으로 호출하려면 Functions.callUDF 를 사용합니다.
자세한 내용은 Java에서 DataFrame용 사용자 정의 함수(UDF) 만들기 및 스칼라 사용자 정의 함수(UDF) 호출하기 섹션을 참조하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
CREATE FUNCTION <temp_function_name>
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
<temp_function_name>(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
Functions.udf(
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
doubleUdf.apply(Functions.col("quantity")));
dfWithDoubleNum.show();
|
CREATE FUNCTION <temp_function_name>
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
<temp_function_name>(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
session
.udf()
.registerTemporary(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType);
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
Functions.callUDF("doubleUdf", Functions.col("quantity")));
dfWithDoubleNum.show();
|
CREATE FUNCTION doubleUdf(arg1 INT)
RETURNS INT
LANGUAGE JAVA
...
AS
...;
SELECT ...,
doubleUdf(quantity) AS doublenum
FROM sample_product_data;
|
UserDefinedFunction doubleUdf =
session
.udf()
.registerPermanent(
"doubleUdf",
(Integer x) -> x + x,
DataTypes.IntegerType,
DataTypes.IntegerType,
"mystage");
DataFrame df = session.table("sample_product_data");
DataFrame dfWithDoubleNum =
df.withColumn("doubleNum",
Functions.callUDF("doubleUdf", Functions.col("quantity")));
dfWithDoubleNum.show();
|
저장 프로시저 만들기 및 호출하기¶
Snowpark를 사용하여 저장 프로시저를 만드는 방법에 대한 안내는 Java로 DataFrames용 저장 프로시저 만들기 섹션을 참조하십시오.
익명 또는 명명된 임시 프로시저를 만들려면 com.snowflake.snowpark_java.SProcRegistration 의
registerTemporary
메서드를 사용하십시오.명명된 영구 프로시저를 만들려면 com.snowflake.snowpark_java.SProcRegistration 클래스의
registerPermanent
메서드를 사용하십시오.프로시저를 호출하려면 com.snowflake.snowpark_java.Session 클래스의
storedProcedure
메서드를 사용하십시오.
SQL 문의 예 |
Snowpark 코드의 예 |
---|---|
CREATE PROCEDURE <temp_procedure_name>(x INTEGER, y INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + y;
END
$$
;
CALL <temp_procedure_name>(2, 3);
|
StoredProcedure sp =
session.sproc().registerTemporary((Session session, Integer x, Integer y) -> x + y,
new DataType[] {DataTypes.IntegerType, DataTypes.IntegerType},
DataTypes.IntegerType);
session.storedProcedure(sp, 2, 3).show();
|
CREATE PROCEDURE sproc(x INTEGER, y INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + y;
END
$$
;
CALL sproc(2, 3);
|
String name = "sproc";
StoredProcedure sp =
session.sproc().registerTemporary(name,
(Session session, Integer x, Integer y) -> x + y,
new DataType[] {DataTypes.IntegerType, DataTypes.IntegerType},
DataTypes.IntegerType);
session.storedProcedure(name, 2, 3).show();
|
CREATE PROCEDURE add_hundred(x INTEGER)
RETURNS INTEGER
LANGUAGE JAVA
...
AS
$$
BEGIN
RETURN x + 100;
END
$$
;
CALL add_hundred(3);
|
String name = "add_hundred";
String stageName = "sproc_libs";
StoredProcedure sp =
session.sproc().registerPermanent(
name,
(Session session, Integer x) -> x + 100,
DataTypes.IntegerType,
DataTypes.IntegerType,
stageName,
true);
session.storedProcedure(name, 3).show();
|