如何使用gocql查询cassandra UDT?
How to query cassandra UDT using gocql?
Cassandra table 和 UDT
CREATE TYPE IF NOT EXISTS phone_type(
code TEXT,
phone TEXT,
);
CREATE TABLE IF NOT EXISTS user_by_phone(
user_id UUID,
phone FROZEN<phone_type>,
password TEXT,
PRIMARY KEY (phone)
);
golang 结构
type PhoneType struct {
Code string `json:"code"`
Phone string `json:"phone"`
}
phone := PhoneType{
Code: "+1",
Phone: "7777777777",
}
gqcql查询
err := Session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Scan(
&user.UserID,
&user.Password,
)
虽然在 cassandra table 中有记录,但使用此代码 returns 未找到。
如何使用gocql进行UDT查询?
尝试像这样定义结构(在结构定义中使用 cql
而不是 json
)
type PhoneType struct {
Code string `cql:"code"`
Phone string `cql:"phone"`
}
phone := PhoneType{
Code: "+1",
Phone: "7777777777",
}
按照此处的示例:
https://github.com/gocql/gocql/blob/master/udt_test.go
这对我有用:
var id gocql.UUID
var password string
iter := session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Iter()
for iter.Scan(&id, &password) {
fmt.Println("Phone Record:", id, password)
}
if err := iter.Close(); err != nil {
log.Fatal(err)
}
Cassandra table 和 UDT
CREATE TYPE IF NOT EXISTS phone_type(
code TEXT,
phone TEXT,
);
CREATE TABLE IF NOT EXISTS user_by_phone(
user_id UUID,
phone FROZEN<phone_type>,
password TEXT,
PRIMARY KEY (phone)
);
golang 结构
type PhoneType struct {
Code string `json:"code"`
Phone string `json:"phone"`
}
phone := PhoneType{
Code: "+1",
Phone: "7777777777",
}
gqcql查询
err := Session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Scan(
&user.UserID,
&user.Password,
)
虽然在 cassandra table 中有记录,但使用此代码 returns 未找到。 如何使用gocql进行UDT查询?
尝试像这样定义结构(在结构定义中使用 cql
而不是 json
)
type PhoneType struct {
Code string `cql:"code"`
Phone string `cql:"phone"`
}
phone := PhoneType{
Code: "+1",
Phone: "7777777777",
}
按照此处的示例: https://github.com/gocql/gocql/blob/master/udt_test.go
这对我有用:
var id gocql.UUID
var password string
iter := session.Query("SELECT user_id, password FROM user_by_phone WHERE phone=?;", phone).Iter()
for iter.Scan(&id, &password) {
fmt.Println("Phone Record:", id, password)
}
if err := iter.Close(); err != nil {
log.Fatal(err)
}