ホームページ > バックエンド開発 > Golang > Golang を使用して ETL の抽出部分と読み込み部分を実装する方法

Golang を使用して ETL の抽出部分と読み込み部分を実装する方法

PHPz
リリース: 2023-04-03 11:47:49
オリジナル
808 人が閲覧しました

[前書き]

ETL (抽出、変換、読み込み) は、データ ウェアハウスの最初の 3 つのプロセスであり、データ ウェアハウス構築プロセスの最も基本的なステップの 1 つです。 ETL プロセスの目標は、ソース データベースからデータを抽出し、データのクリーニングと処理を実行し、処理されたデータをデータ ウェアハウスにロードして分析やレポートなどの操作をサポートすることです。 ETL プロセスの効率、安定性、スケーラビリティは、データ ウェアハウスの構築コスト、メンテナンス コスト、使用効果に直接影響します。現在、データ ウェアハウス構築のプロセスでは、ETL ベースのデータ統合ソリューションが依然として主流のオプションです。

Golang は、高性能、軽量、強力な同時実行性という特徴を持つ新興プログラミング言語であり、さまざまな運用環境で広く使用されています。 Golang は同時処理の問題をうまく解決でき、マルチコア CPU 上で効率的な同時操作を実現できるため、ETL シナリオでのデータ処理にも非常に適しています。この記事では、Golang を使用して ETL の抽出部分と読み込み部分を実装する方法を紹介します。

[本文]

1. 抽出

抽出は ETL プロセスの最初のステップです。主なタスクは、データ ソース システムから必要なデータを抽出することです。異なるデータ ソース システムのデータ形式とデータ構造は大きく異なる場合があるため、データ抽出プロセス中に特定のデータ クリーニングとデータ変換が必要になります。

Golang では、ライブラリ ファイルを使用してさまざまな種類のデータを抽出できます。例:

  • リレーショナル データベースの場合、sql パッケージを使用してデータベースにアクセスし、go-sql-driver/mysql パッケージを使用して MySQL データベースを操作し、mattn/go-sqlite3 を使用してSQLiteデータベースの操作、pqパッケージを使用したPostgreSQLデータベースの操作など。
  • NoSQL データベースの場合、mgo パッケージを使用して MongoDB データベースを操作したり、gomemcache を使用して Memcached を操作したり、redis パッケージを使用して Redis を操作したりできます。
  • ファイルデータについては、bufio や ioutil パッケージを使用してファイルデータの読み書きを行うことができ、archive/zip、compress/gzip などのパッケージを使用して圧縮ファイルを操作することができます。
  • ネットワーク データの場合は、net/http、net/rpc、net/smtp およびその他のパッケージを使用してネットワーク通信を実現できます。

以下では、MySQL データベースを例として、Golang を使用して MySQL データを抽出する方法を紹介します。

  1. MySQL ドライバーと Golang のインストール

まず、MySQL ドライバーと Golang 環境をインストールする必要があります。次のコマンドを使用してインストールできます。

go get -u github.com/go-sql-driver/mysql
ログイン後にコピー
  1. MySQL データベースに接続

データ抽出を開始する前に、まず MySQL データベースに接続する必要があります。次のコードを使用して、MySQL データベースに接続できます。

import "database/sql"
import _ "github.com/go-sql-driver/mysql"

func main() {
    db, err := sql.Open("mysql", "<dbuser>:<dbpassword>@tcp(127.0.0.1:3306)/test")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}
ログイン後にコピー

ここで、<dbuser> および <dbpassword> は、MySQL のユーザー名とパスワードです。 127.0.0.1:3306 は MySQL のアドレスとポート番号、test は接続されたデータベースの名前です。

  1. SQL ステートメントの実行

