Tüm Ürünler
Search
Belge Merkezi

Hologres:MySQL verilerini Hologres'e geçirin

Son Güncelleme:Oct 06, 2026

Hologres PostgreSQL ile uyumludur; bu nedenle MySQL'den geçiş yaparken veri türlerini eşleştirmeniz ve SQL sorgularını uyarlamanız gerekir. Bu konuda, kullanılabilecek senkronizasyon yöntemleri, veri türü eşlemeleri ve geçiş sonrası karşılaşacağınız sorgu ve işlev farklılıkları ele alınmaktadır.

Bir senkronizasyon yöntemi seçin

Aşağıdaki tabloda, MySQL verilerini Hologres'e geçirmek için kullanılabilen senkronizasyon yöntemleri listelenmiştir. Çıkarma, Dönüştürme ve Yükleme (ETL) işlemleri için Flink kullanarak MySQL'den veri okuyup Hologres'e yazın. Daha fazla bilgi için bkz. Fully Managed Flink'e Giriş


Yöntem


Kullanım Durumu


Belgeler


Tek tablo yükleme


MySQL'deki tek bir tablodan verileri tek seferlik bir toplu işlem olarak Hologres'e senkronize edin.


DataWorks ile Verileri Toplu İçe Aktarma


Tek tabloyu gerçek zamanlı senkronize etme


MySQL ikili günlüğü (Binlog) kullanarak tek bir MySQL tablosundaki değişiklikleri Hologres'e akış olarak aktarın.


MySQL Veri Kaynağını Yapılandırma


Tüm veritabanını gerçek zamanlı senkronize etme


Bir MySQL veritabanındaki tüm değişiklikleri gerçek zamanlı olarak Hologres'e akış olarak aktarın.


Gerçek Zamanlı Senkronizasyon Düğümünü Yapılandırma ve Yönetme


Senkronizasyon çözümü


Data Integration kullanarak birden çok tabloyu tek bir işlemde senkronize edin; tam veri senkronizasyonunu sürekli artımlı veri senkronizasyonu ile entegre edin.


MySQL Veri Kaynağını Yapılandırma

Veri türü eşleme

MySQL türlerini Hologres türlerine eşlemek için aşağıdaki tabloyu kullanın. Hologres türlerinin tam referansı için bkz. Veri Türlerine Genel Bakış.

Başlamadan önce dikkat etmeniz gereken temel kurallar şunlardır:

  • Tamsayı boyutu: Hologres'te üç tamsayı türü bulunur — SMALLINT (2 bayt), INTEGER (4 bayt) ve BIGINT (8 bayt) — MySQL'de ise beş tür vardır. Her MySQL tamsayısını, eşit veya daha büyük bayt boyutuna sahip bir Hologres türüne eşleyin.

  • İşaretsiz tamsayılar: Hologres işaretsiz tamsayıları desteklemez. İşaretsiz alanları eşlerken olası taşmaları hesaba katın ve değerler hedef aralığın dışına çıkabilecekse daha büyük bir tamsayı türü veya TEXT kullanın.

  • Metin türleri: Tüm MySQL metin varyantlarını (TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT) Hologres'te TEXT türüne eşleyin.

  • DATETIME ve saat dilimleri: MySQL DATETIME saat dilimi içermez ve YYYY-MM-DD HH:MM:SS biçimini kullanır. Varsayılan olarak, Hologres'te TIMESTAMPTZ (TIMESTAMP WITH TIME ZONE) türüne eşlenir. Saat dilimi içermeyen TIMESTAMP kullanmak için senkronizasyon yapılandırmanızda veya tablo oluşturma deyiminizde bunu açıkça belirtin.


MySQL türü


Hologres türü


Notlar


BIGINT


BIGINT


BIGINT(20) UNSIGNED


TEXT


Hologres işaretsiz tamsayıları desteklemez. TEXT kullanmak taşma riskini önler.


BINARY(n)


BYTEA


BIT


BOOLEAN


CHAR(n), CHARACTER(n)


CHAR(n), CHARACTER(n)


DATE


DATE


DATETIME


TIMESTAMPTZ (TIMESTAMP WITH TIME ZONE)


MySQL DATETIME saat dilimi içermez. Varsayılan olarak TIMESTAMPTZ'ye eşlenir. Bu davranışı devre dışı bırakmak için TIMESTAMP'i açıkça belirtin.


DECIMAL(p,s), DEC(p,s)


DECIMAL(p,s), DEC(p,s)


DOUBLE


DOUBLE PRECISION


FLOAT


REAL


INT, INTEGER


INT, INTEGER


MEDIUMINT


INTEGER


MEDIUMINT 3 bayttır; INTEGER ise 4 bayttır — bu, Hologres'teki bir sonraki daha büyük tamsayı türüdür.


