数据预览(Table.read)
Table.read() 是最简单的数据读取方 式,适用于快速预览表中少量数据,无需额外配置 Tunnel 或 Storage API 客户端。
前置条件
- 已初始化
Odps客户端对象 - 对目标表的读取列具有
select权限 - SDK 版本 >= 0.47.0-public
完整示例
- Java
- Python
import com.aliyun.odps.Odps;
import com.aliyun.odps.PartitionSpec;
import com.aliyun.odps.Table;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.RecordReader;
import java.util.Arrays;
import java.util.List;
public class TableReadExample {
public static void main(String[] args) throws Exception {
// 假设 odps 客户端已初始化
Odps odps = getOdpsClient();
// 获取表对象
Table table = odps.tables().get("my_project", "user_info");
// 示例1:基本读取,最多返回100行
RecordReader reader = table.read(100);
Record record;
while ((record = reader.read()) != null) {
System.out.println("id=" + record.get("id") + ", name=" + record.get("name"));
}
// 示例2:指定分区和列读取
PartitionSpec partition = new PartitionSpec("dt=20250101");
List<String> columns = Arrays.asList("id", "name", "age");
RecordReader partitionReader = table.read(partition, columns, 500);
while ((record = partitionReader.read()) != null) {
System.out.println("id=" + record.get("id")
+ ", name=" + record.get("name")
+ ", age=" + record.get("age"));
}
// 示例3:非分区表读取全部列
RecordReader fullReader = table.read(null, null, 1000);
while ((record = fullReader.read()) != null) {
// 处理每行数据...
}
}
}
from odps import ODPS
# 假设 odps 客户端已初始化
odps = ODPS('access_id', 'access_key', 'my_project',
endpoint='http://service.odps.aliyun.com/api')
# 获取表对象
table = odps.get_table('user_info')
# 示例1:基本读取,最多返回100行
records = table.head(100)
for record in records:
print(f"id={record['id']}, name={record['name']}")
# 示例2:指定分区和列读取
records = table.head(500, partition='dt=20250101',
columns=['id', 'name', 'age'])
for record in records:
print(f"id={record['id']}, name={record['name']}, age={record['age']}")
# 示例3:非分区表读取全部列
records = table.head(1000)
for record in records:
# 处理每行数据...
pass
代码说明
- 获取表对象:通过
odps.tables().get(projectName, tableName)获取Table实例。 - 调用 read 方法:
table.read(limit)是最简形式,仅指定最大行数;table.read(partition, columns, limit)支持指定分区和列。 - 迭代 RecordReader:循环调用
reader.read(),返回null表示读取完毕。 - 获取字段值:通过
record.get("columnName")或record.get(index)获取字段值,返回值类型参见下方类型映射表。
配置选项
| 参数 |
|---|