
# CALL COMMAND语法使用说明
CALL语句仅在Spark中使用Iceberg SQL扩展时可用。
#### 前提条件
- 在Spark中使用Iceberg前，需先配置Spark目录，目录配置请参见[Iceberg Catalog配置](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_300918.html#mrs_01_300918)。
- 执行CALL语句前，需已存在Iceberg表，可执行以下操作创建表并插入数据（如果已存在请跳过该操作）：
  1. 执行以下命令创建表：
     ```
     CREATE TABLE prod.db.sample ( id bigint, data string, category string, ts timestamp) USING iceberg PARTITIONED BY (bucket(16, id), days(ts), category);
     ```
     
  
  2. 执行以下命令向表中插入数据：
     - 示例一：
       ```
       INSERT INTO prod.db.sample VALUES (1, 'data_001', 'electronics', TIMESTAMP '2026-01-20 10:15:30');
       ```
       
     
     - 示例二：
       ```
       INSERT INTO prod.db.sample VALUES (2, 'data_002', 'clothing', TIMESTAMP '2026-01-20 14:20:45');
       ```
       
     
     - 示例三：
       ```
       INSERT INTO prod.db.sample VALUES (3, 'data_003', 'food', TIMESTAMP '2026-01-21 09:05:15');
       ```
       
      
  
  3. 执行以下命令查看表数据：
     ```
     select * from prod.db.sample;
     ```
     
  
  4. 执行以下命令查看快照ID：
     ```
     select * from prod.db.sample.snapshots;
     ```
     
   
 
#### 使用方法
可通过**CALL**语句从任何已配置的Iceberg Catalog中调用表服务，所有表服务均位于system命名空间下。
**CALL**支持按名称传递参数（推荐方式）或按位置传递参数，不支持混合使用位置参数和命名参数。
- 命名参数 所有存储过程参数都有名称。按名称传递参数时，参数顺序可以任意，且任何可选参数都可省略。
  ```
  CALL prod.system.{表服务名} (arg_name_2 => 'arg_2_value', arg_name_1 => 'arg_1_value');
  ```
  
- 位置参数
  按位置传递参数时，仅当末尾的参数为可选参数时，才可省略。
  ```
  CALL prod.system.{表服务名} ('arg_1', 'arg_2', ... 'arg_n');
  ```
  
 
