Heim >Backend-Entwicklung >Golang >Erstellen Sie das Schema mit den in datatype.go angegebenen Datentypen, die von Golang Apache Arrow implementiert werden

Erstellen Sie das Schema mit den in datatype.go angegebenen Datentypen, die von Golang Apache Arrow implementiert werden

WBOY
WBOYnach vorne
2024-02-06 08:36:07536Durchsuche

使用golang apache arrow实现的datatype.go中指定的数据类型来构建模式

Frageninhalt

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:

  1. Wie kann ich, wenn möglich, mein Schema mit diesen Datentypen in datatype.go erstellen?
  2. Wenn ich den Dezimaltyp verwenden möchte, wie lege ich die Genauigkeit und Anzahl der Dezimalstellen fest?
  3. Beispiel für die Verwendung erweiterter Typen.

Richtige Antwort


Diese in datatype.go 中定义的这些数据类型命名常量已用于创建您想要的新类型的一部分。其中一些是 type decimal128type structtype 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.godatatype_fixedwidth.go 中用作 type booleantype structid 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.
datatypeMethoden für eine dieser Strukturen zeigen, dass sie die

-Schnittstelle implementieren:

func (*decimal128type) bitwidth() int
func (t *decimal128type) fingerprint() string
func (*decimal128type) id() type
func (*decimal128type) name() string
func (t *decimal128type) string() string
type booleantype structDiese Methoden eignen sich für

.

Und die Definition von typeSchnittstelle:

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)
}

Ausgabe:

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen