Please note that this is far from production ready, it is still under active development
required >= go1.15
go get github.com/aliyun/aliyun-odps-go-sdk
go sql/driver 接口的odps实现
[x] project
[x] table
[x] instance
[x] tunnel
[x] table tunnel
[x] table protoc tunnel
[x] table stream tunnel
[ ] resource
[ ] function
执行sql语句的方法有
使用任何一种方法可以执行sql的方法执行sql语句即可,sql语句示例如下
alter table user_test add partition (age=20, hometown='hangzhou');
插入数据时,如果只是插入很少量数据,可以使用insert sql语句,如果插入的数量较大,则需使用tunnel上传数据。
插入数据用任何一种执行sql语句的方法都可以,但是建议使用go sql, go sql支持named args, 使构造sql语句更简单。
此外建议使用data.Array,data.Struct, data.Datetime等类型表示要插入的值,这些类型可以直接使用Sql()方法获取相应类型的常量或构造方法。
如:
datetime 类型的"2021-12-18 11:11:00" 返回"datetime'2021-12-18 11:11:00'"。
array
简单的上传过程为
在上传数据量较大时,可以用一批block ids创建多个record writer, 用这些writer并行写入数据。这时,再commit的时候,要传入这批block ids。 示例代码
odps sdk中的data package定义了与odps数据类型对应的数据结构,两者之间的对应关系为
odps go sdk | odps |
---|---|
Bool | boolean |
TinyInt | tinyint |
Int | int |
SmallInt | smallint |
BigInt | bigint |
Float | float |
Double | double |
String | string |
Binary | binary |
Char | char |
VarChar | varchar |
Decimal | decimal |
Date | date |
DateTime | datetime |
TimeStamp | timestamp |
Array | array |
Map | map |
Struct | struct |
通过sql driver获取到的数据类型与odps数据类型的对应关系如下 | odps 列类型 | not nullable | nullable |
---|---|---|---|
bigint | int64 | odps/sqldriver.NullInt64 | |
int | int | odps/sqldriver.NullInt32 | |
smallint | int16 | odps/sqldriver.NullInt16 | |
tinyint | int8 | odps/sqldriver.NullInt8 | |
double | float64 | odps/sqldriver.NullFloat64 | |
float | float32 | odps/sqldriver.NullFloat32 | |
string | string | odps/sqldriver.NullString | |
boolean | bool | odps/sqldriver.NullBool | |
char | string | odps/sqldriver.NullString | |
varchar | string | odps/sqldriver.NullString | |
datetime | time.Time | odps/sqldriver.NullDateTime | |
date | time.Time | odps/sqldriver.NullDate | |
timestamp | time.Time | odps/sqldriver.NullTimestamp | |
binary | odps/sqldriver.Binary | odps/sqldriver.Binary | |
decimal | odps/sqldriver.Decimal | odps/sqldriver.Decimal | |
map | odps/sqldriver.Map | odps/sqldriver.Map | |
array | odps/sqldriver.Array | odps/sqldriver.Array | |
struct | odps/sqldriver.Struct | odps/sqldriver.Struct |
使用instance执行select语句后, 可以
这种方式是建议使用的执行select并获取结果的方法。go sql使用instance tunnel获取select结果。需要注意的是,Query方法返回Rows,Row需要调用scan方法提取各个字段。 示例代码1 示例代码2
odps tunnel支持以protoc(自定义)格式下载数据.
简单的下载过程如下:
使用protoc格式下载数据时, 获取的record中的字段类型为odps go sdk数据类型 示例代码
相应的操作可以参照文档或示例代码 Project(s) 示例代码 Tables 示例代码 Table 示例代码 Partition 示例代码 Instance(s) 示例代码 LogView 示例代码
Example代码中的输出都用了println, 这是因为大多示例虽然在没有配置的情况下当做测试用例运行时会报错, 但在本地开发的时候希望可以直接运行代码,并让运行结果不报错,所以使用了println, 将字符输出到标准错误。
[ ]request id打印开关
[ ]sqldirver的dsn支持sql flag
licensed under the Apache License 2.0