Stream Load, yerel dosyaları veya veri akışlarını ApsaraDB for SelectDB'ye yüklemek için kullanılan eşzamanlı HTTP tabanlı bir yöntemdir. Bir HTTP PUT isteği gönderin; sonuç yanıt gövdesinde anında döner, yoklama (polling) gerekmez. Desteklenen biçimler: CSV, JSON, Parquet ve ORC.
İçe aktarmanın başarılı olup olmadığını belirlemek için her zaman yanıt gövdesindeki Status alanını kontrol edin. HTTP 200 yanıtı yalnızca isteğin alındığı anlamına gelir; gerçek içe aktarma sonucu gövdede yer alır.
Ön koşullar
Başlamadan önce aşağıdaki öğelere sahip olduğunuzdan emin olun:
Stream Load'u çalıştıran makine ile SelectDB örneğiniz arasında ağ bağlantısı
SelectDB örneği için oturum açma kimlik bilgileri (kullanıcı adı ve parola)
Ağ erişimini ayarlayın:
Makineniz SelectDB örneğiyle aynı Virtual Private Cloud (VPC) içinde değilse, genel bir uç nokta için başvurun.
Makinenizin IP adreslerini örnek izin listesine ekleyin.
-
Makinenizde giden trafiğe yönelik bir izin listesi varsa, SelectDB örneğinin IP aralığını bu listeye ekleyin:
VPC IP: Bkz. ApsaraDB SelectDB örneğimin ait olduğu VPC'deki IP adreslerini nasıl görüntülerim?
Genel IP: IP adresini almak için
ping <public-endpoint>komutunu çalıştırın.
Kullanım notları
Tek bir Stream Load işi birkaç yüz MB ile 1 GB arasında veri yazabilir. Küçük miktarlarda veriyi yüksek sıklıkla yüklemek örnek performansını düşürür ve tablo kilitlenmelerine neden olabilir. Yükleme sıklığını azaltmak için toplu işlemeyi kullanın:
Uygulama tarafında toplu işleme: Stream Load isteği göndermeden önce verileri uygulamanızda toplayın.
Sunucu tarafında toplu işleme: SelectDB'nin gelen istekleri sunucu tarafında toplu olarak işlemesine olanak tanımak için Group Commit özelliğini kullanın.
Stream Load'un çalışma şekli
Veri dosyası eklenmiş bir HTTP PUT isteği gönderin.
SelectDB veriyi eşzamanlı olarak işler ve hedef tabloya yazar.
Yanıt gövdesi, bir
Statusalanı ve satır düzeyi ölçümleri dahil olmak üzere içe aktarma sonucunu içerir.
Stream Load ile veri yükleme
Stream Load HTTP PUT isteklerini kullanır. Aşağıdaki örnekler curl kullanır, ancak herhangi bir HTTP istemcisi çalışır.
Söz dizimi
curl --location-trusted \
-u <username>:<password> \
-H "expect:100-continue" \
[-H "<header-key>:<header-value>"] \
-T <file-path> \
-XPUT http://<host>:<port>/api/<db_name>/<table_name>/_stream_load
Yer tutucuları gerçek değerlerinizle değiştirin:
| Yer Tutucu | Açıklama | Örnek |
|---|---|---|
<username> |
SelectDB kullanıcı adı | admin |
<password> |
SelectDB parolası | your-password |
<host> |
Örneğin VPC uç noktası veya genel uç noktası | selectdb-cn-xxx-fe.selectdbfe.rds.aliyuncs.com |
<port> |
HTTP bağlantı noktası. Varsayılan: 8080 |
8080 |
<db_name> |
Hedef veritabanı adı | test_db |
<table_name> |
Hedef tablo adı | test_table |
<file-path> |
Yerel veri dosyasının yolu | ./data.csv |
Doğru uç noktayı seçme:
Aynı VPC: VPC uç noktasını kullanın.
Farklı VPC veya Alibaba Cloud dışı: Genel uç noktayı kullanın. Her iki uç nokta da SelectDB konsolundaki örnek ayrıntıları sayfasında listelenir.
İstek üstbilgileri
İçe aktarma seçeneklerini -H "key:value" kullanarak HTTP üstbilgileri olarak ayarlayın.
| Üstbilgi | Varsayılan | Açıklama |
|---|---|---|
label |
Sistem tarafından oluşturulur | Bu içe aktarma işi için benzersiz kimlik. Yinelenen içe aktarmaları önlemek amacıyla aynı veri toplu işi için yeniden denemelerde aynı etiketi kullanın (En Çok Bir Kez semantiği). İlgili iş CANCELLED durumuna ulaştığında etiketler yeniden kullanılabilir. |
format |
CSV |
Veri biçimi. Desteklenen değerler: CSV, JSON, PARQUET, ORC, csv_with_names (ilk satırı atlar), csv_with_names_and_types (ilk iki satırı atlar). Biçime özel parametreler için bkz. Dosya biçimleri. |
column_separator |
\t |
Sütun ayırıcısı. Çok karakterli ayırıcıları destekler. Yazdırılamayan karakterler için \x ön ekiyle hex kullanın; örneğin, Hive'in \x01 ayırıcısı: -H "column_separator:\x01". |
line_delimiter |
\n |
Satır ayırıcısı. Windows'ta \r\n kullanın. Çok karakterli ayırıcıları destekler. |
compress_type |
Yok | Sıkıştırma biçimi. Desteklenen değerler: gz, lzo, bz2, lz4, lzop, deflate. Yalnızca CSV ve JSON dosyaları için desteklenir. |
max_filter_ratio |
0 |
Veri kalitesi kontrollerini geçemeyen maksimum satır oranı. Aralık: [0, 1]. Varsayılan 0 sıfır tolerans anlamına gelir; hatalı herhangi bir satır işi başarısız kılar. Bazı satırların atlanmasına izin vermek için 0 değerinden büyük bir değer ayarlayın. |
strict_mode |
false |
true olduğunda, sütun türü dönüştürme sırasında sıkı tür denetimi uygular. Null olmayan kaynak değerin NULL'a dönüştüğü satırlar filtrelenir. |
cloud_cluster |
Örnek varsayılanı | İçe aktarmayı hangi hesaplama kümesinin işleyeceğini belirtir. Varsayılan bir küme ayarlanmamışsa, SelectDB izinlerinize göre otomatik olarak bir küme seçer. |
load_to_single_tablet |
false |
true olduğunda, tüm verileri hedef bölüm içindeki tek bir tablete yazar. Yalnızca rastgele gruplamaya sahip Duplicate Key tabloları için geçerlidir. Yüksek eşzamanlılık içeren içe aktarmalar için aktarım hızını artırır. |
where |
Yok | SQL filtre koşulu. Eşleşmeyen satırlar içe aktarmadan hariç tutulur ve NumberUnselectedRows içinde sayılır, ancak filtre oranı hesaplamasına dahil edilmez. |
partitions |
Yok | İçe aktarmayı belirtilen bölümlerle sınırlar. Bu bölümlerin dışındaki satırlar hariç tutulur ve dpp.abnorm.ALL içinde sayılır (bu değer NumberFilteredRows içinde yansıtılır). |
columns |
Yok | Kaynak sütunları eşler ve dönüştürür. SELECT ifadeleriyle aynı söz dizimini kullanarak sütun yeniden sıralamasını ve SQL ifade dönüşümlerini destekler. |
merge_type |
APPEND |
Veri birleştirme davranışı. Seçenekler: APPEND (varsayılan, normal yazma), MERGE (Silme Bayrağı sütununu işaretlemek için delete ile birlikte kullanın), DELETE (tüm satırları silme olarak değerlendirir). MERGE ve DELETE yalnızca Unique Key tablolarında desteklenir. |
delete |
Yok | Satırları silindi olarak işaretlemek için SQL koşulu. Yalnızca merge_type değeri MERGE olduğunda kullanılır. |
function_column.sequence_col |
Yok | Sıra sütunlarına sahip Unique Key tabloları için. Satır değiştirme sırasını belirleyen sütunu (kaynak verilerden veya tablo şemasından) belirtir. |
exec_mem_limit |
2147483648 |
İçe aktarma işi için bellek sınırı (bayt cinsinden). Varsayılan: 2 GiB. |
timeout |
600 |
İçe aktarma zaman aşımı (saniye cinsinden). Aralık: [1, 259200]. İş bu sınırı aşarsa otomatik olarak iptal edilir. |
timezone |
Asia/Shanghai |
İçe aktarma sırasında saatle ilgili işlevler için saat dilimi. IANA saat dilimi adlarını kullanır. |
two_phase_commit |
false |
true olduğunda, veriler yazılır ancak işlemi manuel olarak onaylayana kadar görünmez kalır. İşlem durumu onaylanana kadar PRECOMMITTED olarak kalır. Atomik, ya hep ya hiç içe aktarma davranışı için kullanışlıdır. |
jsonpaths |
Yok | JSON alanı çıkarma deseni, örneğin ["$.status", "$.res.id"]. JSON yapısı doğrudan tablo sütunlarıyla eşleşmediğinde kullanılır. Bu olmadan anahtarların sütun adlarıyla eşleşmesi gerekir (sıra farklı olabilir). |
json_root |
"" (tüm nesne) |
Ayrıştırma için kök olarak bir alt nesneyi seçen JSONPath ifadesi. |
read_json_by_line |
false |
true olduğunda, her satırı ayrı bir JSON nesnesi olarak değerlendirir. false olduğunda, tüm dosya tek bir JSON değeri veya dizi olarak ayrıştırılır. |
strip_outer_array |
false |
true olduğunda, bir JSON dizisinden dıştaki diziyi çıkarır ve her öğeyi ayrı bir satır olarak içe aktarır. false olduğunda, tüm dizi tek bir kayıt olarak içe aktarılır. Dizi olmayan JSON biçimi, dizi biçimine kıyasla önemli ölçüde daha yüksek performans sağlar. |
Örnek
data.csv dosyasını test_db içindeki test_table tablosuna aktarın:
curl --location-trusted \
-u admin:admin_123 \
-T data.csv \
-H "label:123" \
-H "expect:100-continue" \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
Yanıt
Stream Load sonucu eşzamanlı olarak döndürür. Başarıyı belirlemek için HTTP durum kodunu değil, Status alanını kontrol edin.
{
"TxnId": 17,
"Label": "707717c0-271a-44c5-be0b-4e71bfeacaa5",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 5,
"NumberLoadedRows": 5,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 28,
"LoadTimeMs": 27,
"BeginTxnTimeMs": 0,
"StreamLoadPutTimeMs": 2,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 3,
"CommitAndPublishTimeMs": 18
}
| Alan | Açıklama |
|---|---|
TxnId |
İşlem kimliği. |
Label |
İçe aktarma etiketi. Özel veya sistem tarafından oluşturulur. |
Status |
İçe aktarma sonucu. Success: tamamlandı. Publish Timeout: tamamlandı ancak veriler kısa süreliğine görünmez olabilir; yeniden denemeyin. Label Already Exists: yinelenen etiket, bunu değiştirin. Fail: içe aktarma başarısız oldu. |
ExistingJobStatus |
Yinelenen etiket için mevcut işin durumu. Yalnızca Status değeri Label Already Exists olduğunda mevcuttur. Değerler: RUNNING veya FINISHED. |
Message |
Varsa hata iletisi. |
NumberTotalRows |
İşlenen toplam satır sayısı. |
NumberLoadedRows |
Başarıyla içe aktarılan satır sayısı. |
NumberFilteredRows |
Veri kalitesi sorunları nedeniyle filtrelenen satır sayısı. |
NumberUnselectedRows |
where koşulu tarafından hariç tutulan satır sayısı. |
LoadBytes |
İçe aktarılan bayt sayısı. |
LoadTimeMs |
Toplam içe aktarma süresi (milisaniye cinsinden). |
BeginTxnTimeMs |
Frontend'de (FE) işlemi başlatma süresi (milisaniye cinsinden). |
StreamLoadPutTimeMs |
FE'den yürütme planını alma süresi (milisaniye cinsinden). |
ReadDataTimeMs |
Kaynak verileri okuma süresi (milisaniye cinsinden). |
WriteDataTimeMs |
Veri yazma süresi (milisaniye cinsinden). |
CommitAndPublishTimeMs |
İşlemi onaylama ve yayınlama süresi (milisaniye cinsinden). |
ErrorURL |
Veri kalitesi sorunları varsa, belirli hata satırlarını görüntülemek için bu URL'ye erişebilirsiniz. |
İçe aktarma hatalarını inceleme
Veri kalitesi sorunları varsa, reddedilen satırları indirmek için ErrorURL adresini kullanın:
curl "<ErrorURL>"
# or save to a file:
wget "<ErrorURL>" -O error_rows.txt
İçe aktarma görevlerini iptal etme ve görüntüleme
Stream Load görevleri gönderildikten sonra manuel olarak iptal edilemez. Sistem, bir görev zaman aşımını aştığında veya kurtarılamaz bir hatayla karşılaştığında görevi otomatik olarak iptal eder.
Tamamlanan Stream Load görevlerini görüntülemek için önce Stream Load işlem kayıtlarını etkinleştirin, ardından bir MySQL istemcisi kullanarak örneğe bağlanın ve şu komutu çalıştırın:
SHOW STREAM LOAD;
CSV verilerini içe aktarma
Örnek: Komut dosyası kullanarak içe aktarma
Hedef tabloyu ayarlama
-
Veritabanını ve tabloyu oluşturun:
CREATE DATABASE test_db; CREATE TABLE test_table ( id int, name varchar(50), age int, address varchar(50), url varchar(500) ) UNIQUE KEY(`id`, `name`) DISTRIBUTED BY HASH(id) BUCKETS 16 PROPERTIES("replication_num" = "1"); -
Stream Load'u çalıştıracağınız makinede
test.csvadlı bir dosya oluşturun:1,yang,32,shanghai,http://example.com 2,wang,22,beijing,http://example.com 3,xiao,23,shenzhen,http://example.com 4,jess,45,hangzhou,http://example.com 5,jack,14,shanghai,http://example.com 6,tomy,25,hangzhou,http://example.com 7,lucy,45,shanghai,http://example.com 8,tengyin,26,shanghai,http://example.com 9,wangli,27,shenzhen,http://example.com 10,xiaohua,37,shanghai,http://example.com
Etiketle yinelemeyi önleme ve özel zaman aşımı ayarlama
Yinelenen içe aktarmaları önlemek için bir etiketle ve 100 saniyelik özel bir zaman aşımıyla test.csv dosyasını içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "label:123" \
-H "timeout:100" \
-H "expect:100-continue" \
-H "column_separator:," \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
Sütun değerine göre satırları filtreleme
Alan sırasını belirtmek için sütun eşlemesini kullanarak yalnızca address değeri hangzhou olan satırları içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "label:123" \
-H "columns: id,name,age,address,url" \
-H "where: address='hangzhou'" \
-H "expect:100-continue" \
-H "column_separator:," \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
%20 hata toleransına izin verme
Veri kalitesi kontrollerini geçemeyen satırların en fazla %20'sine izin vererek içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "label:123" \
-H "max_filter_ratio:0.2" \
-H "expect:100-continue" \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
Özel saat dilimiyle sıkı modu etkinleştirme
Sıkı tür denetimi uygulayın ve saat dilimini Africa/Abidjan olarak ayarlayın:
curl --location-trusted \
-u admin:admin_123 \
-H "strict_mode: true" \
-H "timezone: Africa/Abidjan" \
-H "expect:100-continue" \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
SelectDB'de eşleşen satırları silme
test.csv dosyasındaki satırlarla eşleşen test_table tablosundaki tüm satırları silin:
curl --location-trusted \
-u admin:admin_123 \
-H "merge_type: DELETE" \
-H "expect:100-continue" \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
Koşula göre satırları silme, geri kalanını içe aktarma
address değeri hangzhou olan satırları silin ve kalan satırları içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "expect:100-continue" \
-H "columns: id,name,age,address,url" \
-H "merge_type: MERGE" \
-H "delete: address='hangzhou'" \
-H "column_separator:," \
-T test.csv \
http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/testDb/testTbl/_stream_load
Örnek: Java kodu kullanarak içe aktarma
Aşağıdaki örnek, Apache HttpClient kullanan eksiksiz bir Java uygulamasını gösterir. Başarıyı belirlemek için HTTP durum kodunu değil, yanıt gövdesindeki Status alanını kontrol edin.
package com.selectdb.x2doris.connector.doris.writer;
import com.alibaba.fastjson2.JSON;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.RequestContent;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;
import java.util.Map;
public class DorisLoadCase {
public static void main(String[] args) throws Exception {
// 1. Configure parameters.
String loadUrl = "http://<Host:Port>/api/<DB>/<TABLE>/_stream_load?";
String userName = "admin";
String password = "****";
// 2. Build the HTTP client. Redirection (isRedirectable) must be enabled.
HttpClientBuilder httpClientBuilder = HttpClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
@Override
protected boolean isRedirectable(String method) {
return true;
}
});
httpClientBuilder.addInterceptorLast(new RequestContent(true));
HttpClient httpClient = httpClientBuilder.build();
// 3. Build the PUT request.
HttpPut httpPut = new HttpPut(loadUrl);
// Set authentication and content headers.
String basicAuth = Base64.getEncoder().encodeToString(
String.format("%s:%s", userName, password).getBytes(StandardCharsets.UTF_8));
httpPut.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + basicAuth);
httpPut.addHeader(HttpHeaders.EXPECT, "100-continue");
httpPut.addHeader(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8");
RequestConfig reqConfig = RequestConfig.custom().setConnectTimeout(30000).build();
httpPut.setConfig(reqConfig);
// 4. Read the CSV file and attach it as the request body.
// Default CSV delimiters: row = \n, column = \t
List<String> lines = Files.readAllLines(Paths.get("your_file.csv"));
String data = String.join("\n", lines);
httpPut.setEntity(new StringEntity(data));
// 5. Send the request and check the result.
HttpResponse httpResponse = httpClient.execute(httpPut);
int httpStatus = httpResponse.getStatusLine().getStatusCode();
String respContent = EntityUtils.toString(
new BufferedHttpEntity(httpResponse.getEntity()), StandardCharsets.UTF_8);
String respMsg = httpResponse.getStatusLine().getReasonPhrase();
if (httpStatus == HttpStatus.SC_OK) {
// HTTP 200 does not guarantee import success.
// Always check the Status field returned by SelectDB.
Map<String, String> respAsMap = JSON.parseObject(respContent, Map.class);
String dorisStatus = respAsMap.get("Status");
List<String> DORIS_SUCCESS_STATUS = Arrays.asList("Success", "Publish Timeout", "200");
if (!DORIS_SUCCESS_STATUS.contains(dorisStatus) || !respMsg.equals("OK")) {
throw new RuntimeException(
"StreamLoad failed, status: " + dorisStatus + ", Response: " + respMsg);
} else {
System.out.println("Import successful.");
}
} else {
throw new IOException(
"StreamLoad HTTP error: " + httpStatus + ", url: " + loadUrl + ", error: " + respMsg);
}
}
}
JSON verilerini içe aktarma
Dizi olmayan JSON biçimi, dizi biçimine kıyasla önemli ölçüde daha yüksek performans sağlar. Mümkün olduğunda satır ayrılmış JSON kullanın (read_json_by_line:true).
Hedef tabloyu ayarlama
-
Veritabanını ve tabloyu oluşturun:
CREATE DATABASE test_db; CREATE TABLE test_table ( id int, name varchar(50), age int ) UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 16 PROPERTIES("replication_num" = "1");
Satır ayrılmış JSON'u içe aktarma (önerilen)
Satır başına bir JSON nesnesi içeren json.data adlı bir dosya oluşturun:
{"id":1,"name":"Emily","age":25}
{"id":2,"name":"Benjamin","age":35}
{"id":3,"name":"Olivia","age":28}
{"id":4,"name":"Alexander","age":60}
{"id":5,"name":"Ava","age":17}
read_json_by_line:true kullanarak dosyayı içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "Expect:100-continue" \
-H "format:json" \
-H "read_json_by_line:true" \
-T json.data \
-XPUT http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
JSON dizisini içe aktarma
JSON dizi biçiminde json_array.data adlı bir dosya oluşturun:
[
{"userid":1,"username":"Emily","userage":25},
{"userid":2,"username":"Benjamin","userage":35},
{"userid":3,"username":"Olivia","userage":28},
{"userid":4,"username":"Alexander","userage":60},
{"userid":5,"username":"Ava","userage":17}
]
Eşleşmeyen alan adlarını eşlemek için strip_outer_array:true ve jsonpaths kullanarak dosyayı içe aktarın:
curl --location-trusted \
-u admin:admin_123 \
-H "Expect:100-continue" \
-H "format:json" \
-H "jsonpaths:[\"$.userid\", \"$.userage\", \"$.username\"]" \
-H "columns:id,age,name" \
-H "strip_outer_array:true" \
-T json_array.data \
-XPUT http://selectdb-cn-h033cjs****-fe.selectdbfe.pre.rds.aliyuncs.com:8080/api/test_db/test_table/_stream_load
HTTP Stream modu
HTTP Stream modu (http_stream), Table Value Function (TVF) özelliğini kullanarak içe aktarma parametrelerini istek üstbilgisinde bir SQL ifadesi olarak belirtmenize olanak tanır. API uç noktası standart Stream Load'dan farklıdır:
Standart Stream Load:
http://host:http_port/api/{db}/{table}/_stream_loadHTTP Stream modu:
http://host:http_port/api/_http_stream
Söz dizimi
curl --location-trusted \
-u <username>:<password> \
-H "sql: ${load_sql}" \
-T <file_name> \
-XPUT http://host:http_port/api/_http_stream
load_sql üstbilgisi, column_separator, line_delimiter, where ve columns gibi bağımsız üstbilgilerin yerine tek bir SQL ifadesini kullanır:
INSERT INTO db.table (col, ...) SELECT stream_col, ... FROM http_stream("property1"="value1");
Örnek
curl --location-trusted \
-u admin:admin_123 \
-T test.csv \
-H "sql:insert into demo.example_tbl_1(user_id, age, cost) select c1, c4, c7 * 2 from http_stream(\"format\" = \"CSV\", \"column_separator\" = \",\" ) where age >= 30" \
http://host:http_port/api/_http_stream
TVF'ler hakkında daha fazla bilgi için bkz. TVF.Dosya Biçimleri
İsteğe bağlı yapılandırma
İsteğe bağlı: Stream Load kayıtlarını etkinleştirme
Varsayılan olarak, hesaplama kümesi Stream Load işlemlerini kaydetmez. Kaydı etkinleştirmek için:
Arka uç parametresi
enable_stream_load_recorddeğerinitrueolarak ayarlayın.Hesaplama kümesini yeniden başlatın.
Bu özelliği etkinleştirmek için bir destek bileti göndermeniz gerekir.
İsteğe bağlı: Maksimum dosya boyutunu artırma
Tek bir Stream Load işi için varsayılan maksimum dosya boyutu 10.240 MB'dir. Bunu artırmak için arka uç parametresi streaming_load_max_mb değerini ayarlayın. Talimatlar için bkz. Parametreleri yapılandırma.
İsteğe bağlı: Varsayılan zaman aşımını ayarlama
Varsayılan zaman aşımı 600 saniyedir. İş başına timeout üstbilgisini kullanarak bunu geçersiz kılın. Global varsayılanı değiştirmek için frontend (FE) parametresi stream_load_default_timeout_second değerini ayarlayın ve örneği yeniden başlatın.
Global parametreleri değiştirmek için bir destek bileti göndermeniz gerekir.
SSS
"get table cloud commit lock timeout" hatasının nedeni nedir?
Bu hata, yazma işlemlerinin çok sık gerçekleştiğini ve bunun bir tablo kilidine neden olduğunu gösterir. Yazma sıklığını azaltın ve verilerinizi toplu işleyin. Tek bir Stream Load işi, istek başına birkaç yüz MB ile 1 GB arasında veri hedeflemelidir. Toplu işleme stratejileri için bkz. Kullanım notları.
Sütun veya satır ayırıcıları içeren CSV verilerini nasıl işlerim?
Yeni ayırıcılar belirtin ve verilerinizdeki ayırıcı karakterlerinin seçilen ayırıcılarla çakışmaması için veri dosyasını güncelleyin.
Veri satır ayırıcısını içeriyor
Verileriniz varsayılan satır ayırıcısı \n karakterini bir veri değeri olarak (satır sınırı olarak değil) içeriyorsa, farklı bir satır ayırıcısı belirtin.
Örnek — orijinal dosya:
Zhang San\n,25,Shaanxi
Li Si\n,30,Beijing
Adımlar:
Yeni bir satır ayırıcısı ayarlayın: isteğinize
-H "line_delimiter:\r\n"ekleyin.-
Her satırı yeni ayırıcıyla bitirecek şekilde dosyayı güncelleyin:
Zhang San\n,25,Shaanxi\r\n Li Si\n,30,Beijing\r\n
Veri sütun ayırıcısını içeriyor
Verileriniz varsayılan sütun ayırıcısı \t (sekme) karakterini bir veri değeri olarak içeriyorsa, farklı bir sütun ayırıcısı belirtin.
Örnek — orijinal dosya:
Zhang San\t 25 Shaanxi
Li Si\t 30 Beijing
Adımlar:
Yeni bir sütun ayırıcısı ayarlayın: isteğinize
-H "column_separator:,"ekleyin.-
Sütunları yeni ayırıcıyla ayıracak şekilde dosyayı güncelleyin:
Zhang San\t,25,Shaanxi Li Si\t,30,Beijing
Sonraki adımlar
Group Commit — yazma sıklığını azaltmak için gelen Stream Load isteklerini sunucu tarafında toplu işleyin
Parametreleri yapılandırma —
streaming_load_max_mbgibi arka uç parametrelerini ayarlayınMySQL istemcisi kullanarak bir ApsaraDB for SelectDB örneğine bağlanma