sql >> データベース >  >> RDS >> MariaDB

MariaDBと外部データ

    MariaDBはMySQLフォークであり、最初はMySQLの5.1リリースから派生しました。 MySQLとは異なり、MariaDBは、データが標準のMariaDBテーブルに格納されているかのように、非MariaDBデータベースに格納されている外部データを使用できます。データはMariaDBにロードされません。外部データを操作するために、MariaDBはCONNECTストレージエンジンを使用します。このストレージエンジンはMariaDB10.0で導入されました。

    CONNECTストレージエンジンは、WindowsバージョンとLinuxバージョンの両方のデータベースに含まれていますが、デフォルトではロードされていません。 CONNECTストレージエンジンは、ODBCを使用して外部データを処理できます。 ODBCは、データベースに依存しないインターフェイスであり、CONNECTストレージエンジンなどのODBC準拠のアプリケーションが、ODBCドライバーが使用可能な任意のデータベースと連携できるようにします。 ODBCは、アプリケーションのデータクエリをターゲットデータベースが理解できるものに変換します。

    ODBCには、ODBCドライバーとODBCドライバーマネージャーの2つのコンポーネントがあります。 ODBCドライバーはデータベース固有です。つまり、MicrosoftAccessODBCドライバーはMicrosoftAccessデータベースとのみ通信します。 ODBCドライバーマネージャーは、CONNECTストレージエンジンとODBCドライバーの間のインターフェイスです。 Driver Managerは、ODBCドライバーのロードを担当し、データベースと対話するコンポーネントからアプリケーション(つまり、ストレージエンジン)を分離します。このアーキテクチャにより、MariaDBに変更を加えることなく、MariaDBをさまざまなデータベースに接続できます。

    Windowsでは、MicrosoftはオペレーティングシステムにODBCドライバーマネージャーを提供します。これは、CONNECTストレージエンジンがこのプラットフォームで使用するものです。

    Linuxでは、CONNECTストレージエンジンはunixODBCドライバーマネージャーを使用します。このドライバマネージャは通常、オペレーティングシステムで使用できますが、デフォルトではインストールされない場合があります。 Windows以外のプラットフォーム用のすべてのEasysoftODBCドライバーには、unixODBCドライバーマネージャーが含まれています。

    要約すると、ODBCを使用してMariaDBを外部データに接続するために必要なコンポーネントは次のとおりです。

    CONNECTストレージエンジンを試すために、LinuxのMariaDBでSQLServerおよびAccessODBCドライバーを使用し、WindowsのMariaDBでSalesforceODBCドライバーを使用しました。

    64ビットバージョンのMariaDBを使用している場合は、64ビットのODBCドライバーを使用する必要があります。 32ビットバージョンのMariaDBを使用している場合は、32ビットのODBCドライバーを使用する必要があります。

    Connectストレージエンジンのロード

    LinuxまたはWindowsでMariaDBを実行しているかどうかに関係なく、CONNECTストレージエンジンをロードするには同じコマンドが必要です。 MySQLクライアントシェルで、次のように入力します。

    INSTALL SONAME 'ha_connect';
    

    ターゲットデータベースに適切なODBCドライバーがインストールされ、ODBCデータソースが構成されていると仮定すると、外部データをMariaDBと統合できるようになります。

    Linuxでは、ドライバーに含まれているunixODBCドライバーマネージャーのコピーを使用していたため、これらのドライバーマネージャーライブラリが読み込まれるように環境を設定する必要がありました。

    # /etc/init.d/mariadb stop
    # export LD_LIBRARY_PATH=/usr/local/easysoft/unixODBC/lib:$LD_LIBRARY_PATH
    # ldd /opt/mariadb/lib/plugin/ha_connect.so | grep odbc
            libodbc.so.1 => /usr/local/easysoft/unixODBC/lib/libodbc.so.1
            (0x00007f2a06ce8000)
    # /etc/init.d/mariadb start
    

    例:Linux上のMariaDBをMicrosoftAccessに接続する

    CONNECTストレージエンジンを使用すると、MariaDBにCONNECTテーブルを作成できます。 CONNECTテーブルタイプは、外部データへのアクセス方法を指定します。 Accessに接続するためにODBCドライバーを使用しているため、使用する正しいテーブルタイプは「ODBC」です。 Northwindデータベースに接続するODBCデータソースを作成しました。これは、MariaDBからアクセスするデータです。データソースは「Northwind」と呼ばれ、CONNECTテーブル定義に含める必要があります。

    $ /opt/mariadb/bin/mysql --socket=/opt/mariadb-data/mariadb.sock
    MariaDB [(none)]> CREATE DATABASE MDB;
    MariaDB [MDB]> USE MDB;
    MariaDB [MDB]> INSTALL SONAME 'ha_connect';
    MariaDB [MDB]> CREATE TABLE Customers engine=connect
                                          table_type=ODBC
                                          Connection='DSN=ACCESS_NORTHWIND;';
    MariaDB [MDB]> SELECT CompanyName FROM Customers WHERE CustomerID = 'VICTE';
    +----------------------+
    | CompanyName          |
    +----------------------+
    | Victuailles en stock |
    +----------------------+
    1 row in set (0.02 sec)
    

    ストレージエンジンはターゲットテーブル構造を自動検出できるため、CREATE TABLEで列名/データ型を指定できます ステートメントは必須ではありません。

    例:Linux上のMariaDBをMicrosoftSQLServerに接続する

    この例では、tabnameを使用しています MariaDBとSQLServerの違いを回避するオプション。 Person.Addressに保存されているAdventureWorksデータを取得したいと思います。 テーブル。ただし、MariaDBにはテーブルスキーマの概念がないため、MariaDBでテーブルの名前を「PersonAddress」に変更します。 tabnameで実際のテーブル名を指定します 、したがって、SQLServerODBCドライバーはSQLServerが認識するテーブル名を渡すことができます。

    $ /opt/mariadb/bin/mysql --socket=/opt/mariadb-data/mariadb.sock
    MariaDB [(none)]> CREATE DATABASE MSSQL;
    MariaDB [(none)]> USE MSSQL;
    MariaDB [MSSQL]> INSTALL SONAME 'ha_connect';
    MariaDB [MSSQL]> CREATE TABLE PersonAddress engine=connect
                                                table_type=ODBC
                                                tabname='Person.Address'
                                                Connection='DSN=SQLSERVER_ADVENTUREWORKS;';
    ERROR 1105 (HY000): Unsupported SQL type -11
    MariaDB [MSSQL]> \! grep -- -11 /usr/local/easysoft/unixODBC/include/sqlext.h 
    #define SQL_GUID                                (-11)
    MariaDB [MSSQL]> CREATE TABLE PersonAddress (  AddressID int,  
                                                    AddressLine1 varchar(60),  
                                                    AddressLine2 varchar(60),
                                                    City varchar(30),
                                                    StateProvinceID int,
                                                    PostalCode varchar(15),
                                                    rowguid varchar(64),
                                                    ModifiedDate datetime )
                                     engine=connect
                                     table_type=ODBC 
                                     tabname='Person.Address'
                                     Connection='DSN=SQLSERVER_SAMPLE;';
    MariaDB [MSSQL]> SELECT City FROM PersonAddress WHERE AddressID = 32521;
    +-----------+
    | City      |
    +-----------+
    | Sammamish |
    +-----------+
    

    SQLServerのデータ型uniqueidentifierに直接相当するものがないため 。 rowguid列のこのタイプをMariaDBVARCHARにマップする必要があります タイプ。これが唯一の問題のある列ですが、他の列をCREATE TABLEに含める必要があります 声明。それ以外の場合、テーブルにはrowguid列のみが含まれます。

    例:Windows上のMariaDBをSalesforceに接続する

    64ビットバージョンのMariaDBを使用しているため、ターゲットのSalesforceインスタンス用に64ビットのODBCデータソースを構成する必要がありました。 (そうでない場合、CONNECTテーブルタイプを作成しようとすると、「アーキテクチャの不一致」エラーで失敗します。)これを行うには、コントロールパネルにある64ビットバージョンのMicrosoftODBCデータソースアドミニストレータを使用しました。 (Windowsの一部のバージョンでは、コントロールパネルに32ビットバージョンと64ビットバージョンの両方のODBCデータソースアドミニストレーターがありますが、その場合は、それらのアーキテクチャに明確なラベルが付けられています。)

    ターゲットのSalesforce「テーブル」にはNVARCHARが含まれています CONNECTストレージエンジンがVARCHARとして処理する列。 s。 CREATE TABLE ステートメントは、この効果に対する警告を生成します。 (「列IDはワイド文字です」など)

    CREATE DATABASE SALESFORCE;
    USE SALESFORCE;
    INSTALL SONAME 'ha_connect';
    CREATE TABLE Product2 engine=connect
                          table_type=ODBC
                          Connection='DSN=64-bit Salesforce System ODBC DSN;';
    SELECT Description FROM Product2
    
    ODBC Driver for SQL Server, SQL Azure
    ODBC Driver for Salesforce.com, Force.com, Database.com
    

    その他のMySQL/MariaDB接続オプション

    名前 説明
    MariaDBコネクタ/ODBC これはMariaDB用のODBCドライバーであり、WindowsプラットフォームとLinuxプラットフォームの両方で使用できます。これにより、MicrosoftExcelなどのODBC準拠のアプリケーションがMariaDBに保存されているデータにアクセスできるようになります。
    MySQLコネクタ/ODBC これはMySQL用のODBCドライバーであり、Windows、Linux、UNIX、およびOSXプラットフォームで使用できます。これにより、MicrosoftExcelなどのODBC準拠のアプリケーションがMySQLに保存されているデータにアクセスできるようになります。
    MySQLフェデレーションエンジン これはCONNECTストレージエンジンに似ていますが、外部のMySQLデータベースに保存されているデータのみをサポートします。

    1. SQL ServerでのDATENAME()の例

    2. SQL Server 2016:常に暗号化されることによるパフォーマンスへの影響

    3. SQLCMDを使用したSQLデータベース保守タスクの実行

    4. SQL ServerのLEFT()とSUBSTRING():違いは何ですか?