首頁  >  文章  >  後端開發  >  使用golang apache arrow實作的datatype.go中指定的資料類型來建構模式

使用golang apache arrow實作的datatype.go中指定的資料類型來建構模式

WBOY
WBOY轉載
2024-02-06 08:36:07499瀏覽

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

問題內容

我正在學習 apache arrow,想要了解更多關於如何建立模式和箭頭記錄的資訊。為此,我引用了一些材料,但到目前為止,所有這些材料都只是使用原始類型來構建如下所示的模式:`

schema := arrow.NewSchema(
    []arrow.Field{
        {Name: "f1-i32", Type: arrow.PrimitiveTypes.Int32},
        {Name: "f2-f64", Type: arrow.PrimitiveTypes.Float64},
    },
    nil,
)

我想要使用的 primitivetypes 中不存在一些資料類型。例如,我想使用bool或decimal128。我正在查看 golang 箭頭庫,發現檔案 datatype.go ,其中包含我想要使用的所有可能的資料類型。 但這裡的類型不是建置模式時所需的 datatype 類型。

所以,我有以下三個問題:

  1. 如果可能的話,如何使用 datatype.go 中的這些資料類型來建立我的架構?
  2. 如果我想使用小數類型,如何指定精確度和小數位數?
  3. 使用擴充類型的範例。

正確答案


datatype.go 中定義的這些資料類型命名常數已用於建立您想要的新類型的一部分。其中一些是type decimal128type structtype booleantype struct 如果您檢查這些結構的id 方法的原始程式碼,它們會傳回在datatype.go 中定義的常數,其名稱與結構的名稱相似。這些結構已經實現了 datatype 接口,這意味著您可以將它們分配給 arrow.field.type 因為該字段的類型是 datatype
我對他們的意思是:
bool 中定義的常數datatype.godatatype_fixedwidth.go 中用作type booleantype struct# 的id ​​方法的回傳值。
func (t *booleantype) id() 類型 { return bool }
同樣的事情也適用於 type decimal128type struct
func (*decimal128type) id() 型態 { return decimal128 }.

這些結構之一的方法顯示它們正在實作 datatype 介面:

func (*decimal128type) bitwidth() int
func (t *decimal128type) fingerprint() string
func (*decimal128type) id() type
func (*decimal128type) name() string
func (t *decimal128type) string() string

這些方法適用於 type decimal128type struct
以及datatype介面的定義:

type datatype interface {
    id() type
    // name is name of the data type.
    name() string
    fingerprint() string
}

type booleantype struct 也實作了它。

因此,您可以將它們用於 type 欄位:

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
}

示範性範例:

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)

您可以在 文件
還有一些與擴充類型相關的東西。
但我不熟悉擴充類型,因此我無法展示它的範例。但如果你熟悉它,你就可以輕鬆解決它。

以上是使用golang apache arrow實作的datatype.go中指定的資料類型來建構模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除