Maison >développement back-end >Golang >Construisez le schéma en utilisant les types de données spécifiés dans datatype.go implémenté par golang apache arrow
J'apprends Apache Arrow et j'aimerais en savoir plus sur la façon de créer des enregistrements de schéma et de flèche. J'ai référencé certains matériaux pour cela, mais jusqu'à présent, tous utilisent simplement des types primitifs pour créer des modèles comme celui-ci : `
schema := arrow.NewSchema( []arrow.Field{ {Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32}, {Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64}, }, nil, )
Certains types de données n'existent pas dans les types primitifs que je souhaite utiliser. Par exemple, je souhaite utiliser bool ou decimal128. Je regardais la bibliothèque golang arrow et j'ai trouvé le fichier datatype.go
qui contient tous les types de données possibles que je souhaite utiliser.
Mais le type ici n'est pas le type datatype
requis lors de la construction du modèle.
Donc, j'ai les trois questions suivantes :
datatype.go
? Ces types de données nommés constantes définis dans datatype.go
中定义的这些数据类型命名常量已用于创建您想要的新类型的一部分。其中一些是 type decimal128type struct
和 type booleantype struct
如果您检查这些结构的 id
方法的源代码,它们返回在 datatype.go
中定义的常量,其名称与结构的名称相似。这些结构已经实现了 datatype
接口,这意味着您可以将它们分配给 arrow.field.type
因为该字段的类型是 datatype
ont été utilisés dans le cadre de la création du nouveau type souhaité. Certains d'entre eux sont
et
Si vous vérifiez le code source des méthodes id
de ces structures, elles renvoient des constantes définies dans bool
中定义的常量 datatype.go
在 datatype_fixedwidth.go
中用作 type booleantype struct
的 id
avec des noms similaires aux noms des structures. Ces structures implémentent déjà l'interface
, ce qui signifie que vous pouvez les attribuer à arrow.field.type
car le type du champ est func (t *booleantype) id() 类型 { return bool }
.
Ce que je veux dire pour eux, c'est : type decimal128type struct
La constante
définie dans bool
est utilisée dans datatype_fixedwidth.go
comme valeur de retour de la méthode id
de func (*decimal128type) id() 类型 { return decimal128 }
.
datatype
La même chose s'applique à
type decimal128type struct
.
datatype
Les méthodes sur l'une de ces structures montrent qu'elles implémentent l'interface
func (*decimal128type) bitwidth() int func (t *decimal128type) fingerprint() string func (*decimal128type) id() type func (*decimal128type) name() string func (t *decimal128type) string() string
type booleantype struct
Ces méthodes conviennent aux .
Et la définition de type
interface :
type datatype interface { id() type // name is name of the data type. name() string fingerprint() string }y est parvenu aussi.
Vous pouvez donc les utiliser pour
champs :
type field struct {
name string // field name
type datatype // the field's data type
nullable bool // fields can be nullable
metadata metadata // the field's metadata, if any
}
Exemple démonstratif :
package main import ( "fmt" "github.com/apache/arrow/go/arrow" ) func main() { booltype := &arrow.booleantype{} decimal128type := &arrow.decimal128type{precision: 1, scale: 1} schema := arrow.newschema( []arrow.field{ {name: "f1-bool", type: booltype}, {name: "f2-decimal128", type: decimal128type}, }, nil, ) fmt.println(schema) }
schema: fields: 2 - f1-bool: type=bool - f2-decimal128: type=decimal(1, 1)🎜Vous pouvez le trouver dans 🎜Documents🎜. 🎜 Il y a aussi quelque chose lié aux types d'extensions. 🎜 Mais je ne suis pas familier avec les types d’extensions, je ne peux donc pas en montrer un exemple. Mais si vous le connaissez, vous pouvez le résoudre facilement. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!