接続が成功すると、 sql パッケージ SQL ステートメントが実行されます。たとえば、次のコードを使用してデータをクエリできます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">rows, err := db.Query(&quot;SELECT * FROM user&quot;) if err != nil {     log.Fatal(err) } defer rows.Close() for rows.Next() {     var id int     var name string     var email string     err = rows.Scan(&amp;id, &amp;name, &amp;email)     if err != nil {         log.Fatal(err)     }     fmt.Println(id, name, email) } if err = rows.Err(); err != nil {     log.Fatal(err) }</pre><div class="contentsignin">ログイン後にコピー</div></div>上記のコードは、Query メソッドを使用して SQL ステートメントを実行し、ユーザー テーブル内のすべてのデータをクエリし、出力します。結果がコンソールに表示されます。このうち、

Scan

メソッドはクエリ結果を Go 変数にマッピングするために使用されますが、マッピングされた変数の型とクエリ結果のデータ型が一致していることを確認する必要があります。 2. ロードロードは ETL プロセスの最後のステップであり、主なタスクは、処理されたデータをデータ ウェアハウスにロードすることです。抽出ステップとは異なり、ロードステップではデータのクリーニングやデータ変換は必要なく、データ形式とデータウェアハウスのデータ構造に従ってデータを保存するだけで済みます。

Golang では、適切なライブラリ ファイルを使用して、さまざまな種類のデータを保存できます。例:

リレーショナル データベースの場合、sql パッケージを使用してデータベースにアクセスし、go-sql-driver/mysql パッケージを使用して MySQL データベースを操作し、mattn/go-sqlite3 を使用してSQLiteデータベースの操作、pqパッケージを使用したPostgreSQLデータベースの操作など。

NoSQL データベースの場合、mgo パッケージを使用して MongoDB データベースを操作したり、gomemcache を使用して Memcached を操作したり、redis パッケージを使用して Redis を操作したりできます。
  • ファイルデータについては、bufio や ioutil パッケージを使用してファイルデータの読み書きを行うことができ、archive/zip、compress/gzip などのパッケージを使用して圧縮ファイルを操作することができます。
  • ネットワーク データの場合は、net/http、net/rpc、net/smtp およびその他のパッケージを使用してネットワーク通信を実現できます。
  • 以下では、Redis データベースを例として、Golang を使用してデータを保存する方法を紹介します。
Redis ドライバーと Golang のインストール

    まず、MySQL ドライバーと Golang 環境をインストールする必要があります。次のコマンドを使用してインストールできます。
  1. go get -u github.com/go-redis/redis
    ログイン後にコピー
Redis データベースに接続

    データ ストレージを開始する前に、まず Redis データベースに接続する必要があります。次のコードを使用して Redis データベースに接続できます。
  1. import "github.com/go-redis/redis"
    
    func main() {
        client := redis.NewClient(&redis.Options{
            Addr:     "localhost:6379",
            Password: "", // no password set
            DB:       0, // use default DB
        })
    
        pong, err := client.Ping().Result()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(pong)
    }
    ログイン後にコピー
  2. ここで、
localhost:6379

は Redis のアドレスとポート番号です。

データの保存

    接続が成功したら、redis パッケージで提供されるメソッドを使用してデータを保存できます。たとえば、次のコードを使用してデータの一部を Redis に保存できます:
  1. err := client.Set("key", "value", 0).Err()
    if err != nil {
        log.Fatal(err)
    }
    ログイン後にコピー

    上面的代码使用Set方法将一条数据存储到了Redis中,其中key为数据的键,value为数据的值。

    【总结】

    ETL流程是数据仓库建设中最关键的步骤之一,对建设效果、维护成本等方面都有直接的影响。Golang是一种高性能、轻量级、并发性强的编程语言,可以很好地解决并发处理问题,因此也很适合用于ETL场景下的数据处理。在本文中,我们介绍了如何使用Golang来实现ETL中的Extract和Load部分,并给出了MySQL和Redis的具体示例。

以上がGolang を使用して ETL の抽出部分と読み込み部分を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート