Heim >Backend-Entwicklung >Golang >Erstellen Sie das Schema mit den in datatype.go angegebenen Datentypen, die von Golang Apache Arrow implementiert werden
Ich lerne Apache Arrow und möchte mehr darüber erfahren, wie man Schema- und Arrow-Datensätze erstellt. Ich habe dafür auf einige Materialien verwiesen, aber bisher verwenden alle nur primitive Typen, um Muster wie dieses zu erstellen: „
schema := arrow.NewSchema( []arrow.Field{ {Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32}, {Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64}, }, nil, )
Einige Datentypen sind in den Primitivtypen, die ich verwenden möchte, nicht vorhanden. Ich möchte zum Beispiel bool oder decimal128 verwenden. Ich habe mir die Golang-Pfeilbibliothek angesehen und die Datei datatype.go
gefunden, die alle möglichen Datentypen enthält, die ich verwenden möchte.
Der Typ hier ist jedoch nicht der datatype
-Typ, der beim Erstellen des Musters erforderlich ist.
Also, ich habe die folgenden drei Fragen:
datatype.go
erstellen? Diese in datatype.go
中定义的这些数据类型命名常量已用于创建您想要的新类型的一部分。其中一些是 type decimal128type struct
和 type booleantype struct
如果您检查这些结构的 id
方法的源代码,它们返回在 datatype.go
中定义的常量,其名称与结构的名称相似。这些结构已经实现了 datatype
接口,这意味着您可以将它们分配给 arrow.field.type
因为该字段的类型是 datatype
definierten Datentyp-Konstanten wurden bei der Erstellung des gewünschten neuen Typs verwendet. Einige davon sind
und
Wenn Sie den Quellcode der id
-Methoden dieser Strukturen überprüfen, geben sie in bool
中定义的常量 datatype.go
在 datatype_fixedwidth.go
中用作 type booleantype struct
的 id
definierte Konstanten mit Namen zurück, die den Namen der Strukturen ähneln. Diese Strukturen implementieren bereits die
-Schnittstelle, was bedeutet, dass Sie sie arrow.field.type
zuweisen können, da der Feldtyp func (t *booleantype) id() 类型 { return bool }
ist.
Was ich für sie bedeute ist: type decimal128type struct
Die in bool
definierte Konstante
wird in datatype_fixedwidth.go
als Rückgabewert der id
-Methode von func (*decimal128type) id() 类型 { return decimal128 }
verwendet.
datatype
Dasselbe gilt auch für
type decimal128type struct
.
datatype
Methoden für eine dieser Strukturen zeigen, dass sie die
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
Diese Methoden eignen sich für .
Und die Definition von type
Schnittstelle:
type datatype interface { id() type // name is name of the data type. name() string fingerprint() string }hat es auch geschafft.
Damit Sie sie für
Felder verwenden können:
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
}
Demonstratives Beispiel:
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)🎜Sie finden es unter 🎜Dokumente🎜. 🎜 Es gibt auch etwas, das mit Erweiterungstypen zusammenhängt. 🎜 Da ich mich mit Erweiterungstypen jedoch nicht auskenne, kann ich kein Beispiel dafür zeigen. Aber wenn Sie damit vertraut sind, können Sie es leicht lösen. 🎜
Das obige ist der detaillierte Inhalt vonErstellen Sie das Schema mit den in datatype.go angegebenen Datentypen, die von Golang Apache Arrow implementiert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!