NUMERIC(p,s)


NUMERIC(p,s)


SMALLINT


SMALLINT


TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB


BYTEA


TINYINT


SMALLINT


TINYINT 1 bayttır; SMALLINT ise Hologres'teki en küçük tamsayı türüdür (2 bayt).


TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT


TEXT


Tüm MySQL metin varyantları TEXT'e eşlenir.


TIME


TIME [WITHOUT TIME ZONE]


TIMESTAMP


TIMESTAMP [WITH TIME ZONE]


VARBINARY(n), VARBINARY(max)


BYTEA


VARCHAR(n)


VARCHAR(n)


VARCHAR(max)


TEXT

Sorgu sözdizimi farklılıkları

Hologres PostgreSQL ile uyumlu olduğundan, bazı MySQL sorgu kalıplarının uyarlanması gerekir.

Tırnak işaretleri

Hologres varsayılan olarak büyük/küçük harfe duyarlı değildir. Büyük/küçük harfe duyarlı bir tanımlayıcıya başvurmak için onu çift tırnak içine alın ("").

MySQL geri tırnak söz dizimini çift tırnakla değiştirin:

-- MySQL
SELECT `A` FROM b;

-- Hologres
SELECT "A" FROM b;

Filtre koşulları

Hologres, filtre koşullarında kesin tür eşleşmesi gerektirir ve örtük tür dönüştürme işlemi gerçekleştirmez. Türler eşleşmezse aşağıdakine benzer bir hata alırsınız:

operator does not exist: text = integer

Bu sorunu çözmek için özel tür dönüştürmeleri oluşturun:

CREATE CAST (TEXT AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (TEXT AS BIGINT) WITH INOUT AS IMPLICIT;
CREATE CAST (TEXT AS DECIMAL) WITH INOUT AS IMPLICIT;
CREATE CAST (TEXT AS TIMESTAMP) WITH INOUT AS IMPLICIT;
CREATE CAST (NUMERIC AS TEXT) WITH INOUT AS IMPLICIT;

Örnek: ds sütunu TEXT türündeyse ve bir tamsayı değeriyle filtreleme yapıyorsanız, aşağıdaki sorgu Hologres'te başarısız olur:

SELECT * FROM business_module WHERE ds = 20210329;

Uygun dönüştürmeyi oluşturduktan sonra sorgu hatasız çalışır.

Sayfalama

MySQL'in iki bağımsız değişkenli LIMIT söz dizimini standart OFFSET/LIMIT biçimiyle değiştirin:

-- MySQL
LIMIT 0, 10

-- Hologres
OFFSET 0 LIMIT 10

Sıralama

MySQL ve Hologres, NULL değerlerini artan düzende sıralama konusunda farklılık gösterir:


Veritabanı


ASC varsayılanı


DESC varsayılanı


MySQL


NULLS FIRST


NULLS FIRST


Hologres


NULLS LAST


NULLS FIRST

Tutarlı sonuçlar elde etmek için NULL sıralama düzenini açıkça belirtin:

ORDER BY column DESC NULLS LAST

Gruplama

Hologres varsayılan olarak tam olmayan türlerde (FLOAT, DOUBLE) GROUP BY kullanımını desteklemez. İki seçenek mevcuttur:

  • Gruplamadan önce sütunu DECIMAL türüne dönüştürün.

  • hg_experimental_enable_double_equivalent parametresini etkinleştirin:

    -- Session level
    SET hg_experimental_enable_double_equivalent = on;
    
    -- Database level
    ALTER DATABASE <database_name> SET hg_experimental_enable_double_equivalent = on;
Bu parametre Hologres V0.10 veya sonraki sürümlerini gerektirir. Örneğiniz daha eski bir sürüm çalıştırıyorsa, yükseltme talebinde bulunmak üzere Hologres DingTalk grubu üzerinden teknik destekle iletişime geçin. Ayrıntılar için bkz. Daha fazla çevrimiçi desteği nasıl alırım? .

UNION

UNION operatörü, tüm sorgularda sütun türlerinin eşleşmesini gerektirir. MySQL örtük tür dönüştürme gerçekleştirirken Hologres bunu yapmaz. Tür uyuşmazlığı durumunda aşağıdaki hata oluşur:

UNION types bigint and text cannot be matched

Eşleşmeyen sütunları açıkça dönüştürün:

-- Fails if project_id is BIGINT in tableA and TEXT in tableB
SELECT project_id FROM tableA
UNION ALL
SELECT project_id FROM tableB;

-- Fix: cast to a matching type
SELECT project_id FROM tableA
UNION ALL
SELECT CAST(project_id AS BIGINT) FROM tableB;

İşlev farklılıkları

Hologres, PostgreSQL ile uyumlu çoğu işlevi destekler. Tam liste için bkz. PostgreSQL ile Uyumlu İşlevler. Aşağıdaki MySQL işlevlerinin uyarlanması gerekir.

Sıfıra bölme

MySQL sıfıra bölme işleminde NULL döndürür. Hologres ise bir hata döndürür:

ERROR: division by zero

Seçenek 1: Bölen sıfır olduğunda NULL olarak değerlendirilmesi için NULLIF kullanın:

SELECT a / NULLIF(b, 0) FROM table;

Seçenek 2 (Hologres V1.3.21 ve sonrası): Tek tek sorguları değiştirmeden sıfıra bölmeye tolerans sağlamak için mysql_compatible uzantısını etkinleştirin:

-- Run once per database (requires Superuser)
CREATE EXTENSION IF NOT EXISTS mysql_compatible;

-- Enable division-by-zero tolerance for the current session
SET mysql_compatible.enable = on;

Bu işlem birden çok senaryoyu kapsar:

-- Scenario 1: Constant division of the same type
SET mysql_compatible.enable = on;
SELECT 1 / 0;

-- Scenario 2: Constant division with type conversion
SET mysql_compatible.enable = on;
SELECT 1.0 / 0;

-- Scenario 3: Dividend is a column expression
SET mysql_compatible.enable = on;
SELECT SUM(c) / 0 FROM (SELECT generate_series(1, 100) AS c) AS t;

-- Scenario 4: Divisor is a column expression
SET mysql_compatible.enable = on;
SELECT MAX(c) / SUM(d)
FROM (
  SELECT generate_series(1, 101) AS c,
         generate_series(-50, 50) AS d
) AS t;

-- Scenario 5: Tolerate division by zero during INSERT
CREATE TABLE IF NOT EXISTS test_insert_divide_by_zero (c1 INT);
SET mysql_compatible.strict_mode = off;
SET mysql_compatible.enable = on;
INSERT INTO test_insert_divide_by_zero SELECT 100 / 0.0;

Sorunlarla karşılaşırsanız bkz. Yaygın yükseltme hazırlığı hataları veya Hologres DingTalk grubu üzerinden teknik destekle iletişime geçin. Ayrıntılar için bkz. Ek çevrimiçi desteği nasıl alırım?.

Tamsayı bölmesi

MySQL, kalanlı iki tamsayıyı böldüğünde ondalık sayı döndürür; Hologres ise sonucu tamsayıya kırpıp yuvarlar.


İfade


MySQL sonucu


Hologres sonucu


5 / 2


2,5


2

Ondalık sonucu almak için işlenenlerden birini kayan nokta türüne dönüştürün:

SELECT 1 / 2::FLOAT;

IF işlevi

Hologres IF işlevini desteklemez. Bunun yerine CASE WHEN ifadesini kullanın:

-- MySQL
IF(condition, true_value, false_value)

-- Hologres
CASE WHEN condition THEN true_value ELSE false_value END

IFNULL işlevi

MySQL IFNULL işlevini COALESCE ile değiştirin:

-- MySQL
IFNULL(x, y)

-- Hologres
COALESCE(x, y)

LENGTH işlevi

MySQL LENGTH işlevini CHAR_LENGTH ile değiştirin:

-- MySQL
LENGTH(string)

-- Hologres
CHAR_LENGTH(string)

SSS

COUNT DISTINCT birden çok sütun için farklı sonuçlar döndürüyor

Belirti: Çok sütunlu bir COUNT DISTINCT sorgusu, MySQL ve Hologres'te farklı satır sayıları döndürür.

Neden: MySQL'deki count(distinct column_1, column_2, ...) ifadesi, belirtilen sütunlardan herhangi biri NULL olan satırları hariç tutar. Hologres'teki count(distinct(column_1, column_2, ...)) ifadesi ise bazı sütunlar NULL olsa bile satırları dahil eder; bu da daha yüksek bir sayımla sonuçlanır.

Çözüm: MySQL davranışını eşleştirmek için sütunları birleştirin; böylece herhangi bir NULL değeri ifade boyunca yayılır:

SELECT count(distinct column_1 || column_2 || ...) FROM table;

Örnek:

CREATE TABLE count_distinct_test (
  a TEXT,
  b TEXT
);

INSERT INTO count_distinct_test VALUES
  ('a', 'b'),
  ('a', NULL),
  (NULL, 'b'),
  ('a', 'b');

-- Hologres default: includes rows with NULL columns → returns 3
SELECT count(distinct(a, b)::text) FROM count_distinct_test;

-- MySQL-compatible: NULL propagates through concatenation → returns 1
SELECT count(distinct a || b) FROM count_distinct_test;