From e2dcbcd532bebdb46992ab58b53ae37f1477cec0 Mon Sep 17 00:00:00 2001 From: wangchuande Date: Tue, 22 Jan 2019 18:30:51 +0800 Subject: [PATCH 001/251] fix orcFileStartRead --- .../plugin/reader/hdfsreader/DFSUtil.java | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/hdfsreader/src/main/java/com/alibaba/datax/plugin/reader/hdfsreader/DFSUtil.java b/hdfsreader/src/main/java/com/alibaba/datax/plugin/reader/hdfsreader/DFSUtil.java index c39d3847..505e8064 100644 --- a/hdfsreader/src/main/java/com/alibaba/datax/plugin/reader/hdfsreader/DFSUtil.java +++ b/hdfsreader/src/main/java/com/alibaba/datax/plugin/reader/hdfsreader/DFSUtil.java @@ -331,26 +331,30 @@ public class DFSUtil { //If the network disconnected, will retry 45 times, each time the retry interval for 20 seconds //Each file as a split //TODO multy threads - InputSplit[] splits = in.getSplits(conf, 1); + // OrcInputFormat getSplits params numSplits not used, splits size = block numbers + InputSplit[] splits = in.getSplits(conf, -1); + for (InputSplit split : splits) { + { + RecordReader reader = in.getRecordReader(split, conf, Reporter.NULL); + Object key = reader.createKey(); + Object value = reader.createValue(); + // 获取列信息 + List fields = inspector.getAllStructFieldRefs(); - RecordReader reader = in.getRecordReader(splits[0], conf, Reporter.NULL); - Object key = reader.createKey(); - Object value = reader.createValue(); - // 获取列信息 - List fields = inspector.getAllStructFieldRefs(); + List recordFields; + while (reader.next(key, value)) { + recordFields = new ArrayList(); - List recordFields; - while (reader.next(key, value)) { - recordFields = new ArrayList(); - - for (int i = 0; i <= columnIndexMax; i++) { - Object field = inspector.getStructFieldData(value, fields.get(i)); - recordFields.add(field); + for (int i = 0; i <= columnIndexMax; i++) { + Object field = inspector.getStructFieldData(value, fields.get(i)); + recordFields.add(field); + } + transportOneRecord(column, recordFields, recordSender, + taskPluginCollector, isReadAllColumns, nullFormat); + } + reader.close(); } - transportOneRecord(column, recordFields, recordSender, - taskPluginCollector, isReadAllColumns, nullFormat); } - reader.close(); } catch (Exception e) { String message = String.format("从orcfile文件路径[%s]中读取数据发生异常,请联系系统管理员。" , sourceOrcFilePath); From 1dc534311374195b4dcc4d0c7564721c3ba78558 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Oct 2020 04:48:28 +0000 Subject: [PATCH 002/251] Bump junit from 4.11 to 4.13.1 in /elasticsearchwriter Bumps [junit](https://github.com/junit-team/junit4) from 4.11 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.11.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.11...r4.13.1) Signed-off-by: dependabot[bot] --- elasticsearchwriter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elasticsearchwriter/pom.xml b/elasticsearchwriter/pom.xml index 2a246805..a60dbd88 100644 --- a/elasticsearchwriter/pom.xml +++ b/elasticsearchwriter/pom.xml @@ -50,7 +50,7 @@ junit junit - 4.11 + 4.13.1 test From 9f5d9a6317367b28a4257bfc3654e469064275e2 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 10 Mar 2021 13:34:02 +0800 Subject: [PATCH 003/251] add doriswriter --- doriswriter/doc/doriswriter.md | 170 ++++++++++++++++++ doriswriter/pom.xml | 155 ++++++++++++++++ doriswriter/src/main/assembly/package.xml | 35 ++++ .../writer/doriswriter/DorisWriter.java | 144 +++++++++++++++ .../doriswriter/DorisWriterOptions.java | 111 ++++++++++++ .../manager/DorisStreamLoadVisitor.java | 143 +++++++++++++++ .../manager/DorisWriterManager.java | 113 ++++++++++++ .../doriswriter/util/DorisWriterUtil.java | 83 +++++++++ doriswriter/src/main/resources/plugin.json | 6 + .../main/resources/plugin_job_template.json | 14 ++ package.xml | 7 + pom.xml | 3 +- 12 files changed, 983 insertions(+), 1 deletion(-) create mode 100644 doriswriter/doc/doriswriter.md create mode 100755 doriswriter/pom.xml create mode 100755 doriswriter/src/main/assembly/package.xml create mode 100755 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java create mode 100755 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java create mode 100755 doriswriter/src/main/resources/plugin.json create mode 100644 doriswriter/src/main/resources/plugin_job_template.json diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md new file mode 100644 index 00000000..715afa8c --- /dev/null +++ b/doriswriter/doc/doriswriter.md @@ -0,0 +1,170 @@ +# DataX DorisWriter + + +--- + + +## 1 快速介绍 + +DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。在底层实现上, DorisWriter 通过Streamload以csv格式导入数据至Doris。 + + +## 2 实现原理 + + DorisWriter 通过Streamload以csv格式导入数据至Doris, 内部将`reader`读取的数据进行缓存后批量导入至Doris,以提高写入性能。 + + +## 3 功能说明 + +### 3.1 配置样例 + +* 这里使用一份从内存Mysql读取数据后导入至Doris。 + +```json +{ + "job": { + "setting": { + "speed": { + "channel": 1 + }, + "errorLimit": { + "record": 0, + "percentage": 0 + } + }, + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "xxxx", + "password": "xxxx", + "column": [ "k1", "k2", "v1", "v2" ], + "connection": [ + { + "table": [ "table1", "table2" ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/datax_test1" + ] + }, + { + "table": [ "table3", "table4" ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/datax_test2" + ] + } + ] + } + }, + "writer": { + "name": "doriswriter", + "parameter": { + "username": "xxxx", + "password": "xxxx", + "database": "xxxx", + "table": "xxxx", + "column": ["k1", "k2", "v1", "v2"], + "preSql": [], + "postSql": [], + "jdbcUrl": "jdbc:mysql://172.28.17.100:9030/", + "loadUrl": ["172.28.17.100:8030", "172.28.17.100:8030"] + } + } + } + ] + } +} + +``` + + +### 3.2 参数说明 + +* **username** + + * 描述:Doris数据库的用户名
+ + * 必选:是
+ + * 默认值:无
+ +* **password** + + * 描述:Doris数据库的密码
+ + * 必选:是
+ + * 默认值:无
+ +* **database** + + * 描述:Doris表的数据库名称。 + + * 必选:是
+ + * 默认值:无
+ +* **table** + + * 描述:Doris表的表名称。 + + * 必选:是
+ + * 默认值:无
+ +* **loadUrl** + + * 描述:Doris FE的地址用于Streamload,可以为多个fe地址,`fe_ip:fe_http_port`。 + + * 必选:是
+ + * 默认值:无
+ +* **column** + + * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。 + + **column配置项必须指定,不能留空!** + + 注意:我们强烈不推荐你这样配置,因为当你目的表字段个数、类型等有改动时,你的任务可能运行不正确或者失败 + + * 必选:是
+ + * 默认值:否
+ +* **preSql** + + * 描述:写入数据到目的表前,会先执行这里的标准语句。
+ + * 必选:否
+ + * 默认值:无
+ +* **postSql** + + * 描述:写入数据到目的表后,会执行这里的标准语句。
+ + * 必选:否
+ + * 默认值:无
+ +* **jdbcUrl** + + * 描述:目的数据库的 JDBC 连接信息,用于执行`preSql`及`postSql`。
+ + * 必选:否
+ + * 默认值:无
+ + +### 3.3 类型转换 + +传入的数据均会被转为字符串,并以`\t`作为列分隔符,`\n`作为行分隔符,组成`csv`文件进行StreamLoad导入操作。 + +## 4 性能报告 + + +## 5 约束限制 + + +## FAQ diff --git a/doriswriter/pom.xml b/doriswriter/pom.xml new file mode 100755 index 00000000..2bbf1d22 --- /dev/null +++ b/doriswriter/pom.xml @@ -0,0 +1,155 @@ + + 4.0.0 + + com.alibaba.datax + datax-all + 0.0.1-SNAPSHOT + + doriswriter + doriswriter + jar + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + + com.alibaba.datax + plugin-rdbms-util + ${datax-project-version} + + + commons-codec + commons-codec + 1.9 + + + commons-logging + commons-logging + 1.1.1 + + + org.apache.httpcomponents + httpcore + 4.4.6 + + + org.apache.httpcomponents + httpclient + 4.5.3 + + + com.alibaba + fastjson + 1.2.75 + + + mysql + mysql-connector-java + 5.1.34 + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + + package + + shade + + + true + + + com.alibaba.fastjson + com.dorisdb.shade.com.alibaba.fastjson + + + org.apache.http + com.dorisdb.shade.org.apache.http + + + org.apache.commons + com.dorisdb.shade.org.apache.commons + + + + + commons-codec:commons-codec + commons-logging:* + org.apache.httpcomponents:httpclient + org.apache.httpcomponents:httpcore + com.alibaba:fastjson + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/doriswriter/src/main/assembly/package.xml b/doriswriter/src/main/assembly/package.xml new file mode 100755 index 00000000..2e0880e1 --- /dev/null +++ b/doriswriter/src/main/assembly/package.xml @@ -0,0 +1,35 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/doriswriter + + + target/ + + doriswriter-0.0.1-SNAPSHOT.jar + + plugin/writer/doriswriter + + + + + + false + plugin/writer/doriswriter/libs + runtime + + + diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java new file mode 100755 index 00000000..0cbe579c --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java @@ -0,0 +1,144 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.manager.DorisWriterManager; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.util.DorisWriterUtil; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.List; + +public class DorisWriter extends Writer { + + public static class Job extends Writer.Job { + + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private Configuration originalConfig = null; + private DorisWriterOptions options; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + options = new DorisWriterOptions(super.getPluginJobConf()); + options.doPretreatment(); + } + + @Override + public void preCheck(){ + this.init(); + DorisWriterUtil.preCheckPrePareSQL(options); + DorisWriterUtil.preCheckPostSQL(options); + } + + @Override + public void prepare() { + String username = options.getUsername(); + String password = options.getPassword(); + String jdbcUrl = options.getJdbcUrl(); + List renderedPreSqls = DorisWriterUtil.renderPreOrPostSqls(options.getPreSqlList(), options.getTable()); + if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPreSqls), jdbcUrl); + DorisWriterUtil.executeSqls(conn, renderedPreSqls); + DBUtil.closeDBResources(null, null, conn); + } + } + + @Override + public List split(int mandatoryNumber) { + List configurations = new ArrayList<>(mandatoryNumber); + for (int i = 0; i < mandatoryNumber; i++) { + configurations.add(originalConfig); + } + return configurations; + } + + @Override + public void post() { + String username = options.getUsername(); + String password = options.getPassword(); + String jdbcUrl = options.getJdbcUrl(); + List renderedPostSqls = DorisWriterUtil.renderPreOrPostSqls(options.getPostSqlList(), options.getTable()); + if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPostSqls), jdbcUrl); + DorisWriterUtil.executeSqls(conn, renderedPostSqls); + DBUtil.closeDBResources(null, null, conn); + } + } + + @Override + public void destroy() { + } + + } + + public static class Task extends Writer.Task { + private DorisWriterManager writerManager; + private DorisWriterOptions options; + + @Override + public void init() { + options = new DorisWriterOptions(super.getPluginJobConf()); + writerManager = new DorisWriterManager(options); + } + + @Override + public void prepare() { + } + + public void startWrite(RecordReceiver recordReceiver) { + try { + Record record; + while ((record = recordReceiver.getFromReader()) != null) { + if (record.getColumnNumber() != options.getColumns().size()) { + throw DataXException + .asDataXException( + DBUtilErrorCode.CONF_ERROR, + String.format( + "列配置信息有错误. 因为您配置的任务中,源头读取字段数:%s 与 目的表要写入的字段数:%s 不相等. 请检查您的配置并作出修改.", + record.getColumnNumber(), + options.getColumns().size())); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < record.getColumnNumber(); i++) { + sb.append(record.getColumn(i).getRawData().toString()); + if (i < record.getColumnNumber() - 1) { + sb.append("\t"); + } + } + writerManager.writeRecord(sb.toString()); + } + } catch (Exception e) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + } + + @Override + public void post() { + try { + writerManager.flush(writerManager.createBatchLabel()); + } catch (Exception e) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + } + + @Override + public void destroy() {} + + @Override + public boolean supportFailOver(){ + return false; + } + } +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java new file mode 100644 index 00000000..1d9cb2be --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -0,0 +1,111 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter; + +import java.io.Serializable; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; + +import java.util.List; + +public class DorisWriterOptions implements Serializable { + + private static final long serialVersionUID = 1l; + private static final long KILO_BYTES_SCALE = 1024l; + private static final long MEGA_BYTES_SCALE = KILO_BYTES_SCALE * KILO_BYTES_SCALE; + private static final int MAX_RETRIES = 1; + private static final int BATCH_ROWS = 500000; + private static final long BATCH_BYTES = 100 * MEGA_BYTES_SCALE; + + private static final String KEY_USERNAME = "username"; + private static final String KEY_PASSWORD = "password"; + private static final String KEY_DATABASE = "database"; + private static final String KEY_TABLE = "table"; + private static final String KEY_COLUMN = "column"; + private static final String KEY_PRE_SQL = "preSql"; + private static final String KEY_POST_SQL = "postSql"; + private static final String KEY_JDBC_URL = "jdbcUrl"; + private static final String KEY_LOAD_URL = "loadUrl"; + + private final Configuration options; + + public DorisWriterOptions(Configuration options) { + this.options = options; + } + + public void doPretreatment() { + validateRequired(); + validateStreamLoadUrl(); + } + + public String getJdbcUrl() { + return options.getString(KEY_JDBC_URL); + } + + public String getDatabase() { + return options.getString(KEY_DATABASE); + } + + public String getTable() { + return options.getString(KEY_TABLE); + } + + public String getUsername() { + return options.getString(KEY_USERNAME); + } + + public String getPassword() { + return options.getString(KEY_PASSWORD); + } + + public List getLoadUrlList() { + return options.getList(KEY_LOAD_URL, String.class); + } + + public List getColumns() { + return options.getList(KEY_COLUMN, String.class); + } + + public List getPreSqlList() { + return options.getList(KEY_PRE_SQL, String.class); + } + + public List getPostSqlList() { + return options.getList(KEY_POST_SQL, String.class); + } + + public int getMaxRetries() { + return MAX_RETRIES; + } + + public int getBatchRows() { + return BATCH_ROWS; + } + + public long getBatchSize() { + return BATCH_BYTES; + } + + private void validateStreamLoadUrl() { + List urlList = getLoadUrlList(); + for (String host : urlList) { + if (host.split(":").length < 2) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + "loadUrl的格式不正确,请输入 `fe_ip:fe_http_ip;fe_ip:fe_http_ip`。"); + } + } + } + + private void validateRequired() { + final String[] requiredOptionKeys = new String[]{ + KEY_USERNAME, + KEY_PASSWORD, + KEY_DATABASE, + KEY_TABLE, + KEY_LOAD_URL + }; + for (String optionKey : requiredOptionKeys) { + options.getNecessaryValue(optionKey, DBUtilErrorCode.REQUIRED_VALUE); + } + } +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java new file mode 100644 index 00000000..a01b906b --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -0,0 +1,143 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; + +import java.io.IOException; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +import com.alibaba.fastjson.JSON; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; + +import org.apache.commons.codec.binary.Base64; +import org.apache.http.HttpEntity; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.CloseableHttpClient; +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.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + + +public class DorisStreamLoadVisitor implements Serializable { + + private static final long serialVersionUID = 1L; + + private static final Logger LOG = LoggerFactory.getLogger(DorisStreamLoadVisitor.class); + + private final DorisWriterOptions writerOptions; + private int pos; + + public DorisStreamLoadVisitor(DorisWriterOptions writerOptions) { + this.writerOptions = writerOptions; + } + + public void doStreamLoad(String label, List labeledRows) throws IOException { + String host = getAvailableHost(); + if (null == host) { + throw new IOException("None of the host in `load_url` could be connected."); + } + String loadUrl = new StringBuilder(host) + .append("/api/") + .append(writerOptions.getDatabase()) + .append("/") + .append(writerOptions.getTable()) + .append("/_stream_load") + .toString(); + Map loadResult = doHttpPut(loadUrl, label, joinRows(labeledRows)); + final String keyStatus = "Status"; + if (null == loadResult || !loadResult.containsKey(keyStatus)) { + throw new IOException("Unable to flush data to doris: unknown result status."); + } + if (loadResult.get(keyStatus).equals("Fail")) { + throw new IOException( + new StringBuilder("Failed to flush data to doris.").append(loadResult.get("Message").toString()).toString() + ); + } + } + + private String getAvailableHost() { + List hostList = writerOptions.getLoadUrlList(); + if (pos >= hostList.size()) { + pos = 0; + } + for (; pos < hostList.size(); pos++) { + String host = new StringBuilder("http://").append(hostList.get(pos)).toString(); + if (tryHttpConnection(host)) { + return host; + } + } + return null; + } + + private boolean tryHttpConnection(String host) { + try { + URL url = new URL(host); + HttpURLConnection co = (HttpURLConnection) url.openConnection(); + co.setConnectTimeout(1000); + co.connect(); + co.disconnect(); + return true; + } catch (Exception e1) { + LOG.warn("Failed to connect to address:{}", host, e1); + return false; + } + } + + private byte[] joinRows(List rows) { + return String.join("\n", rows).getBytes(StandardCharsets.UTF_8); + } + + @SuppressWarnings("unchecked") + private Map doHttpPut(String loadUrl, String label, byte[] data) throws IOException { + LOG.info(String.format("Executing stream load to: '%s', size: '%s'", loadUrl, data.length)); + final HttpClientBuilder httpClientBuilder = HttpClients.custom() + .setRedirectStrategy(new DefaultRedirectStrategy() { + @Override + protected boolean isRedirectable(String method) { + return true; + } + }); + try (CloseableHttpClient httpclient = httpClientBuilder.build()) { + HttpPut httpPut = new HttpPut(loadUrl); + List cols = writerOptions.getColumns(); + if (null != cols && !cols.isEmpty()) { + httpPut.setHeader("columns", String.join(",", cols)); + } + httpPut.setHeader("Expect", "100-continue"); + httpPut.setHeader("label", label); + httpPut.setHeader("Content-Type", "application/x-www-form-urlencoded"); + httpPut.setHeader("Authorization", getBasicAuthHeader(writerOptions.getUsername(), writerOptions.getPassword())); + httpPut.setEntity(new ByteArrayEntity(data)); + httpPut.setConfig(RequestConfig.custom().setRedirectsEnabled(true).build()); + try (CloseableHttpResponse resp = httpclient.execute(httpPut)) { + int code = resp.getStatusLine().getStatusCode(); + if (200 != code) { + LOG.warn("Request failed with code:{}", code); + return null; + } + HttpEntity respEntity = resp.getEntity(); + if (null == respEntity) { + LOG.warn("Request failed with empty response."); + return null; + } + return (Map)JSON.parse(EntityUtils.toString(respEntity)); + } + } + } + + private String getBasicAuthHeader(String username, String password) { + String auth = username + ":" + password; + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes()); + return new StringBuilder("Basic ").append(new String(encodedAuth)).toString(); + } + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java new file mode 100644 index 00000000..86d370a5 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java @@ -0,0 +1,113 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; + +public class DorisWriterManager implements Serializable { + + private static final long serialVersionUID = 1L; + + private static final Logger LOG = LoggerFactory.getLogger(DorisWriterManager.class); + + private final DorisStreamLoadVisitor dorisStreamLoadVisitor; + private final DorisWriterOptions writerOptions; + + private final List buffer = new ArrayList<>(); + private int batchCount = 0; + private long batchSize = 0; + private volatile boolean closed = false; + private volatile Exception flushException; + + public DorisWriterManager(DorisWriterOptions writerOptions) { + this.writerOptions = writerOptions; + this.dorisStreamLoadVisitor = new DorisStreamLoadVisitor(writerOptions); + } + + public final synchronized void writeRecord(String record) throws IOException { + checkFlushException(); + try { + buffer.add(record); + batchCount++; + batchSize += record.length(); + if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { + flush(createBatchLabel()); + } + } catch (Exception e) { + throw new IOException("Writing records to Doris failed.", e); + } + } + + public synchronized void flush(String label) throws IOException { + checkFlushException(); + if (batchCount == 0) { + return; + } + for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { + try { + tryToFlush(label); + buffer.clear(); + batchCount = 0; + batchSize = 0; + break; + } catch (IOException e) { + LOG.warn("Failed to flush batch data to doris, retry times = {}", i, e); + if (i >= writerOptions.getMaxRetries()) { + throw new IOException(e); + } + try { + Thread.sleep(1000l * (i + 1)); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + throw new IOException("Unable to flush, interrupted while doing another attempt", e); + } + } + } + } + + public synchronized void close() { + if (!closed) { + closed = true; + + if (batchCount > 0) { + try { + flush(createBatchLabel()); + } catch (Exception e) { + throw new RuntimeException("Writing records to Doris failed.", e); + } + } + } + checkFlushException(); + } + + public String createBatchLabel() { + return UUID.randomUUID().toString(); + } + + public List getBufferedBatchList() { + return buffer; + } + + public void setBufferedBatchList(List buffer) { + this.buffer.clear(); + this.buffer.addAll(buffer); + } + + private void tryToFlush(String label) throws IOException { + // flush to Doris with stream load + dorisStreamLoadVisitor.doStreamLoad(label, buffer); + } + + private void checkFlushException() { + if (flushException != null) { + throw new RuntimeException("Writing records to Doris failed.", flushException); + } + } +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java new file mode 100755 index 00000000..348e519c --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java @@ -0,0 +1,83 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.util; + +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.util.RdbmsException; +import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.druid.sql.parser.ParserException; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; +import com.google.common.base.Strings; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.Statement; +import java.util.*; + +public final class DorisWriterUtil { + private static final Logger LOG = LoggerFactory.getLogger(DorisWriterUtil.class); + + private DorisWriterUtil() {} + + public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { + if (null == preOrPostSqls) { + return Collections.emptyList(); + } + List renderedSqls = new ArrayList<>(); + for (String sql : preOrPostSqls) { + if (!Strings.isNullOrEmpty(sql)) { + renderedSqls.add(sql.replace(Constant.TABLE_NAME_PLACEHOLDER, tableName)); + } + } + return renderedSqls; + } + + public static void executeSqls(Connection conn, List sqls) { + Statement stmt = null; + String currentSql = null; + try { + stmt = conn.createStatement(); + for (String sql : sqls) { + currentSql = sql; + DBUtil.executeSqlWithoutResultSet(stmt, sql); + } + } catch (Exception e) { + throw RdbmsException.asQueryException(DataBaseType.MySql, e, currentSql, null, null); + } finally { + DBUtil.closeDBResources(null, stmt, null); + } + } + + public static void preCheckPrePareSQL(DorisWriterOptions options) { + String table = options.getTable(); + List preSqls = options.getPreSqlList(); + List renderedPreSqls = DorisWriterUtil.renderPreOrPostSqls(preSqls, table); + if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { + LOG.info("Begin to preCheck preSqls:[{}].", String.join(";", renderedPreSqls)); + for (String sql : renderedPreSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e) { + throw RdbmsException.asPreSQLParserException(DataBaseType.MySql,e,sql); + } + } + } + } + + public static void preCheckPostSQL(DorisWriterOptions options) { + String table = options.getTable(); + List postSqls = options.getPostSqlList(); + List renderedPostSqls = DorisWriterUtil.renderPreOrPostSqls(postSqls, table); + if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { + LOG.info("Begin to preCheck postSqls:[{}].", String.join(";", renderedPostSqls)); + for(String sql : renderedPostSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e){ + throw RdbmsException.asPostSQLParserException(DataBaseType.MySql,e,sql); + } + } + } + } +} diff --git a/doriswriter/src/main/resources/plugin.json b/doriswriter/src/main/resources/plugin.json new file mode 100755 index 00000000..081ddace --- /dev/null +++ b/doriswriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "doriswriter", + "class": "com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriter", + "description": "useScene: prod. mechanism: DorisStreamLoad. warn: The more you know about the database, the less problems you encounter.", + "developer": "dorisdb" +} \ No newline at end of file diff --git a/doriswriter/src/main/resources/plugin_job_template.json b/doriswriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..ee1744c8 --- /dev/null +++ b/doriswriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,14 @@ +{ + "name": "doriswriter", + "parameter": { + "username": "", + "password": "", + "database": "", + "table": "", + "column": [], + "preSql": [], + "postSql": [], + "jdbcUrl": "", + "loadUrl": [] + } +} \ No newline at end of file diff --git a/package.xml b/package.xml index 49e3c4ec..347ee81a 100755 --- a/package.xml +++ b/package.xml @@ -189,6 +189,13 @@ datax + + doriswriter/target/datax/ + + **/*.* + + datax + drdswriter/target/datax/ diff --git a/pom.xml b/pom.xml index 8f3b827e..96ad4333 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,7 @@ mysqlwriter + doriswriter drdswriter odpswriter txtfilewriter @@ -97,7 +98,7 @@ gdbwriter cassandrawriter clickhousewriter - oscarwriter + plugin-rdbms-util plugin-unstructured-storage-util From adfb2581d3d04b29de6c88ab329804b6aee021e0 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 12 Mar 2021 18:53:07 +0800 Subject: [PATCH 004/251] fix null data convertion --- .../connector/datax/plugin/writer/doriswriter/DorisWriter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java index 0cbe579c..05cef7a4 100755 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java @@ -112,7 +112,8 @@ public class DorisWriter extends Writer { } StringBuilder sb = new StringBuilder(); for (int i = 0; i < record.getColumnNumber(); i++) { - sb.append(record.getColumn(i).getRawData().toString()); + Object value = record.getColumn(i).getRawData(); + sb.append(null == value ? "\\N" : value); if (i < record.getColumnNumber() - 1) { sb.append("\t"); } From 51b42804bebe5bdba2eb390b238394b18ff08799 Mon Sep 17 00:00:00 2001 From: fariel Date: Sat, 13 Mar 2021 17:08:46 +0800 Subject: [PATCH 005/251] add debug log --- .../doriswriter/manager/DorisStreamLoadVisitor.java | 8 +++----- .../writer/doriswriter/manager/DorisWriterManager.java | 5 +---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index a01b906b..90e4fdbb 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -1,7 +1,6 @@ package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; import java.io.IOException; -import java.io.Serializable; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -27,9 +26,7 @@ import java.util.List; import java.util.Map; -public class DorisStreamLoadVisitor implements Serializable { - - private static final long serialVersionUID = 1L; +public class DorisStreamLoadVisitor { private static final Logger LOG = LoggerFactory.getLogger(DorisStreamLoadVisitor.class); @@ -57,9 +54,10 @@ public class DorisStreamLoadVisitor implements Serializable { if (null == loadResult || !loadResult.containsKey(keyStatus)) { throw new IOException("Unable to flush data to doris: unknown result status."); } + LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); if (loadResult.get(keyStatus).equals("Fail")) { throw new IOException( - new StringBuilder("Failed to flush data to doris.").append(loadResult.get("Message").toString()).toString() + new StringBuilder("Failed to flush data to doris.\n").append(JSON.toJSONString(loadResult)).toString() ); } } diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java index 86d370a5..a5338ca9 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java @@ -4,16 +4,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.UUID; import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; -public class DorisWriterManager implements Serializable { - - private static final long serialVersionUID = 1L; +public class DorisWriterManager { private static final Logger LOG = LoggerFactory.getLogger(DorisWriterManager.class); From 8ba8e4973b51ac393f5d7dd1813c13d091832cb7 Mon Sep 17 00:00:00 2001 From: fariel Date: Mon, 15 Mar 2021 14:33:04 +0800 Subject: [PATCH 006/251] add support: `loadProps` --- .../writer/doriswriter/DorisWriter.java | 14 ++-- .../doriswriter/DorisWriterOptions.java | 24 ++++++ .../manager/DorisStreamLoadVisitor.java | 13 ++- .../doriswriter/row/DorisCsvSerializer.java | 79 +++++++++++++++++++ .../doriswriter/row/DorisISerializer.java | 11 +++ .../doriswriter/row/DorisJsonSerializer.java | 33 ++++++++ .../row/DorisSerializerFactory.java | 22 ++++++ 7 files changed, 186 insertions(+), 10 deletions(-) create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java index 05cef7a4..d88581ec 100755 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java @@ -9,6 +9,8 @@ import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.dorisdb.connector.datax.plugin.writer.doriswriter.manager.DorisWriterManager; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisISerializer; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisSerializerFactory; import com.dorisdb.connector.datax.plugin.writer.doriswriter.util.DorisWriterUtil; import org.slf4j.Logger; @@ -86,11 +88,13 @@ public class DorisWriter extends Writer { public static class Task extends Writer.Task { private DorisWriterManager writerManager; private DorisWriterOptions options; + private DorisISerializer rowSerializer; @Override public void init() { options = new DorisWriterOptions(super.getPluginJobConf()); writerManager = new DorisWriterManager(options); + rowSerializer = DorisSerializerFactory.createSerializer(options); } @Override @@ -110,15 +114,7 @@ public class DorisWriter extends Writer { record.getColumnNumber(), options.getColumns().size())); } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < record.getColumnNumber(); i++) { - Object value = record.getColumn(i).getRawData(); - sb.append(null == value ? "\\N" : value); - if (i < record.getColumnNumber() - 1) { - sb.append("\t"); - } - } - writerManager.writeRecord(sb.toString()); + writerManager.writeRecord(rowSerializer.serialize(record)); } } catch (Exception e) { throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java index 1d9cb2be..b4dbb0a3 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -7,6 +7,7 @@ import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import java.util.List; +import java.util.Map; public class DorisWriterOptions implements Serializable { @@ -17,6 +18,11 @@ public class DorisWriterOptions implements Serializable { private static final int BATCH_ROWS = 500000; private static final long BATCH_BYTES = 100 * MEGA_BYTES_SCALE; + private static final String KEY_LOAD_PROPS_FORMAT = "format"; + public enum StreamLoadFormat { + CSV, JSON; + } + private static final String KEY_USERNAME = "username"; private static final String KEY_PASSWORD = "password"; private static final String KEY_DATABASE = "database"; @@ -26,6 +32,7 @@ public class DorisWriterOptions implements Serializable { private static final String KEY_POST_SQL = "postSql"; private static final String KEY_JDBC_URL = "jdbcUrl"; private static final String KEY_LOAD_URL = "loadUrl"; + private static final String KEY_LOAD_PROPS = "loadProps"; private final Configuration options; @@ -74,6 +81,10 @@ public class DorisWriterOptions implements Serializable { return options.getList(KEY_POST_SQL, String.class); } + public Map getLoadProps() { + return options.getMap(KEY_LOAD_PROPS); + } + public int getMaxRetries() { return MAX_RETRIES; } @@ -86,6 +97,18 @@ public class DorisWriterOptions implements Serializable { return BATCH_BYTES; } + public StreamLoadFormat getStreamLoadFormat() { + Map loadProps = getLoadProps(); + if (null == loadProps) { + return StreamLoadFormat.CSV; + } + if (loadProps.containsKey(KEY_LOAD_PROPS_FORMAT) + && StreamLoadFormat.JSON.name().equalsIgnoreCase(String.valueOf(loadProps.get(KEY_LOAD_PROPS_FORMAT)))) { + return StreamLoadFormat.JSON; + } + return StreamLoadFormat.CSV; + } + private void validateStreamLoadUrl() { List urlList = getLoadUrlList(); for (String host : urlList) { @@ -102,6 +125,7 @@ public class DorisWriterOptions implements Serializable { KEY_PASSWORD, KEY_DATABASE, KEY_TABLE, + KEY_COLUMN, KEY_LOAD_URL }; for (String optionKey : requiredOptionKeys) { diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 90e4fdbb..68621d8f 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -91,7 +91,13 @@ public class DorisStreamLoadVisitor { } private byte[] joinRows(List rows) { - return String.join("\n", rows).getBytes(StandardCharsets.UTF_8); + if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + return String.join("\n", rows).getBytes(StandardCharsets.UTF_8); + } + if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + return new StringBuilder("[").append(String.join(",", rows)).append("]").toString().getBytes(StandardCharsets.UTF_8); + } + throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); } @SuppressWarnings("unchecked") @@ -110,6 +116,11 @@ public class DorisStreamLoadVisitor { if (null != cols && !cols.isEmpty()) { httpPut.setHeader("columns", String.join(",", cols)); } + if (null != writerOptions.getLoadProps()) { + for (Map.Entry entry : writerOptions.getLoadProps().entrySet()) { + httpPut.setHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } httpPut.setHeader("Expect", "100-continue"); httpPut.setHeader("label", label); httpPut.setHeader("Content-Type", "application/x-www-form-urlencoded"); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java new file mode 100644 index 00000000..7a22b212 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java @@ -0,0 +1,79 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.io.StringWriter; + +import com.alibaba.datax.common.element.Record; + +import com.google.common.base.Strings; + +public class DorisCsvSerializer implements DorisISerializer { + + private static final long serialVersionUID = 1L; + + private final String HEX_STRING = "0123456789ABCDEF"; + + private final String columnSeparator; + + public DorisCsvSerializer(String sp) { + this.columnSeparator = parseByteSeparator(sp); + } + + @Override + public String serialize(Record row) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < row.getColumnNumber(); i++) { + Object value = row.getColumn(i).getRawData(); + sb.append(null == value ? "\\N" : value); + if (i < row.getColumnNumber() - 1) { + sb.append(columnSeparator); + } + } + return sb.toString(); + } + + private String parseByteSeparator(String sp) { + if (Strings.isNullOrEmpty(sp)) { + // `\t` by default + return "\t"; + } + if (!sp.toUpperCase().startsWith("\\X")) { + return sp; + } + String hexStr = sp.substring(2); + // check hex str + if (hexStr.isEmpty()) { + throw new RuntimeException("Failed to parse column_separator: `Hex str is empty`"); + } + if (hexStr.length() % 2 != 0) { + throw new RuntimeException("Failed to parse column_separator: `Hex str length error`"); + } + for (char hexChar : hexStr.toUpperCase().toCharArray()) { + if (HEX_STRING.indexOf(hexChar) == -1) { + throw new RuntimeException("Failed to parse column_separator: `Hex str format error`"); + } + } + // transform to separator + StringWriter writer = new StringWriter(); + for (byte b : hexStrToBytes(hexStr)) { + writer.append((char) b); + } + return writer.toString(); + } + + private byte[] hexStrToBytes(String hexStr) { + String upperHexStr = hexStr.toUpperCase(); + int length = upperHexStr.length() / 2; + char[] hexChars = upperHexStr.toCharArray(); + byte[] bytes = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + bytes[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return bytes; + } + + private byte charToByte(char c) { + return (byte) HEX_STRING.indexOf(c); + } + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java new file mode 100644 index 00000000..92a73288 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java @@ -0,0 +1,11 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.io.Serializable; + +import com.alibaba.datax.common.element.Record; + +public interface DorisISerializer extends Serializable { + + String serialize(Record row); + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java new file mode 100644 index 00000000..5da3e9ae --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java @@ -0,0 +1,33 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.fastjson.JSON; + +public class DorisJsonSerializer implements DorisISerializer { + + private static final long serialVersionUID = 1L; + + private final List fieldNames; + + public DorisJsonSerializer(List fieldNames) { + this.fieldNames = fieldNames; + } + + @Override + public String serialize(Record row) { + if (null == fieldNames) { + return ""; + } + Map rowMap = new HashMap<>(fieldNames.size()); + int idx = 0; + for (String fieldName : fieldNames) { + rowMap.put(fieldName, row.getColumn(idx++).getRawData()); + } + return JSON.toJSONString(rowMap); + } + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java new file mode 100644 index 00000000..0816399e --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java @@ -0,0 +1,22 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.util.Map; + +import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; + +public class DorisSerializerFactory { + + private DorisSerializerFactory() {} + + public static DorisISerializer createSerializer(DorisWriterOptions writerOptions) { + if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + Map props = writerOptions.getLoadProps(); + return new DorisCsvSerializer(null == props || !props.containsKey("column_separator") ? null : String.valueOf(props.get("column_separator"))); + } + if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + return new DorisJsonSerializer(writerOptions.getColumns()); + } + throw new RuntimeException("Failed to create row serializer, unsupported `format` from stream load properties."); + } + +} From 70a480f5624e1daee425b8763ebedccc476ea093 Mon Sep 17 00:00:00 2001 From: fariel Date: Thu, 18 Mar 2021 16:18:04 +0800 Subject: [PATCH 007/251] modify doc && fix length calculating --- doriswriter/doc/doriswriter.md | 11 ++++++++++- .../doriswriter/manager/DorisWriterManager.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index 715afa8c..13600b5b 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -67,7 +67,8 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 "preSql": [], "postSql": [], "jdbcUrl": "jdbc:mysql://172.28.17.100:9030/", - "loadUrl": ["172.28.17.100:8030", "172.28.17.100:8030"] + "loadUrl": ["172.28.17.100:8030", "172.28.17.100:8030"], + "loadProps": {} } } } @@ -156,6 +157,14 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * 默认值:无
+* **loadProps** + + * 描述:StreamLoad 的请求参数,详情参照StreamLoad介绍页面。
+ + * 必选:否
+ + * 默认值:无
+ ### 3.3 类型转换 diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java index a5338ca9..da24448f 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java @@ -33,7 +33,7 @@ public class DorisWriterManager { try { buffer.add(record); batchCount++; - batchSize += record.length(); + batchSize += record.getBytes().length; if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { flush(createBatchLabel()); } From 5cd07ab08432647f4081cf18de9f6a2c91c68d32 Mon Sep 17 00:00:00 2001 From: fariel Date: Mon, 22 Mar 2021 20:03:38 +0800 Subject: [PATCH 008/251] fix date datetime timestamp convertion --- doriswriter/pom.xml | 6 +++ .../doriswriter/row/DorisBaseSerializer.java | 52 +++++++++++++++++++ .../doriswriter/row/DorisCsvSerializer.java | 4 +- .../doriswriter/row/DorisJsonSerializer.java | 5 +- 4 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java diff --git a/doriswriter/pom.xml b/doriswriter/pom.xml index 2bbf1d22..1524e358 100755 --- a/doriswriter/pom.xml +++ b/doriswriter/pom.xml @@ -41,6 +41,11 @@ commons-codec 1.9 + + org.apache.commons + commons-lang3 + 3.12.0 + commons-logging commons-logging @@ -108,6 +113,7 @@ + org.apache.commons:commons-lang3 commons-codec:commons-codec commons-logging:* org.apache.httpcomponents:httpclient diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java new file mode 100644 index 00000000..a46fc442 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java @@ -0,0 +1,52 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.util.TimeZone; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.Column.Type; +import com.alibaba.datax.common.util.Configuration; + +import org.apache.commons.lang3.time.DateFormatUtils; + +public class DorisBaseSerializer { + + static String datetimeFormat = "yyyy-MM-dd HH:mm:ss"; + + static String dateFormat = "yyyy-MM-dd"; + + static String timeFormat = "HH:mm:ss"; + + static String timeZone = "GMT+8"; + + static TimeZone timeZoner = TimeZone.getTimeZone(DorisBaseSerializer.timeZone); + + static void init(final Configuration configuration) { + DorisBaseSerializer.datetimeFormat = configuration.getString("common.column.datetimeFormat", datetimeFormat); + DorisBaseSerializer.timeFormat = configuration.getString("common.column.timeFormat", timeFormat); + DorisBaseSerializer.dateFormat = configuration.getString("common.column.dateFormat", dateFormat); + DorisBaseSerializer.timeZone = configuration.getString("common.column.timeZone", DorisBaseSerializer.timeZone); + DorisBaseSerializer.timeZoner = TimeZone.getTimeZone(DorisBaseSerializer.timeZone); + } + + protected String fieldConvertion(Column col) { + if (null == col.getRawData()) { + return null; + } + if (Type.DATE != col.getType()) { + return col.asString(); + } + DateColumn.DateType type = ((DateColumn)col).getSubType(); + if (type == DateColumn.DateType.DATE) { + return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.dateFormat, DorisBaseSerializer.timeZoner); + } + if (type == DateColumn.DateType.TIME) { + return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.timeFormat, DorisBaseSerializer.timeZoner); + } + if (type == DateColumn.DateType.DATETIME) { + return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.datetimeFormat, DorisBaseSerializer.timeZoner); + } + return null; + } + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java index 7a22b212..866c8d87 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java @@ -6,7 +6,7 @@ import com.alibaba.datax.common.element.Record; import com.google.common.base.Strings; -public class DorisCsvSerializer implements DorisISerializer { +public class DorisCsvSerializer extends DorisBaseSerializer implements DorisISerializer { private static final long serialVersionUID = 1L; @@ -22,7 +22,7 @@ public class DorisCsvSerializer implements DorisISerializer { public String serialize(Record row) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < row.getColumnNumber(); i++) { - Object value = row.getColumn(i).getRawData(); + String value = fieldConvertion(row.getColumn(i)); sb.append(null == value ? "\\N" : value); if (i < row.getColumnNumber() - 1) { sb.append(columnSeparator); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java index 5da3e9ae..3f74ac58 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java @@ -7,7 +7,7 @@ import java.util.Map; import com.alibaba.datax.common.element.Record; import com.alibaba.fastjson.JSON; -public class DorisJsonSerializer implements DorisISerializer { +public class DorisJsonSerializer extends DorisBaseSerializer implements DorisISerializer { private static final long serialVersionUID = 1L; @@ -25,7 +25,8 @@ public class DorisJsonSerializer implements DorisISerializer { Map rowMap = new HashMap<>(fieldNames.size()); int idx = 0; for (String fieldName : fieldNames) { - rowMap.put(fieldName, row.getColumn(idx++).getRawData()); + rowMap.put(fieldName, fieldConvertion(row.getColumn(idx))); + idx++; } return JSON.toJSONString(rowMap); } From dee644c9603a43d01982c8f7fb401e99852150f8 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 24 Mar 2021 15:17:39 +0800 Subject: [PATCH 009/251] modify doc --- doriswriter/doc/doriswriter.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index 13600b5b..c7aef093 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -168,7 +168,15 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 ### 3.3 类型转换 -传入的数据均会被转为字符串,并以`\t`作为列分隔符,`\n`作为行分隔符,组成`csv`文件进行StreamLoad导入操作。 +默认传入的数据均会被转为字符串,并以`\t`作为列分隔符,`\n`作为行分隔符,组成`csv`文件进行StreamLoad导入操作。 + +如需更改导入格式为`json`, 则正确配置 `loadProps` 即可: +```json +"loadProps": { + "format": "json", + "strip_outer_array": true +} +``` ## 4 性能报告 From ee9243cfe28cf36ac00e611cec824f4239474a9e Mon Sep 17 00:00:00 2001 From: fariel Date: Thu, 25 Mar 2021 15:49:41 +0800 Subject: [PATCH 010/251] aync flush version --- .../writer/doriswriter/DorisWriter.java | 2 +- .../doriswriter/DorisWriterOptions.java | 6 + .../doriswriter/manager/DorisFlushTuple.java | 20 +++ .../manager/DorisStreamLoadVisitor.java | 5 +- .../manager/DorisWriterManager.java | 114 ++++++++++++------ 5 files changed, 104 insertions(+), 43 deletions(-) create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java index d88581ec..8b3c414d 100755 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java @@ -124,7 +124,7 @@ public class DorisWriter extends Writer { @Override public void post() { try { - writerManager.flush(writerManager.createBatchLabel()); + writerManager.close(); } catch (Exception e) { throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); } diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java index b4dbb0a3..4229e256 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -32,6 +32,7 @@ public class DorisWriterOptions implements Serializable { private static final String KEY_POST_SQL = "postSql"; private static final String KEY_JDBC_URL = "jdbcUrl"; private static final String KEY_LOAD_URL = "loadUrl"; + private static final String KEY_FLUSH_QUEUE_LENGTH = "flushQueueLength"; private static final String KEY_LOAD_PROPS = "loadProps"; private final Configuration options; @@ -96,6 +97,11 @@ public class DorisWriterOptions implements Serializable { public long getBatchSize() { return BATCH_BYTES; } + + public int getFlushQueueLength() { + Integer len = options.getInt(KEY_FLUSH_QUEUE_LENGTH); + return null == len ? 1 : len; + } public StreamLoadFormat getStreamLoadFormat() { Map loadProps = getLoadProps(); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java new file mode 100644 index 00000000..24bcc9c6 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java @@ -0,0 +1,20 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; + +import java.util.List; + +public class DorisFlushTuple { + + private String label; + private Long bytes; + private List rows; + + public DorisFlushTuple(String label, Long bytes, List rows) { + this.label = label; + this.bytes = bytes; + this.rows = rows; + } + + public String getLabel() { return label; } + public Long getBytes() { return bytes; } + public List getRows() { return rows; } +} \ No newline at end of file diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 68621d8f..7ebfced6 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -37,7 +37,7 @@ public class DorisStreamLoadVisitor { this.writerOptions = writerOptions; } - public void doStreamLoad(String label, List labeledRows) throws IOException { + public void doStreamLoad(DorisFlushTuple flushData) throws IOException { String host = getAvailableHost(); if (null == host) { throw new IOException("None of the host in `load_url` could be connected."); @@ -49,7 +49,8 @@ public class DorisStreamLoadVisitor { .append(writerOptions.getTable()) .append("/_stream_load") .toString(); - Map loadResult = doHttpPut(loadUrl, label, joinRows(labeledRows)); + LOG.debug(String.format("Start to join batch data: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); + Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows())); final String keyStatus = "Status"; if (null == loadResult || !loadResult.containsKey(keyStatus)) { throw new IOException("Unable to flush data to doris: unknown result status."); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java index da24448f..d7e9ad33 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java @@ -7,8 +7,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.LinkedBlockingDeque; import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; +import com.google.common.base.Strings; public class DorisWriterManager { @@ -22,10 +24,13 @@ public class DorisWriterManager { private long batchSize = 0; private volatile boolean closed = false; private volatile Exception flushException; + private final LinkedBlockingDeque flushQueue; public DorisWriterManager(DorisWriterOptions writerOptions) { this.writerOptions = writerOptions; this.dorisStreamLoadVisitor = new DorisStreamLoadVisitor(writerOptions); + flushQueue = new LinkedBlockingDeque<>(writerOptions.getFlushQueueLength()); + this.startAsyncFlushing(); } public final synchronized void writeRecord(String record) throws IOException { @@ -35,26 +40,88 @@ public class DorisWriterManager { batchCount++; batchSize += record.getBytes().length; if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { - flush(createBatchLabel()); + String label = createBatchLabel(); + LOG.debug(String.format("Doris buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); + flush(label, false); } } catch (Exception e) { throw new IOException("Writing records to Doris failed.", e); } } - public synchronized void flush(String label) throws IOException { + public synchronized void flush(String label, boolean waitUtilDone) throws Exception { checkFlushException(); if (batchCount == 0) { + if (waitUtilDone) { + waitAsyncFlushingDone(); + } return; } + flushQueue.put(new DorisFlushTuple(label, batchSize, new ArrayList<>(buffer))); + if (waitUtilDone) { + // wait the last flush + waitAsyncFlushingDone(); + } + buffer.clear(); + batchCount = 0; + batchSize = 0; + } + + public synchronized void close() { + if (!closed) { + closed = true; + try { + String label = createBatchLabel(); + if (batchCount > 0) LOG.debug(String.format("Doris Sink is about to close: label[%s].", label)); + flush(label, true); + } catch (Exception e) { + throw new RuntimeException("Writing records to Doris failed.", e); + } + } + checkFlushException(); + } + + public String createBatchLabel() { + return UUID.randomUUID().toString(); + } + + private void startAsyncFlushing() { + // start flush thread + Thread flushThread = new Thread(new Runnable(){ + public void run() { + while(true) { + try { + asyncFlush(); + } catch (Exception e) { + flushException = e; + } + } + } + }); + flushThread.setDaemon(true); + flushThread.start(); + } + + private void waitAsyncFlushingDone() throws InterruptedException { + // wait previous flushings + for (int i = 0; i <= writerOptions.getFlushQueueLength(); i++) { + flushQueue.put(new DorisFlushTuple("", 0l, null)); + } + } + + private void asyncFlush() throws Exception { + DorisFlushTuple flushData = flushQueue.take(); + if (Strings.isNullOrEmpty(flushData.getLabel())) { + return; + } + LOG.debug(String.format("Async stream load: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { try { - tryToFlush(label); - buffer.clear(); - batchCount = 0; - batchSize = 0; + // flush to Doris with stream load + dorisStreamLoadVisitor.doStreamLoad(flushData); + LOG.info(String.format("Async stream load finished: label[%s].", flushData.getLabel())); break; - } catch (IOException e) { + } catch (Exception e) { LOG.warn("Failed to flush batch data to doris, retry times = {}", i, e); if (i >= writerOptions.getMaxRetries()) { throw new IOException(e); @@ -68,39 +135,6 @@ public class DorisWriterManager { } } } - - public synchronized void close() { - if (!closed) { - closed = true; - - if (batchCount > 0) { - try { - flush(createBatchLabel()); - } catch (Exception e) { - throw new RuntimeException("Writing records to Doris failed.", e); - } - } - } - checkFlushException(); - } - - public String createBatchLabel() { - return UUID.randomUUID().toString(); - } - - public List getBufferedBatchList() { - return buffer; - } - - public void setBufferedBatchList(List buffer) { - this.buffer.clear(); - this.buffer.addAll(buffer); - } - - private void tryToFlush(String label) throws IOException { - // flush to Doris with stream load - dorisStreamLoadVisitor.doStreamLoad(label, buffer); - } private void checkFlushException() { if (flushException != null) { From 048e40cfea80798f926293eb5c97bcd016a5eb90 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 7 Apr 2021 15:23:47 +0800 Subject: [PATCH 011/251] add readme --- doriswriter/doc/doriswriter.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index c7aef093..80b2229b 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -169,8 +169,14 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 ### 3.3 类型转换 默认传入的数据均会被转为字符串,并以`\t`作为列分隔符,`\n`作为行分隔符,组成`csv`文件进行StreamLoad导入操作。 +如需更改列分隔符, 则正确配置 `loadProps` 即可: +```json +"loadProps": { + "column_separator": "\\x01" +} +``` -如需更改导入格式为`json`, 则正确配置 `loadProps` 即可: +如需更改导入格式为`json`, 则正确配置 `loadProps` 即可: ```json "loadProps": { "format": "json", From cac8434bbbb9adb6d62dbfd94a836efc5ea389b2 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 7 Apr 2021 15:54:21 +0800 Subject: [PATCH 012/251] make batch size smaller to satisfy be limitations --- .../datax/plugin/writer/doriswriter/DorisWriterOptions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java index 4229e256..bad4ed73 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -16,7 +16,7 @@ public class DorisWriterOptions implements Serializable { private static final long MEGA_BYTES_SCALE = KILO_BYTES_SCALE * KILO_BYTES_SCALE; private static final int MAX_RETRIES = 1; private static final int BATCH_ROWS = 500000; - private static final long BATCH_BYTES = 100 * MEGA_BYTES_SCALE; + private static final long BATCH_BYTES = 90 * MEGA_BYTES_SCALE; private static final String KEY_LOAD_PROPS_FORMAT = "format"; public enum StreamLoadFormat { From 342c044aaa4567a9709ca97ee23a9a75c6ad3962 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 30 Apr 2021 10:55:02 +0800 Subject: [PATCH 013/251] add `maxBatchRows` `maxBatchSize` --- .../plugin/writer/doriswriter/DorisWriterOptions.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java index bad4ed73..9add926d 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -31,6 +31,8 @@ public class DorisWriterOptions implements Serializable { private static final String KEY_PRE_SQL = "preSql"; private static final String KEY_POST_SQL = "postSql"; private static final String KEY_JDBC_URL = "jdbcUrl"; + private static final String KEY_MAX_BATCH_ROWS = "maxBatchRows"; + private static final String KEY_MAX_BATCH_SIZE = "maxBatchSize"; private static final String KEY_LOAD_URL = "loadUrl"; private static final String KEY_FLUSH_QUEUE_LENGTH = "flushQueueLength"; private static final String KEY_LOAD_PROPS = "loadProps"; @@ -91,11 +93,13 @@ public class DorisWriterOptions implements Serializable { } public int getBatchRows() { - return BATCH_ROWS; + Integer rows = options.getInt(KEY_MAX_BATCH_ROWS); + return null == rows ? BATCH_ROWS : rows; } public long getBatchSize() { - return BATCH_BYTES; + Long size = options.getLong(KEY_MAX_BATCH_SIZE); + return null == size ? BATCH_BYTES : size; } public int getFlushQueueLength() { From a8f70b1f2c69619e911338307e555d011100f869 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 30 Apr 2021 18:31:25 +0800 Subject: [PATCH 014/251] add row_delimiter parameter --- doriswriter/doc/doriswriter.md | 19 ++++++- .../manager/DorisStreamLoadVisitor.java | 9 ++- .../doriswriter/row/DorisCsvSerializer.java | 49 +---------------- .../doriswriter/row/DorisDelimiterParser.java | 55 +++++++++++++++++++ 4 files changed, 82 insertions(+), 50 deletions(-) create mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index 80b2229b..fbe6e4bb 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -157,6 +157,22 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * 默认值:无
+* **maxBatchRows** + + * 描述:单次StreamLoad导入的最大行数
+ + * 必选:否
+ + * 默认值:500000 (50W)
+ +* **maxBatchSize** + + * 描述:单次StreamLoad导入的最大字节数。
+ + * 必选:否
+ + * 默认值:104857600 (100M) + * **loadProps** * 描述:StreamLoad 的请求参数,详情参照StreamLoad介绍页面。
@@ -172,7 +188,8 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 如需更改列分隔符, 则正确配置 `loadProps` 即可: ```json "loadProps": { - "column_separator": "\\x01" + "column_separator": "\\x01", + "row_delimiter": "\\x02" } ``` diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 7ebfced6..1598d8f4 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -3,10 +3,12 @@ package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import com.alibaba.fastjson.JSON; import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; +import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisDelimiterParser; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpEntity; @@ -93,7 +95,12 @@ public class DorisStreamLoadVisitor { private byte[] joinRows(List rows) { if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { - return String.join("\n", rows).getBytes(StandardCharsets.UTF_8); + Map props = writerOptions.getLoadProps(); + String lineDelimiter = "\n"; + if (null != props && props.containsKey("row_delimiter")) { + lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n"); + } + return (String.join(lineDelimiter, rows) + lineDelimiter).getBytes(StandardCharsets.UTF_8); } if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { return new StringBuilder("[").append(String.join(",", rows)).append("]").toString().getBytes(StandardCharsets.UTF_8); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java index 866c8d87..862e0b73 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java @@ -10,12 +10,10 @@ public class DorisCsvSerializer extends DorisBaseSerializer implements DorisISer private static final long serialVersionUID = 1L; - private final String HEX_STRING = "0123456789ABCDEF"; - private final String columnSeparator; public DorisCsvSerializer(String sp) { - this.columnSeparator = parseByteSeparator(sp); + this.columnSeparator = DorisDelimiterParser.parse(sp, "\t"); } @Override @@ -31,49 +29,4 @@ public class DorisCsvSerializer extends DorisBaseSerializer implements DorisISer return sb.toString(); } - private String parseByteSeparator(String sp) { - if (Strings.isNullOrEmpty(sp)) { - // `\t` by default - return "\t"; - } - if (!sp.toUpperCase().startsWith("\\X")) { - return sp; - } - String hexStr = sp.substring(2); - // check hex str - if (hexStr.isEmpty()) { - throw new RuntimeException("Failed to parse column_separator: `Hex str is empty`"); - } - if (hexStr.length() % 2 != 0) { - throw new RuntimeException("Failed to parse column_separator: `Hex str length error`"); - } - for (char hexChar : hexStr.toUpperCase().toCharArray()) { - if (HEX_STRING.indexOf(hexChar) == -1) { - throw new RuntimeException("Failed to parse column_separator: `Hex str format error`"); - } - } - // transform to separator - StringWriter writer = new StringWriter(); - for (byte b : hexStrToBytes(hexStr)) { - writer.append((char) b); - } - return writer.toString(); - } - - private byte[] hexStrToBytes(String hexStr) { - String upperHexStr = hexStr.toUpperCase(); - int length = upperHexStr.length() / 2; - char[] hexChars = upperHexStr.toCharArray(); - byte[] bytes = new byte[length]; - for (int i = 0; i < length; i++) { - int pos = i * 2; - bytes[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); - } - return bytes; - } - - private byte charToByte(char c) { - return (byte) HEX_STRING.indexOf(c); - } - } diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java new file mode 100644 index 00000000..3fd58fa5 --- /dev/null +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java @@ -0,0 +1,55 @@ +package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; + +import java.io.StringWriter; + +import com.google.common.base.Strings; + +public class DorisDelimiterParser { + + private static final String HEX_STRING = "0123456789ABCDEF"; + + public static String parse(String sp, String dSp) throws RuntimeException { + if (Strings.isNullOrEmpty(sp)) { + return dSp; + } + if (!sp.toUpperCase().startsWith("\\X")) { + return sp; + } + String hexStr = sp.substring(2); + // check hex str + if (hexStr.isEmpty()) { + throw new RuntimeException("Failed to parse delimiter: `Hex str is empty`"); + } + if (hexStr.length() % 2 != 0) { + throw new RuntimeException("Failed to parse delimiter: `Hex str length error`"); + } + for (char hexChar : hexStr.toUpperCase().toCharArray()) { + if (HEX_STRING.indexOf(hexChar) == -1) { + throw new RuntimeException("Failed to parse delimiter: `Hex str format error`"); + } + } + // transform to separator + StringWriter writer = new StringWriter(); + for (byte b : hexStrToBytes(hexStr)) { + writer.append((char) b); + } + return writer.toString(); + } + + private static byte[] hexStrToBytes(String hexStr) { + String upperHexStr = hexStr.toUpperCase(); + int length = upperHexStr.length() / 2; + char[] hexChars = upperHexStr.toCharArray(); + byte[] bytes = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + bytes[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return bytes; + } + + private static byte charToByte(char c) { + return (byte) HEX_STRING.indexOf(c); + } + +} From b936f0562a1a9aaf3621143b5551c1d44da37bd0 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 19 May 2021 17:26:20 +0800 Subject: [PATCH 015/251] convert bit && bool -> int --- .../plugin/writer/doriswriter/row/DorisBaseSerializer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java index a46fc442..8e77d719 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java @@ -33,6 +33,9 @@ public class DorisBaseSerializer { if (null == col.getRawData()) { return null; } + if (Type.BOOL == col.getType()) { + return String.valueOf(col.asLong()); + } if (Type.DATE != col.getType()) { return col.asString(); } From 0d0dd3b75c6f3bf612c0b94c83a4dfb35c999c24 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 21 May 2021 13:23:11 +0800 Subject: [PATCH 016/251] optimize joinrows function --- .../manager/DorisStreamLoadVisitor.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 1598d8f4..8568c7b6 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -100,10 +100,25 @@ public class DorisStreamLoadVisitor { if (null != props && props.containsKey("row_delimiter")) { lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n"); } - return (String.join(lineDelimiter, rows) + lineDelimiter).getBytes(StandardCharsets.UTF_8); + StringBuilder sb = new StringBuilder(); + for (String row : rows) { + sb.append(row).append(lineDelimiter); + } + return sb.toString().getBytes(StandardCharsets.UTF_8); } if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - return new StringBuilder("[").append(String.join(",", rows)).append("]").toString().getBytes(StandardCharsets.UTF_8); + StringBuilder sb = new StringBuilder(); + sb.append("["); + boolean isFirstElement = true; + for (String row : rows) { + if (!isFirstElement) { + sb.append(","); + } + sb.append(row); + isFirstElement = false; + } + sb.append("]"); + return sb.toString().getBytes(StandardCharsets.UTF_8); } throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); } From f4d25be8fee14ad87428522edd5d88503d6cff88 Mon Sep 17 00:00:00 2001 From: fariel Date: Thu, 1 Jul 2021 11:17:17 +0800 Subject: [PATCH 017/251] use internal date convertion --- .../doriswriter/row/DorisBaseSerializer.java | 41 +------------------ 1 file changed, 2 insertions(+), 39 deletions(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java index 8e77d719..9876b0f0 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java @@ -1,34 +1,10 @@ package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; -import java.util.TimeZone; - import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.DateColumn; import com.alibaba.datax.common.element.Column.Type; -import com.alibaba.datax.common.util.Configuration; - -import org.apache.commons.lang3.time.DateFormatUtils; public class DorisBaseSerializer { - static String datetimeFormat = "yyyy-MM-dd HH:mm:ss"; - - static String dateFormat = "yyyy-MM-dd"; - - static String timeFormat = "HH:mm:ss"; - - static String timeZone = "GMT+8"; - - static TimeZone timeZoner = TimeZone.getTimeZone(DorisBaseSerializer.timeZone); - - static void init(final Configuration configuration) { - DorisBaseSerializer.datetimeFormat = configuration.getString("common.column.datetimeFormat", datetimeFormat); - DorisBaseSerializer.timeFormat = configuration.getString("common.column.timeFormat", timeFormat); - DorisBaseSerializer.dateFormat = configuration.getString("common.column.dateFormat", dateFormat); - DorisBaseSerializer.timeZone = configuration.getString("common.column.timeZone", DorisBaseSerializer.timeZone); - DorisBaseSerializer.timeZoner = TimeZone.getTimeZone(DorisBaseSerializer.timeZone); - } - protected String fieldConvertion(Column col) { if (null == col.getRawData()) { return null; @@ -36,20 +12,7 @@ public class DorisBaseSerializer { if (Type.BOOL == col.getType()) { return String.valueOf(col.asLong()); } - if (Type.DATE != col.getType()) { - return col.asString(); - } - DateColumn.DateType type = ((DateColumn)col).getSubType(); - if (type == DateColumn.DateType.DATE) { - return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.dateFormat, DorisBaseSerializer.timeZoner); - } - if (type == DateColumn.DateType.TIME) { - return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.timeFormat, DorisBaseSerializer.timeZoner); - } - if (type == DateColumn.DateType.DATETIME) { - return DateFormatUtils.format(col.asDate(), DorisBaseSerializer.datetimeFormat, DorisBaseSerializer.timeZoner); - } - return null; + return col.asString(); } - + } From fd42a23b686425e2d1c456aeafec0798965974da Mon Sep 17 00:00:00 2001 From: fariel Date: Thu, 22 Jul 2021 18:52:47 +0800 Subject: [PATCH 018/251] optimize heap memory usage --- .../manager/DorisStreamLoadVisitor.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 8568c7b6..f792bfaf 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -3,7 +3,7 @@ package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; -import java.net.URLEncoder; +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import com.alibaba.fastjson.JSON; @@ -52,7 +52,7 @@ public class DorisStreamLoadVisitor { .append("/_stream_load") .toString(); LOG.debug(String.format("Start to join batch data: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); - Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows())); + Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows(), flushData.getBytes().intValue())); final String keyStatus = "Status"; if (null == loadResult || !loadResult.containsKey(keyStatus)) { throw new IOException("Unable to flush data to doris: unknown result status."); @@ -93,32 +93,32 @@ public class DorisStreamLoadVisitor { } } - private byte[] joinRows(List rows) { + private byte[] joinRows(List rows, int totalBytes) { if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { Map props = writerOptions.getLoadProps(); - String lineDelimiter = "\n"; - if (null != props && props.containsKey("row_delimiter")) { - lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n"); - } - StringBuilder sb = new StringBuilder(); + ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size()); + byte[] lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n").getBytes(StandardCharsets.UTF_8); for (String row : rows) { - sb.append(row).append(lineDelimiter); + bos.put(row.getBytes(StandardCharsets.UTF_8)); + bos.put(lineDelimiter); } - return sb.toString().getBytes(StandardCharsets.UTF_8); + return bos.array(); } + if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - StringBuilder sb = new StringBuilder(); - sb.append("["); + ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() + 1); + bos.put("[".getBytes(StandardCharsets.UTF_8)); + byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); boolean isFirstElement = true; for (String row : rows) { if (!isFirstElement) { - sb.append(","); + bos.put(jsonDelimiter); } - sb.append(row); + bos.put(row.getBytes(StandardCharsets.UTF_8)); isFirstElement = false; } - sb.append("]"); - return sb.toString().getBytes(StandardCharsets.UTF_8); + bos.put("]".getBytes(StandardCharsets.UTF_8)); + return bos.array(); } throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); } From f9391a78e713d30e13d26735d9614b8e50143cc0 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 23 Jul 2021 14:38:43 +0800 Subject: [PATCH 019/251] optimize buffer allocated logic --- .../writer/doriswriter/manager/DorisStreamLoadVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index f792bfaf..0bea3bdc 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -106,7 +106,7 @@ public class DorisStreamLoadVisitor { } if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() + 1); + ByteBuffer bos = ByteBuffer.allocate(totalBytes + (rows.isEmpty() ? 2 : rows.size() + 1)); bos.put("[".getBytes(StandardCharsets.UTF_8)); byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); boolean isFirstElement = true; From 293286ea142da8904988ef64c888e1f2cccea719 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 13 Aug 2021 10:29:03 +0800 Subject: [PATCH 020/251] remove ` from columns --- .../datax/plugin/writer/doriswriter/DorisWriterOptions.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java index 9add926d..1b3f525f 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java @@ -8,6 +8,7 @@ import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class DorisWriterOptions implements Serializable { @@ -73,7 +74,7 @@ public class DorisWriterOptions implements Serializable { } public List getColumns() { - return options.getList(KEY_COLUMN, String.class); + return options.getList(KEY_COLUMN, String.class).stream().map(str -> str.replace("`", "")).collect(Collectors.toList()); } public List getPreSqlList() { From 70975a0ed54c0f7ae3d067dc2fd3f414f2b105c4 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 13 Aug 2021 10:29:22 +0800 Subject: [PATCH 021/251] fix bufferoverflow --- .../writer/doriswriter/manager/DorisStreamLoadVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java index 0bea3bdc..7556f72e 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java @@ -96,8 +96,8 @@ public class DorisStreamLoadVisitor { private byte[] joinRows(List rows, int totalBytes) { if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { Map props = writerOptions.getLoadProps(); - ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size()); byte[] lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n").getBytes(StandardCharsets.UTF_8); + ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); for (String row : rows) { bos.put(row.getBytes(StandardCharsets.UTF_8)); bos.put(lineDelimiter); From 24e80b55bba090519e3194e9464374501cfb537c Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Tue, 17 Aug 2021 10:43:33 +0800 Subject: [PATCH 022/251] =?UTF-8?q?feature:=20=E6=96=B0=E5=A2=9EDigestTran?= =?UTF-8?q?sformer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../transformer/DigestTransformer.java | 87 +++++++++++++++++++ .../GroovyTransformerStaticUtil.java | 8 ++ .../transformer/TransformerRegistry.java | 1 + 3 files changed, 96 insertions(+) create mode 100644 core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java diff --git a/core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java b/core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java new file mode 100644 index 00000000..d2bf1431 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java @@ -0,0 +1,87 @@ +package com.alibaba.datax.core.transport.transformer; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.transformer.Transformer; + +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang.StringUtils; + +import java.util.Arrays; + +/** + * no comments. + * + * @author XuDaojie + * @since 2021-08-16 + */ +public class DigestTransformer extends Transformer { + + private static final String MD5 = "md5"; + private static final String SHA1 = "sha1"; + private static final String TO_UPPER_CASE = "toUpperCase"; + private static final String TO_LOWER_CASE = "toLowerCase"; + + public DigestTransformer() { + setTransformerName("dx_digest"); + } + + @Override + public Record evaluate(Record record, Object... paras) { + + int columnIndex; + String type; + String charType; + + try { + if (paras.length != 3) { + throw new RuntimeException("dx_digest paras length must be 3"); + } + + columnIndex = (Integer) paras[0]; + type = (String) paras[1]; + charType = (String) paras[2]; + + if (!StringUtils.equalsIgnoreCase(MD5, type) && !StringUtils.equalsIgnoreCase(SHA1, type)) { + throw new RuntimeException("dx_digest paras index 1 must be md5 or sha1"); + } + if (!StringUtils.equalsIgnoreCase(TO_UPPER_CASE, charType) && !StringUtils.equalsIgnoreCase(TO_LOWER_CASE, charType)) { + throw new RuntimeException("dx_digest paras index 2 must be toUpperCase or toLowerCase"); + } + } catch (Exception e) { + throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER, "paras:" + Arrays.asList(paras) + " => " + e.getMessage()); + } + + Column column = record.getColumn(columnIndex); + + try { + String oriValue = column.asString(); + + // 如果字段为空,作为空字符串处理 + if (oriValue == null) { + oriValue = ""; + } + String newValue; + if (MD5.equals(type)) { + newValue = DigestUtils.md5Hex(oriValue); + } else { + newValue = DigestUtils.sha1Hex(oriValue); + } + + if (TO_UPPER_CASE.equals(charType)) { + newValue = newValue.toUpperCase(); + } else { + newValue = newValue.toLowerCase(); + } + + record.setColumn(columnIndex, new StringColumn(newValue)); + + } catch (Exception e) { + throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_RUN_EXCEPTION, e.getMessage(), e); + } + return record; + } + +} diff --git a/core/src/main/java/com/alibaba/datax/core/transport/transformer/GroovyTransformerStaticUtil.java b/core/src/main/java/com/alibaba/datax/core/transport/transformer/GroovyTransformerStaticUtil.java index 4c872993..487a8be8 100644 --- a/core/src/main/java/com/alibaba/datax/core/transport/transformer/GroovyTransformerStaticUtil.java +++ b/core/src/main/java/com/alibaba/datax/core/transport/transformer/GroovyTransformerStaticUtil.java @@ -1,10 +1,18 @@ package com.alibaba.datax.core.transport.transformer; +import org.apache.commons.codec.digest.DigestUtils; + /** * GroovyTransformer的帮助类,供groovy代码使用,必须全是static的方法 * Created by liqiang on 16/3/4. */ public class GroovyTransformerStaticUtil { + public static String md5(final String data) { + return DigestUtils.md5Hex(data); + } + public static String sha1(final String data) { + return DigestUtils.sha1Hex(data); + } } diff --git a/core/src/main/java/com/alibaba/datax/core/transport/transformer/TransformerRegistry.java b/core/src/main/java/com/alibaba/datax/core/transport/transformer/TransformerRegistry.java index 96a0d988..3c625153 100644 --- a/core/src/main/java/com/alibaba/datax/core/transport/transformer/TransformerRegistry.java +++ b/core/src/main/java/com/alibaba/datax/core/transport/transformer/TransformerRegistry.java @@ -36,6 +36,7 @@ public class TransformerRegistry { registTransformer(new ReplaceTransformer()); registTransformer(new FilterTransformer()); registTransformer(new GroovyTransformer()); + registTransformer(new DigestTransformer()); } public static void loadTransformerFromLocalStorage() { From 9af62e5aa063ace4d845c5044866a40fb80585d9 Mon Sep 17 00:00:00 2001 From: XuDaojie Date: Fri, 20 Aug 2021 10:38:10 +0800 Subject: [PATCH 023/251] update: transformer.md --- transformer/doc/transformer.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/transformer/doc/transformer.md b/transformer/doc/transformer.md index 247ab39b..260c0fb6 100644 --- a/transformer/doc/transformer.md +++ b/transformer/doc/transformer.md @@ -59,7 +59,17 @@ dx_replace(1,"5","10","****") column 1的value为“dataxTest”=>"data****" dx_filter(1,"like","dataTest") dx_filter(1,">=","10") ``` -5. dx_groovy +5. dx_digest +* 参数:3个 + * 第一个参数:字段编号,对应record中第几个字段。 + * 第二个参数:hash类型,md5、sha1 + * 第三个参数:hash值大小写 toUpperCase(大写)、toLowerCase(小写) +* 返回: 返回指定类型的hashHex,如果字段为空,则转为空字符串,再返回对应hashHex +* 举例: +``` +dx_digest(1,"md5","toUpperCase"), column 1的值为 xyzzzzz => 9CDFFC4FA4E45A99DB8BBCD762ACFFA2 +``` +6. dx_groovy * 参数。 * 第一个参数: groovy code * 第二个参数(列表或者为空):extraPackage @@ -67,7 +77,9 @@ dx_filter(1,">=","10") * dx_groovy只能调用一次。不能多次调用。 * groovy code中支持java.lang, java.util的包,可直接引用的对象有record,以及element下的各种column(BoolColumn.class,BytesColumn.class,DateColumn.class,DoubleColumn.class,LongColumn.class,StringColumn.class)。不支持其他包,如果用户有需要用到其他包,可设置extraPackage,注意extraPackage不支持第三方jar包。 * groovy code中,返回更新过的Record(比如record.setColumn(columnIndex, new StringColumn(newValue));),或者null。返回null表示过滤此行。 - * 用户可以直接调用静态的Util方式(GroovyTransformerStaticUtil),目前GroovyTransformerStaticUtil的方法列表 (按需补充): + * 用户可以直接调用静态的Util方式(GroovyTransformerStaticUtil),目前GroovyTransformerStaticUtil的方法列表: + * md5(String):String + * sha1(String):String * 举例: ``` groovy 实现的subStr: @@ -109,7 +121,7 @@ String code3 = "Column column = record.getColumn(1);\n" + ``` ## Job定义 -* 本例中,配置3个UDF。 +* 本例中,配置4个UDF。 ``` { @@ -176,6 +188,14 @@ String code3 = "Column column = record.getColumn(1);\n" + "paras":["3","4","****"] } }, + { + "name": "dx_digest", + "parameter": + { + "columnIndex":3, + "paras":["md5", "toLowerCase"] + } + }, { "name": "dx_groovy", "parameter": From 787421fa8b775db0b8e6d68af91a9ad04d5a193f Mon Sep 17 00:00:00 2001 From: wz497345846 <497345846@qq.com> Date: Tue, 24 Aug 2021 16:05:15 +0800 Subject: [PATCH 024/251] Update mongodbwriter.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 错别字 --- mongodbwriter/doc/mongodbwriter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mongodbwriter/doc/mongodbwriter.md b/mongodbwriter/doc/mongodbwriter.md index e30008db..74de8a0a 100644 --- a/mongodbwriter/doc/mongodbwriter.md +++ b/mongodbwriter/doc/mongodbwriter.md @@ -139,7 +139,7 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 * splitter:特殊分隔符,当且仅当要处理的字符串要用分隔符分隔为字符数组时,才使用这个参数,通过这个参数指定的分隔符,将字符串分隔存储到MongoDB的数组中。【选填】 * upsertInfo:指定了传输数据时更新的信息。【选填】 * isUpsert:当设置为true时,表示针对相同的upsertKey做更新操作。【选填】 -* upsertKey:upsertKey指定了没行记录的业务主键。用来做更新时使用。【选填】 +* upsertKey:upsertKey指定了每行记录的业务主键。用来做更新时使用。【选填】 #### 5 类型转换 @@ -154,4 +154,4 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 #### 6 性能报告 -#### 7 测试报告 \ No newline at end of file +#### 7 测试报告 From 881ab49359e258fe675e8bf223a09e90605d08dd Mon Sep 17 00:00:00 2001 From: fariel Date: Tue, 31 Aug 2021 20:34:30 +0800 Subject: [PATCH 025/251] add starrocks writer --- .../doriswriter/row/DorisISerializer.java | 11 ----- .../row/DorisSerializerFactory.java | 22 ---------- doriswriter/src/main/resources/plugin.json | 6 --- package.xml | 2 +- pom.xml | 2 +- .../doc/starrockswriter.md | 20 +++++----- {doriswriter => starrockswriter}/pom.xml | 10 ++--- .../src/main/assembly/package.xml | 8 ++-- .../writer/doriswriter/StarRocksWriter.java | 40 +++++++++---------- .../doriswriter/StarRocksWriterOptions.java | 6 +-- .../manager/StarRocksFlushTuple.java | 6 +-- .../manager/StarRocksStreamLoadVisitor.java | 26 ++++++------ .../manager/StarRocksWriterManager.java | 40 +++++++++---------- .../row/StarRocksBaseSerializer.java | 4 +- .../row/StarRocksCsvSerializer.java | 8 ++-- .../row/StarRocksDelimiterParser.java | 4 +- .../doriswriter/row/StarRocksISerializer.java | 11 +++++ .../row/StarRocksJsonSerializer.java | 6 +-- .../row/StarRocksSerializerFactory.java | 22 ++++++++++ .../doriswriter/util/StarRocksWriterUtil.java | 18 ++++----- .../src/main/resources/plugin.json | 6 +++ .../main/resources/plugin_job_template.json | 2 +- 22 files changed, 140 insertions(+), 140 deletions(-) delete mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java delete mode 100644 doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java delete mode 100755 doriswriter/src/main/resources/plugin.json rename doriswriter/doc/doriswriter.md => starrockswriter/doc/starrockswriter.md (84%) rename {doriswriter => starrockswriter}/pom.xml (93%) rename {doriswriter => starrockswriter}/src/main/assembly/package.xml (76%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java (73%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java (96%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java (64%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java (84%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java (70%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java (76%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java (69%) rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java (93%) create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java (75%) create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java rename doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java => starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java (79%) create mode 100755 starrockswriter/src/main/resources/plugin.json rename {doriswriter => starrockswriter}/src/main/resources/plugin_job_template.json (88%) diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java deleted file mode 100644 index 92a73288..00000000 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisISerializer.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; - -import java.io.Serializable; - -import com.alibaba.datax.common.element.Record; - -public interface DorisISerializer extends Serializable { - - String serialize(Record row); - -} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java b/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java deleted file mode 100644 index 0816399e..00000000 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisSerializerFactory.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; - -import java.util.Map; - -import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; - -public class DorisSerializerFactory { - - private DorisSerializerFactory() {} - - public static DorisISerializer createSerializer(DorisWriterOptions writerOptions) { - if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { - Map props = writerOptions.getLoadProps(); - return new DorisCsvSerializer(null == props || !props.containsKey("column_separator") ? null : String.valueOf(props.get("column_separator"))); - } - if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - return new DorisJsonSerializer(writerOptions.getColumns()); - } - throw new RuntimeException("Failed to create row serializer, unsupported `format` from stream load properties."); - } - -} diff --git a/doriswriter/src/main/resources/plugin.json b/doriswriter/src/main/resources/plugin.json deleted file mode 100755 index 081ddace..00000000 --- a/doriswriter/src/main/resources/plugin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "doriswriter", - "class": "com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriter", - "description": "useScene: prod. mechanism: DorisStreamLoad. warn: The more you know about the database, the less problems you encounter.", - "developer": "dorisdb" -} \ No newline at end of file diff --git a/package.xml b/package.xml index 347ee81a..4a2e1fc8 100755 --- a/package.xml +++ b/package.xml @@ -190,7 +190,7 @@ datax
- doriswriter/target/datax/ + starrockswriter/target/datax/ **/*.* diff --git a/pom.xml b/pom.xml index 96ad4333..5f194b06 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,7 @@ mysqlwriter - doriswriter + starrockswriter drdswriter odpswriter txtfilewriter diff --git a/doriswriter/doc/doriswriter.md b/starrockswriter/doc/starrockswriter.md similarity index 84% rename from doriswriter/doc/doriswriter.md rename to starrockswriter/doc/starrockswriter.md index fbe6e4bb..f471b752 100644 --- a/doriswriter/doc/doriswriter.md +++ b/starrockswriter/doc/starrockswriter.md @@ -1,4 +1,4 @@ -# DataX DorisWriter +# DataX StarRocksWriter --- @@ -6,19 +6,19 @@ ## 1 快速介绍 -DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。在底层实现上, DorisWriter 通过Streamload以csv格式导入数据至Doris。 +StarRocksWriter 插件实现了写入数据到 StarRocks 主库的目的表的功能。在底层实现上, StarRocksWriter 通过Streamload以csv格式导入数据至StarRocks。 ## 2 实现原理 - DorisWriter 通过Streamload以csv格式导入数据至Doris, 内部将`reader`读取的数据进行缓存后批量导入至Doris,以提高写入性能。 + StarRocksWriter 通过Streamload以csv格式导入数据至StarRocks, 内部将`reader`读取的数据进行缓存后批量导入至StarRocks,以提高写入性能。 ## 3 功能说明 ### 3.1 配置样例 -* 这里使用一份从内存Mysql读取数据后导入至Doris。 +* 这里使用一份从内存Mysql读取数据后导入至StarRocks。 ```json { @@ -57,7 +57,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 } }, "writer": { - "name": "doriswriter", + "name": "starrockswriter", "parameter": { "username": "xxxx", "password": "xxxx", @@ -83,7 +83,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * **username** - * 描述:Doris数据库的用户名
+ * 描述:StarRocks数据库的用户名
* 必选:是
@@ -91,7 +91,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * **password** - * 描述:Doris数据库的密码
+ * 描述:StarRocks数据库的密码
* 必选:是
@@ -99,7 +99,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * **database** - * 描述:Doris表的数据库名称。 + * 描述:StarRocks表的数据库名称。 * 必选:是
@@ -107,7 +107,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * **table** - * 描述:Doris表的表名称。 + * 描述:StarRocks表的表名称。 * 必选:是
@@ -115,7 +115,7 @@ DorisWriter 插件实现了写入数据到 Doris 主库的目的表的功能。 * **loadUrl** - * 描述:Doris FE的地址用于Streamload,可以为多个fe地址,`fe_ip:fe_http_port`。 + * 描述:StarRocks FE的地址用于Streamload,可以为多个fe地址,`fe_ip:fe_http_port`。 * 必选:是
diff --git a/doriswriter/pom.xml b/starrockswriter/pom.xml similarity index 93% rename from doriswriter/pom.xml rename to starrockswriter/pom.xml index 1524e358..f36fc4b5 100755 --- a/doriswriter/pom.xml +++ b/starrockswriter/pom.xml @@ -6,8 +6,8 @@ datax-all 0.0.1-SNAPSHOT - doriswriter - doriswriter + starrockswriter + starrockswriter jar @@ -100,15 +100,15 @@ com.alibaba.fastjson - com.dorisdb.shade.com.alibaba.fastjson + com.starrocks.shade.com.alibaba.fastjson org.apache.http - com.dorisdb.shade.org.apache.http + com.starrocks.shade.org.apache.http org.apache.commons - com.dorisdb.shade.org.apache.commons + com.starrocks.shade.org.apache.commons diff --git a/doriswriter/src/main/assembly/package.xml b/starrockswriter/src/main/assembly/package.xml similarity index 76% rename from doriswriter/src/main/assembly/package.xml rename to starrockswriter/src/main/assembly/package.xml index 2e0880e1..79ca7be8 100755 --- a/doriswriter/src/main/assembly/package.xml +++ b/starrockswriter/src/main/assembly/package.xml @@ -14,21 +14,21 @@ plugin.json plugin_job_template.json - plugin/writer/doriswriter + plugin/writer/starrockswriter
target/ - doriswriter-0.0.1-SNAPSHOT.jar + starrockswriter-0.0.1-SNAPSHOT.jar - plugin/writer/doriswriter + plugin/writer/starrockswriter false - plugin/writer/doriswriter/libs + plugin/writer/starrockswriter/libs runtime diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java similarity index 73% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java index 8b3c414d..666a99d9 100755 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriter.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter; +package com.starrocks.connector.datax.plugin.writer.starrockswriter; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; @@ -8,10 +8,10 @@ import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.manager.DorisWriterManager; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisISerializer; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisSerializerFactory; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.util.DorisWriterUtil; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.manager.StarRocksWriterManager; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksISerializer; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksSerializerFactory; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.util.StarRocksWriterUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,26 +20,26 @@ import java.sql.Connection; import java.util.ArrayList; import java.util.List; -public class DorisWriter extends Writer { +public class StarRocksWriter extends Writer { public static class Job extends Writer.Job { private static final Logger LOG = LoggerFactory.getLogger(Job.class); private Configuration originalConfig = null; - private DorisWriterOptions options; + private StarRocksWriterOptions options; @Override public void init() { this.originalConfig = super.getPluginJobConf(); - options = new DorisWriterOptions(super.getPluginJobConf()); + options = new StarRocksWriterOptions(super.getPluginJobConf()); options.doPretreatment(); } @Override public void preCheck(){ this.init(); - DorisWriterUtil.preCheckPrePareSQL(options); - DorisWriterUtil.preCheckPostSQL(options); + StarRocksWriterUtil.preCheckPrePareSQL(options); + StarRocksWriterUtil.preCheckPostSQL(options); } @Override @@ -47,11 +47,11 @@ public class DorisWriter extends Writer { String username = options.getUsername(); String password = options.getPassword(); String jdbcUrl = options.getJdbcUrl(); - List renderedPreSqls = DorisWriterUtil.renderPreOrPostSqls(options.getPreSqlList(), options.getTable()); + List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPreSqlList(), options.getTable()); if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPreSqls), jdbcUrl); - DorisWriterUtil.executeSqls(conn, renderedPreSqls); + StarRocksWriterUtil.executeSqls(conn, renderedPreSqls); DBUtil.closeDBResources(null, null, conn); } } @@ -70,11 +70,11 @@ public class DorisWriter extends Writer { String username = options.getUsername(); String password = options.getPassword(); String jdbcUrl = options.getJdbcUrl(); - List renderedPostSqls = DorisWriterUtil.renderPreOrPostSqls(options.getPostSqlList(), options.getTable()); + List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPostSqlList(), options.getTable()); if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPostSqls), jdbcUrl); - DorisWriterUtil.executeSqls(conn, renderedPostSqls); + StarRocksWriterUtil.executeSqls(conn, renderedPostSqls); DBUtil.closeDBResources(null, null, conn); } } @@ -86,15 +86,15 @@ public class DorisWriter extends Writer { } public static class Task extends Writer.Task { - private DorisWriterManager writerManager; - private DorisWriterOptions options; - private DorisISerializer rowSerializer; + private StarRocksWriterManager writerManager; + private StarRocksWriterOptions options; + private StarRocksISerializer rowSerializer; @Override public void init() { - options = new DorisWriterOptions(super.getPluginJobConf()); - writerManager = new DorisWriterManager(options); - rowSerializer = DorisSerializerFactory.createSerializer(options); + options = new StarRocksWriterOptions(super.getPluginJobConf()); + writerManager = new StarRocksWriterManager(options); + rowSerializer = StarRocksSerializerFactory.createSerializer(options); } @Override diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java similarity index 96% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java index 1b3f525f..5180512f 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/DorisWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter; +package com.starrocks.connector.datax.plugin.writer.starrockswriter; import java.io.Serializable; @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -public class DorisWriterOptions implements Serializable { +public class StarRocksWriterOptions implements Serializable { private static final long serialVersionUID = 1l; private static final long KILO_BYTES_SCALE = 1024l; @@ -40,7 +40,7 @@ public class DorisWriterOptions implements Serializable { private final Configuration options; - public DorisWriterOptions(Configuration options) { + public StarRocksWriterOptions(Configuration options) { this.options = options; } diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java similarity index 64% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java index 24bcc9c6..cd8c663b 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisFlushTuple.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java @@ -1,14 +1,14 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; import java.util.List; -public class DorisFlushTuple { +public class StarRocksFlushTuple { private String label; private Long bytes; private List rows; - public DorisFlushTuple(String label, Long bytes, List rows) { + public StarRocksFlushTuple(String label, Long bytes, List rows) { this.label = label; this.bytes = bytes; this.rows = rows; diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java similarity index 84% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java index 7556f72e..84fc5200 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; import java.io.IOException; import java.net.HttpURLConnection; @@ -7,8 +7,8 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import com.alibaba.fastjson.JSON; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.row.DorisDelimiterParser; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksDelimiterParser; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpEntity; @@ -28,18 +28,18 @@ import java.util.List; import java.util.Map; -public class DorisStreamLoadVisitor { +public class StarRocksStreamLoadVisitor { - private static final Logger LOG = LoggerFactory.getLogger(DorisStreamLoadVisitor.class); + private static final Logger LOG = LoggerFactory.getLogger(StarRocksStreamLoadVisitor.class); - private final DorisWriterOptions writerOptions; + private final StarRocksWriterOptions writerOptions; private int pos; - public DorisStreamLoadVisitor(DorisWriterOptions writerOptions) { + public StarRocksStreamLoadVisitor(StarRocksWriterOptions writerOptions) { this.writerOptions = writerOptions; } - public void doStreamLoad(DorisFlushTuple flushData) throws IOException { + public void doStreamLoad(StarRocksFlushTuple flushData) throws IOException { String host = getAvailableHost(); if (null == host) { throw new IOException("None of the host in `load_url` could be connected."); @@ -55,12 +55,12 @@ public class DorisStreamLoadVisitor { Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows(), flushData.getBytes().intValue())); final String keyStatus = "Status"; if (null == loadResult || !loadResult.containsKey(keyStatus)) { - throw new IOException("Unable to flush data to doris: unknown result status."); + throw new IOException("Unable to flush data to StarRocks: unknown result status."); } LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); if (loadResult.get(keyStatus).equals("Fail")) { throw new IOException( - new StringBuilder("Failed to flush data to doris.\n").append(JSON.toJSONString(loadResult)).toString() + new StringBuilder("Failed to flush data to StarRocks.\n").append(JSON.toJSONString(loadResult)).toString() ); } } @@ -94,9 +94,9 @@ public class DorisStreamLoadVisitor { } private byte[] joinRows(List rows, int totalBytes) { - if (DorisWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { Map props = writerOptions.getLoadProps(); - byte[] lineDelimiter = DorisDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n").getBytes(StandardCharsets.UTF_8); + byte[] lineDelimiter = StarRocksDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n").getBytes(StandardCharsets.UTF_8); ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); for (String row : rows) { bos.put(row.getBytes(StandardCharsets.UTF_8)); @@ -105,7 +105,7 @@ public class DorisStreamLoadVisitor { return bos.array(); } - if (DorisWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { ByteBuffer bos = ByteBuffer.allocate(totalBytes + (rows.isEmpty() ? 2 : rows.size() + 1)); bos.put("[".getBytes(StandardCharsets.UTF_8)); byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java similarity index 70% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java index d7e9ad33..4e53adeb 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/manager/DorisWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.manager; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,26 +9,26 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.LinkedBlockingDeque; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; import com.google.common.base.Strings; -public class DorisWriterManager { +public class StarRocksWriterManager { - private static final Logger LOG = LoggerFactory.getLogger(DorisWriterManager.class); + private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterManager.class); - private final DorisStreamLoadVisitor dorisStreamLoadVisitor; - private final DorisWriterOptions writerOptions; + private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; + private final StarRocksWriterOptions writerOptions; private final List buffer = new ArrayList<>(); private int batchCount = 0; private long batchSize = 0; private volatile boolean closed = false; private volatile Exception flushException; - private final LinkedBlockingDeque flushQueue; + private final LinkedBlockingDeque flushQueue; - public DorisWriterManager(DorisWriterOptions writerOptions) { + public StarRocksWriterManager(StarRocksWriterOptions writerOptions) { this.writerOptions = writerOptions; - this.dorisStreamLoadVisitor = new DorisStreamLoadVisitor(writerOptions); + this.starrocksStreamLoadVisitor = new StarRocksStreamLoadVisitor(writerOptions); flushQueue = new LinkedBlockingDeque<>(writerOptions.getFlushQueueLength()); this.startAsyncFlushing(); } @@ -41,11 +41,11 @@ public class DorisWriterManager { batchSize += record.getBytes().length; if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { String label = createBatchLabel(); - LOG.debug(String.format("Doris buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); + LOG.debug(String.format("StarRocks buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); flush(label, false); } } catch (Exception e) { - throw new IOException("Writing records to Doris failed.", e); + throw new IOException("Writing records to StarRocks failed.", e); } } @@ -57,7 +57,7 @@ public class DorisWriterManager { } return; } - flushQueue.put(new DorisFlushTuple(label, batchSize, new ArrayList<>(buffer))); + flushQueue.put(new StarRocksFlushTuple(label, batchSize, new ArrayList<>(buffer))); if (waitUtilDone) { // wait the last flush waitAsyncFlushingDone(); @@ -72,10 +72,10 @@ public class DorisWriterManager { closed = true; try { String label = createBatchLabel(); - if (batchCount > 0) LOG.debug(String.format("Doris Sink is about to close: label[%s].", label)); + if (batchCount > 0) LOG.debug(String.format("StarRocks Sink is about to close: label[%s].", label)); flush(label, true); } catch (Exception e) { - throw new RuntimeException("Writing records to Doris failed.", e); + throw new RuntimeException("Writing records to StarRocks failed.", e); } } checkFlushException(); @@ -105,24 +105,24 @@ public class DorisWriterManager { private void waitAsyncFlushingDone() throws InterruptedException { // wait previous flushings for (int i = 0; i <= writerOptions.getFlushQueueLength(); i++) { - flushQueue.put(new DorisFlushTuple("", 0l, null)); + flushQueue.put(new StarRocksFlushTuple("", 0l, null)); } } private void asyncFlush() throws Exception { - DorisFlushTuple flushData = flushQueue.take(); + StarRocksFlushTuple flushData = flushQueue.take(); if (Strings.isNullOrEmpty(flushData.getLabel())) { return; } LOG.debug(String.format("Async stream load: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { try { - // flush to Doris with stream load - dorisStreamLoadVisitor.doStreamLoad(flushData); + // flush to StarRocks with stream load + starrocksStreamLoadVisitor.doStreamLoad(flushData); LOG.info(String.format("Async stream load finished: label[%s].", flushData.getLabel())); break; } catch (Exception e) { - LOG.warn("Failed to flush batch data to doris, retry times = {}", i, e); + LOG.warn("Failed to flush batch data to StarRocks, retry times = {}", i, e); if (i >= writerOptions.getMaxRetries()) { throw new IOException(e); } @@ -138,7 +138,7 @@ public class DorisWriterManager { private void checkFlushException() { if (flushException != null) { - throw new RuntimeException("Writing records to Doris failed.", flushException); + throw new RuntimeException("Writing records to StarRocks failed.", flushException); } } } diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java similarity index 76% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java index 9876b0f0..77d25f12 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisBaseSerializer.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java @@ -1,9 +1,9 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Column.Type; -public class DorisBaseSerializer { +public class StarRocksBaseSerializer { protected String fieldConvertion(Column col) { if (null == col.getRawData()) { diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java similarity index 69% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java index 862e0b73..1366d570 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisCsvSerializer.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; import java.io.StringWriter; @@ -6,14 +6,14 @@ import com.alibaba.datax.common.element.Record; import com.google.common.base.Strings; -public class DorisCsvSerializer extends DorisBaseSerializer implements DorisISerializer { +public class StarRocksCsvSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { private static final long serialVersionUID = 1L; private final String columnSeparator; - public DorisCsvSerializer(String sp) { - this.columnSeparator = DorisDelimiterParser.parse(sp, "\t"); + public StarRocksCsvSerializer(String sp) { + this.columnSeparator = StarRocksDelimiterParser.parse(sp, "\t"); } @Override diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java similarity index 93% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java index 3fd58fa5..04301e0f 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisDelimiterParser.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java @@ -1,10 +1,10 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; import java.io.StringWriter; import com.google.common.base.Strings; -public class DorisDelimiterParser { +public class StarRocksDelimiterParser { private static final String HEX_STRING = "0123456789ABCDEF"; diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java new file mode 100644 index 00000000..7bcb8973 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java @@ -0,0 +1,11 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.io.Serializable; + +import com.alibaba.datax.common.element.Record; + +public interface StarRocksISerializer extends Serializable { + + String serialize(Record row); + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java similarity index 75% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java index 3f74ac58..60faa1be 100644 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/row/DorisJsonSerializer.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java @@ -1,4 +1,4 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.row; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; import java.util.HashMap; import java.util.List; @@ -7,13 +7,13 @@ import java.util.Map; import com.alibaba.datax.common.element.Record; import com.alibaba.fastjson.JSON; -public class DorisJsonSerializer extends DorisBaseSerializer implements DorisISerializer { +public class StarRocksJsonSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { private static final long serialVersionUID = 1L; private final List fieldNames; - public DorisJsonSerializer(List fieldNames) { + public StarRocksJsonSerializer(List fieldNames) { this.fieldNames = fieldNames; } diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java new file mode 100644 index 00000000..85f446cd --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java @@ -0,0 +1,22 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.util.Map; + +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; + +public class StarRocksSerializerFactory { + + private StarRocksSerializerFactory() {} + + public static StarRocksISerializer createSerializer(StarRocksWriterOptions writerOptions) { + if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + Map props = writerOptions.getLoadProps(); + return new StarRocksCsvSerializer(null == props || !props.containsKey("column_separator") ? null : String.valueOf(props.get("column_separator"))); + } + if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + return new StarRocksJsonSerializer(writerOptions.getColumns()); + } + throw new RuntimeException("Failed to create row serializer, unsupported `format` from stream load properties."); + } + +} diff --git a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java similarity index 79% rename from doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java rename to starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java index 348e519c..c3b5d8d1 100755 --- a/doriswriter/src/main/java/com/dorisdb/connector/datax/plugin/writer/doriswriter/util/DorisWriterUtil.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java @@ -1,11 +1,11 @@ -package com.dorisdb.connector.datax.plugin.writer.doriswriter.util; +package com.starrocks.connector.datax.plugin.writer.starrockswriter.util; import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.util.RdbmsException; import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.druid.sql.parser.ParserException; -import com.dorisdb.connector.datax.plugin.writer.doriswriter.DorisWriterOptions; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; import com.google.common.base.Strings; import org.slf4j.Logger; @@ -15,10 +15,10 @@ import java.sql.Connection; import java.sql.Statement; import java.util.*; -public final class DorisWriterUtil { - private static final Logger LOG = LoggerFactory.getLogger(DorisWriterUtil.class); +public final class StarRocksWriterUtil { + private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterUtil.class); - private DorisWriterUtil() {} + private StarRocksWriterUtil() {} public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { if (null == preOrPostSqls) { @@ -49,10 +49,10 @@ public final class DorisWriterUtil { } } - public static void preCheckPrePareSQL(DorisWriterOptions options) { + public static void preCheckPrePareSQL(StarRocksWriterOptions options) { String table = options.getTable(); List preSqls = options.getPreSqlList(); - List renderedPreSqls = DorisWriterUtil.renderPreOrPostSqls(preSqls, table); + List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(preSqls, table); if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { LOG.info("Begin to preCheck preSqls:[{}].", String.join(";", renderedPreSqls)); for (String sql : renderedPreSqls) { @@ -65,10 +65,10 @@ public final class DorisWriterUtil { } } - public static void preCheckPostSQL(DorisWriterOptions options) { + public static void preCheckPostSQL(StarRocksWriterOptions options) { String table = options.getTable(); List postSqls = options.getPostSqlList(); - List renderedPostSqls = DorisWriterUtil.renderPreOrPostSqls(postSqls, table); + List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(postSqls, table); if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { LOG.info("Begin to preCheck postSqls:[{}].", String.join(";", renderedPostSqls)); for(String sql : renderedPostSqls) { diff --git a/starrockswriter/src/main/resources/plugin.json b/starrockswriter/src/main/resources/plugin.json new file mode 100755 index 00000000..8edec1e0 --- /dev/null +++ b/starrockswriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "starrockswriter", + "class": "com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriter", + "description": "useScene: prod. mechanism: StarRocksStreamLoad. warn: The more you know about the database, the less problems you encounter.", + "developer": "starrocks" +} \ No newline at end of file diff --git a/doriswriter/src/main/resources/plugin_job_template.json b/starrockswriter/src/main/resources/plugin_job_template.json similarity index 88% rename from doriswriter/src/main/resources/plugin_job_template.json rename to starrockswriter/src/main/resources/plugin_job_template.json index ee1744c8..ca5c99d0 100644 --- a/doriswriter/src/main/resources/plugin_job_template.json +++ b/starrockswriter/src/main/resources/plugin_job_template.json @@ -1,5 +1,5 @@ { - "name": "doriswriter", + "name": "starrockswriter", "parameter": { "username": "", "password": "", From 835e5deb745b4dbdd9b161f35e7889ca2e0f0675 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 1 Sep 2021 16:51:01 +0800 Subject: [PATCH 026/251] fix renaming issue --- .../starrockswriter/StarRocksWriter.java | 141 ++++++++++++++ .../StarRocksWriterOptions.java | 146 +++++++++++++++ .../manager/StarRocksFlushTuple.java | 20 ++ .../manager/StarRocksStreamLoadVisitor.java | 175 ++++++++++++++++++ .../manager/StarRocksWriterManager.java | 144 ++++++++++++++ .../row/StarRocksBaseSerializer.java | 18 ++ .../row/StarRocksCsvSerializer.java | 32 ++++ .../row/StarRocksDelimiterParser.java | 55 ++++++ .../row/StarRocksISerializer.java | 11 ++ .../row/StarRocksJsonSerializer.java | 34 ++++ .../row/StarRocksSerializerFactory.java | 22 +++ .../util/StarRocksWriterUtil.java | 83 +++++++++ 12 files changed, 881 insertions(+) create mode 100755 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksCsvSerializer.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksDelimiterParser.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksISerializer.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksJsonSerializer.java create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksSerializerFactory.java create mode 100755 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java new file mode 100755 index 00000000..666a99d9 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java @@ -0,0 +1,141 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.manager.StarRocksWriterManager; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksISerializer; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksSerializerFactory; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.util.StarRocksWriterUtil; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.List; + +public class StarRocksWriter extends Writer { + + public static class Job extends Writer.Job { + + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private Configuration originalConfig = null; + private StarRocksWriterOptions options; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + options = new StarRocksWriterOptions(super.getPluginJobConf()); + options.doPretreatment(); + } + + @Override + public void preCheck(){ + this.init(); + StarRocksWriterUtil.preCheckPrePareSQL(options); + StarRocksWriterUtil.preCheckPostSQL(options); + } + + @Override + public void prepare() { + String username = options.getUsername(); + String password = options.getPassword(); + String jdbcUrl = options.getJdbcUrl(); + List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPreSqlList(), options.getTable()); + if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPreSqls), jdbcUrl); + StarRocksWriterUtil.executeSqls(conn, renderedPreSqls); + DBUtil.closeDBResources(null, null, conn); + } + } + + @Override + public List split(int mandatoryNumber) { + List configurations = new ArrayList<>(mandatoryNumber); + for (int i = 0; i < mandatoryNumber; i++) { + configurations.add(originalConfig); + } + return configurations; + } + + @Override + public void post() { + String username = options.getUsername(); + String password = options.getPassword(); + String jdbcUrl = options.getJdbcUrl(); + List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPostSqlList(), options.getTable()); + if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPostSqls), jdbcUrl); + StarRocksWriterUtil.executeSqls(conn, renderedPostSqls); + DBUtil.closeDBResources(null, null, conn); + } + } + + @Override + public void destroy() { + } + + } + + public static class Task extends Writer.Task { + private StarRocksWriterManager writerManager; + private StarRocksWriterOptions options; + private StarRocksISerializer rowSerializer; + + @Override + public void init() { + options = new StarRocksWriterOptions(super.getPluginJobConf()); + writerManager = new StarRocksWriterManager(options); + rowSerializer = StarRocksSerializerFactory.createSerializer(options); + } + + @Override + public void prepare() { + } + + public void startWrite(RecordReceiver recordReceiver) { + try { + Record record; + while ((record = recordReceiver.getFromReader()) != null) { + if (record.getColumnNumber() != options.getColumns().size()) { + throw DataXException + .asDataXException( + DBUtilErrorCode.CONF_ERROR, + String.format( + "列配置信息有错误. 因为您配置的任务中,源头读取字段数:%s 与 目的表要写入的字段数:%s 不相等. 请检查您的配置并作出修改.", + record.getColumnNumber(), + options.getColumns().size())); + } + writerManager.writeRecord(rowSerializer.serialize(record)); + } + } catch (Exception e) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + } + + @Override + public void post() { + try { + writerManager.close(); + } catch (Exception e) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + } + + @Override + public void destroy() {} + + @Override + public boolean supportFailOver(){ + return false; + } + } +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java new file mode 100644 index 00000000..5180512f --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -0,0 +1,146 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter; + +import java.io.Serializable; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class StarRocksWriterOptions implements Serializable { + + private static final long serialVersionUID = 1l; + private static final long KILO_BYTES_SCALE = 1024l; + private static final long MEGA_BYTES_SCALE = KILO_BYTES_SCALE * KILO_BYTES_SCALE; + private static final int MAX_RETRIES = 1; + private static final int BATCH_ROWS = 500000; + private static final long BATCH_BYTES = 90 * MEGA_BYTES_SCALE; + + private static final String KEY_LOAD_PROPS_FORMAT = "format"; + public enum StreamLoadFormat { + CSV, JSON; + } + + private static final String KEY_USERNAME = "username"; + private static final String KEY_PASSWORD = "password"; + private static final String KEY_DATABASE = "database"; + private static final String KEY_TABLE = "table"; + private static final String KEY_COLUMN = "column"; + private static final String KEY_PRE_SQL = "preSql"; + private static final String KEY_POST_SQL = "postSql"; + private static final String KEY_JDBC_URL = "jdbcUrl"; + private static final String KEY_MAX_BATCH_ROWS = "maxBatchRows"; + private static final String KEY_MAX_BATCH_SIZE = "maxBatchSize"; + private static final String KEY_LOAD_URL = "loadUrl"; + private static final String KEY_FLUSH_QUEUE_LENGTH = "flushQueueLength"; + private static final String KEY_LOAD_PROPS = "loadProps"; + + private final Configuration options; + + public StarRocksWriterOptions(Configuration options) { + this.options = options; + } + + public void doPretreatment() { + validateRequired(); + validateStreamLoadUrl(); + } + + public String getJdbcUrl() { + return options.getString(KEY_JDBC_URL); + } + + public String getDatabase() { + return options.getString(KEY_DATABASE); + } + + public String getTable() { + return options.getString(KEY_TABLE); + } + + public String getUsername() { + return options.getString(KEY_USERNAME); + } + + public String getPassword() { + return options.getString(KEY_PASSWORD); + } + + public List getLoadUrlList() { + return options.getList(KEY_LOAD_URL, String.class); + } + + public List getColumns() { + return options.getList(KEY_COLUMN, String.class).stream().map(str -> str.replace("`", "")).collect(Collectors.toList()); + } + + public List getPreSqlList() { + return options.getList(KEY_PRE_SQL, String.class); + } + + public List getPostSqlList() { + return options.getList(KEY_POST_SQL, String.class); + } + + public Map getLoadProps() { + return options.getMap(KEY_LOAD_PROPS); + } + + public int getMaxRetries() { + return MAX_RETRIES; + } + + public int getBatchRows() { + Integer rows = options.getInt(KEY_MAX_BATCH_ROWS); + return null == rows ? BATCH_ROWS : rows; + } + + public long getBatchSize() { + Long size = options.getLong(KEY_MAX_BATCH_SIZE); + return null == size ? BATCH_BYTES : size; + } + + public int getFlushQueueLength() { + Integer len = options.getInt(KEY_FLUSH_QUEUE_LENGTH); + return null == len ? 1 : len; + } + + public StreamLoadFormat getStreamLoadFormat() { + Map loadProps = getLoadProps(); + if (null == loadProps) { + return StreamLoadFormat.CSV; + } + if (loadProps.containsKey(KEY_LOAD_PROPS_FORMAT) + && StreamLoadFormat.JSON.name().equalsIgnoreCase(String.valueOf(loadProps.get(KEY_LOAD_PROPS_FORMAT)))) { + return StreamLoadFormat.JSON; + } + return StreamLoadFormat.CSV; + } + + private void validateStreamLoadUrl() { + List urlList = getLoadUrlList(); + for (String host : urlList) { + if (host.split(":").length < 2) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + "loadUrl的格式不正确,请输入 `fe_ip:fe_http_ip;fe_ip:fe_http_ip`。"); + } + } + } + + private void validateRequired() { + final String[] requiredOptionKeys = new String[]{ + KEY_USERNAME, + KEY_PASSWORD, + KEY_DATABASE, + KEY_TABLE, + KEY_COLUMN, + KEY_LOAD_URL + }; + for (String optionKey : requiredOptionKeys) { + options.getNecessaryValue(optionKey, DBUtilErrorCode.REQUIRED_VALUE); + } + } +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java new file mode 100644 index 00000000..cd8c663b --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java @@ -0,0 +1,20 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; + +import java.util.List; + +public class StarRocksFlushTuple { + + private String label; + private Long bytes; + private List rows; + + public StarRocksFlushTuple(String label, Long bytes, List rows) { + this.label = label; + this.bytes = bytes; + this.rows = rows; + } + + public String getLabel() { return label; } + public Long getBytes() { return bytes; } + public List getRows() { return rows; } +} \ No newline at end of file diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java new file mode 100644 index 00000000..15e93e87 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -0,0 +1,175 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; + +import com.alibaba.fastjson.JSON; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksDelimiterParser; + +import org.apache.commons.codec.binary.Base64; +import org.apache.http.HttpEntity; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.CloseableHttpClient; +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.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; + + +public class StarRocksStreamLoadVisitor { + + private static final Logger LOG = LoggerFactory.getLogger(StarRocksStreamLoadVisitor.class); + + private final StarRocksWriterOptions writerOptions; + private int pos; + + public StarRocksStreamLoadVisitor(StarRocksWriterOptions writerOptions) { + this.writerOptions = writerOptions; + } + + public void doStreamLoad(StarRocksFlushTuple flushData) throws IOException { + String host = getAvailableHost(); + if (null == host) { + throw new IOException("None of the host in `load_url` could be connected."); + } + String loadUrl = new StringBuilder(host) + .append("/api/") + .append(writerOptions.getDatabase()) + .append("/") + .append(writerOptions.getTable()) + .append("/_stream_load") + .toString(); + LOG.debug(String.format("Start to join batch data: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); + Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows(), flushData.getBytes().intValue())); + final String keyStatus = "Status"; + if (null == loadResult || !loadResult.containsKey(keyStatus)) { + throw new IOException("Unable to flush data to StarRocks: unknown result status."); + } + LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); + if (loadResult.get(keyStatus).equals("Fail")) { + throw new IOException( + new StringBuilder("Failed to flush data to StarRocks.\n").append(JSON.toJSONString(loadResult)).toString() + ); + } + } + + private String getAvailableHost() { + List hostList = writerOptions.getLoadUrlList(); + if (pos >= hostList.size()) { + pos = 0; + } + for (; pos < hostList.size(); pos++) { + String host = new StringBuilder("http://").append(hostList.get(pos)).toString(); + if (tryHttpConnection(host)) { + return host; + } + } + return null; + } + + private boolean tryHttpConnection(String host) { + try { + URL url = new URL(host); + HttpURLConnection co = (HttpURLConnection) url.openConnection(); + co.setConnectTimeout(1000); + co.connect(); + co.disconnect(); + return true; + } catch (Exception e1) { + LOG.warn("Failed to connect to address:{}", host, e1); + return false; + } + } + + private byte[] joinRows(List rows, int totalBytes) { + if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + Map props = writerOptions.getLoadProps(); + byte[] lineDelimiter = (props.containsKey("row_delimiter") ? StarRocksDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n") : "\n").getBytes(StandardCharsets.UTF_8); + ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); + for (String row : rows) { + bos.put(row.getBytes(StandardCharsets.UTF_8)); + bos.put(lineDelimiter); + } + return bos.array(); + } + + if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + ByteBuffer bos = ByteBuffer.allocate(totalBytes + (rows.isEmpty() ? 2 : rows.size() + 1)); + bos.put("[".getBytes(StandardCharsets.UTF_8)); + byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); + boolean isFirstElement = true; + for (String row : rows) { + if (!isFirstElement) { + bos.put(jsonDelimiter); + } + bos.put(row.getBytes(StandardCharsets.UTF_8)); + isFirstElement = false; + } + bos.put("]".getBytes(StandardCharsets.UTF_8)); + return bos.array(); + } + throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); + } + + @SuppressWarnings("unchecked") + private Map doHttpPut(String loadUrl, String label, byte[] data) throws IOException { + LOG.info(String.format("Executing stream load to: '%s', size: '%s'", loadUrl, data.length)); + final HttpClientBuilder httpClientBuilder = HttpClients.custom() + .setRedirectStrategy(new DefaultRedirectStrategy() { + @Override + protected boolean isRedirectable(String method) { + return true; + } + }); + try (CloseableHttpClient httpclient = httpClientBuilder.build()) { + HttpPut httpPut = new HttpPut(loadUrl); + List cols = writerOptions.getColumns(); + if (null != cols && !cols.isEmpty()) { + httpPut.setHeader("columns", String.join(",", cols)); + } + if (null != writerOptions.getLoadProps()) { + for (Map.Entry entry : writerOptions.getLoadProps().entrySet()) { + httpPut.setHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } + httpPut.setHeader("Expect", "100-continue"); + httpPut.setHeader("label", label); + httpPut.setHeader("Content-Type", "application/x-www-form-urlencoded"); + httpPut.setHeader("Authorization", getBasicAuthHeader(writerOptions.getUsername(), writerOptions.getPassword())); + httpPut.setEntity(new ByteArrayEntity(data)); + httpPut.setConfig(RequestConfig.custom().setRedirectsEnabled(true).build()); + try (CloseableHttpResponse resp = httpclient.execute(httpPut)) { + int code = resp.getStatusLine().getStatusCode(); + if (200 != code) { + LOG.warn("Request failed with code:{}", code); + return null; + } + HttpEntity respEntity = resp.getEntity(); + if (null == respEntity) { + LOG.warn("Request failed with empty response."); + return null; + } + return (Map)JSON.parse(EntityUtils.toString(respEntity)); + } + } + } + + private String getBasicAuthHeader(String username, String password) { + String auth = username + ":" + password; + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes()); + return new StringBuilder("Basic ").append(new String(encodedAuth)).toString(); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java new file mode 100644 index 00000000..e5234425 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -0,0 +1,144 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.LinkedBlockingDeque; + +import com.google.common.base.Strings; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; + +public class StarRocksWriterManager { + + private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterManager.class); + + private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; + private final StarRocksWriterOptions writerOptions; + + private final List buffer = new ArrayList<>(); + private int batchCount = 0; + private long batchSize = 0; + private volatile boolean closed = false; + private volatile Exception flushException; + private final LinkedBlockingDeque flushQueue; + + public StarRocksWriterManager(StarRocksWriterOptions writerOptions) { + this.writerOptions = writerOptions; + this.starrocksStreamLoadVisitor = new StarRocksStreamLoadVisitor(writerOptions); + flushQueue = new LinkedBlockingDeque<>(writerOptions.getFlushQueueLength()); + this.startAsyncFlushing(); + } + + public final synchronized void writeRecord(String record) throws IOException { + checkFlushException(); + try { + buffer.add(record); + batchCount++; + batchSize += record.getBytes().length; + if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { + String label = createBatchLabel(); + LOG.debug(String.format("StarRocks buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); + flush(label, false); + } + } catch (Exception e) { + throw new IOException("Writing records to StarRocks failed.", e); + } + } + + public synchronized void flush(String label, boolean waitUtilDone) throws Exception { + checkFlushException(); + if (batchCount == 0) { + if (waitUtilDone) { + waitAsyncFlushingDone(); + } + return; + } + flushQueue.put(new StarRocksFlushTuple(label, batchSize, new ArrayList<>(buffer))); + if (waitUtilDone) { + // wait the last flush + waitAsyncFlushingDone(); + } + buffer.clear(); + batchCount = 0; + batchSize = 0; + } + + public synchronized void close() { + if (!closed) { + closed = true; + try { + String label = createBatchLabel(); + if (batchCount > 0) LOG.debug(String.format("StarRocks Sink is about to close: label[%s].", label)); + flush(label, true); + } catch (Exception e) { + throw new RuntimeException("Writing records to StarRocks failed.", e); + } + } + checkFlushException(); + } + + public String createBatchLabel() { + return UUID.randomUUID().toString(); + } + + private void startAsyncFlushing() { + // start flush thread + Thread flushThread = new Thread(new Runnable(){ + public void run() { + while(true) { + try { + asyncFlush(); + } catch (Exception e) { + flushException = e; + } + } + } + }); + flushThread.setDaemon(true); + flushThread.start(); + } + + private void waitAsyncFlushingDone() throws InterruptedException { + // wait previous flushings + for (int i = 0; i <= writerOptions.getFlushQueueLength(); i++) { + flushQueue.put(new StarRocksFlushTuple("", 0l, null)); + } + } + + private void asyncFlush() throws Exception { + StarRocksFlushTuple flushData = flushQueue.take(); + if (Strings.isNullOrEmpty(flushData.getLabel())) { + return; + } + LOG.debug(String.format("Async stream load: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); + for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { + try { + // flush to StarRocks with stream load + starrocksStreamLoadVisitor.doStreamLoad(flushData); + LOG.info(String.format("Async stream load finished: label[%s].", flushData.getLabel())); + break; + } catch (Exception e) { + LOG.warn("Failed to flush batch data to StarRocks, retry times = {}", i, e); + if (i >= writerOptions.getMaxRetries()) { + throw new IOException(e); + } + try { + Thread.sleep(1000l * (i + 1)); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + throw new IOException("Unable to flush, interrupted while doing another attempt", e); + } + } + } + } + + private void checkFlushException() { + if (flushException != null) { + throw new RuntimeException("Writing records to StarRocks failed.", flushException); + } + } +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java new file mode 100644 index 00000000..77d25f12 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java @@ -0,0 +1,18 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Column.Type; + +public class StarRocksBaseSerializer { + + protected String fieldConvertion(Column col) { + if (null == col.getRawData()) { + return null; + } + if (Type.BOOL == col.getType()) { + return String.valueOf(col.asLong()); + } + return col.asString(); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksCsvSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksCsvSerializer.java new file mode 100644 index 00000000..1366d570 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksCsvSerializer.java @@ -0,0 +1,32 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.io.StringWriter; + +import com.alibaba.datax.common.element.Record; + +import com.google.common.base.Strings; + +public class StarRocksCsvSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { + + private static final long serialVersionUID = 1L; + + private final String columnSeparator; + + public StarRocksCsvSerializer(String sp) { + this.columnSeparator = StarRocksDelimiterParser.parse(sp, "\t"); + } + + @Override + public String serialize(Record row) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < row.getColumnNumber(); i++) { + String value = fieldConvertion(row.getColumn(i)); + sb.append(null == value ? "\\N" : value); + if (i < row.getColumnNumber() - 1) { + sb.append(columnSeparator); + } + } + return sb.toString(); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksDelimiterParser.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksDelimiterParser.java new file mode 100644 index 00000000..04301e0f --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksDelimiterParser.java @@ -0,0 +1,55 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.io.StringWriter; + +import com.google.common.base.Strings; + +public class StarRocksDelimiterParser { + + private static final String HEX_STRING = "0123456789ABCDEF"; + + public static String parse(String sp, String dSp) throws RuntimeException { + if (Strings.isNullOrEmpty(sp)) { + return dSp; + } + if (!sp.toUpperCase().startsWith("\\X")) { + return sp; + } + String hexStr = sp.substring(2); + // check hex str + if (hexStr.isEmpty()) { + throw new RuntimeException("Failed to parse delimiter: `Hex str is empty`"); + } + if (hexStr.length() % 2 != 0) { + throw new RuntimeException("Failed to parse delimiter: `Hex str length error`"); + } + for (char hexChar : hexStr.toUpperCase().toCharArray()) { + if (HEX_STRING.indexOf(hexChar) == -1) { + throw new RuntimeException("Failed to parse delimiter: `Hex str format error`"); + } + } + // transform to separator + StringWriter writer = new StringWriter(); + for (byte b : hexStrToBytes(hexStr)) { + writer.append((char) b); + } + return writer.toString(); + } + + private static byte[] hexStrToBytes(String hexStr) { + String upperHexStr = hexStr.toUpperCase(); + int length = upperHexStr.length() / 2; + char[] hexChars = upperHexStr.toCharArray(); + byte[] bytes = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + bytes[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return bytes; + } + + private static byte charToByte(char c) { + return (byte) HEX_STRING.indexOf(c); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksISerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksISerializer.java new file mode 100644 index 00000000..7bcb8973 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksISerializer.java @@ -0,0 +1,11 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.io.Serializable; + +import com.alibaba.datax.common.element.Record; + +public interface StarRocksISerializer extends Serializable { + + String serialize(Record row); + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksJsonSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksJsonSerializer.java new file mode 100644 index 00000000..60faa1be --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksJsonSerializer.java @@ -0,0 +1,34 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.fastjson.JSON; + +public class StarRocksJsonSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { + + private static final long serialVersionUID = 1L; + + private final List fieldNames; + + public StarRocksJsonSerializer(List fieldNames) { + this.fieldNames = fieldNames; + } + + @Override + public String serialize(Record row) { + if (null == fieldNames) { + return ""; + } + Map rowMap = new HashMap<>(fieldNames.size()); + int idx = 0; + for (String fieldName : fieldNames) { + rowMap.put(fieldName, fieldConvertion(row.getColumn(idx))); + idx++; + } + return JSON.toJSONString(rowMap); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksSerializerFactory.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksSerializerFactory.java new file mode 100644 index 00000000..85f446cd --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksSerializerFactory.java @@ -0,0 +1,22 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; + +import java.util.Map; + +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; + +public class StarRocksSerializerFactory { + + private StarRocksSerializerFactory() {} + + public static StarRocksISerializer createSerializer(StarRocksWriterOptions writerOptions) { + if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { + Map props = writerOptions.getLoadProps(); + return new StarRocksCsvSerializer(null == props || !props.containsKey("column_separator") ? null : String.valueOf(props.get("column_separator"))); + } + if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { + return new StarRocksJsonSerializer(writerOptions.getColumns()); + } + throw new RuntimeException("Failed to create row serializer, unsupported `format` from stream load properties."); + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java new file mode 100755 index 00000000..c3b5d8d1 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java @@ -0,0 +1,83 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.util; + +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.util.RdbmsException; +import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.druid.sql.parser.ParserException; +import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; +import com.google.common.base.Strings; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.Statement; +import java.util.*; + +public final class StarRocksWriterUtil { + private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterUtil.class); + + private StarRocksWriterUtil() {} + + public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { + if (null == preOrPostSqls) { + return Collections.emptyList(); + } + List renderedSqls = new ArrayList<>(); + for (String sql : preOrPostSqls) { + if (!Strings.isNullOrEmpty(sql)) { + renderedSqls.add(sql.replace(Constant.TABLE_NAME_PLACEHOLDER, tableName)); + } + } + return renderedSqls; + } + + public static void executeSqls(Connection conn, List sqls) { + Statement stmt = null; + String currentSql = null; + try { + stmt = conn.createStatement(); + for (String sql : sqls) { + currentSql = sql; + DBUtil.executeSqlWithoutResultSet(stmt, sql); + } + } catch (Exception e) { + throw RdbmsException.asQueryException(DataBaseType.MySql, e, currentSql, null, null); + } finally { + DBUtil.closeDBResources(null, stmt, null); + } + } + + public static void preCheckPrePareSQL(StarRocksWriterOptions options) { + String table = options.getTable(); + List preSqls = options.getPreSqlList(); + List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(preSqls, table); + if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { + LOG.info("Begin to preCheck preSqls:[{}].", String.join(";", renderedPreSqls)); + for (String sql : renderedPreSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e) { + throw RdbmsException.asPreSQLParserException(DataBaseType.MySql,e,sql); + } + } + } + } + + public static void preCheckPostSQL(StarRocksWriterOptions options) { + String table = options.getTable(); + List postSqls = options.getPostSqlList(); + List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(postSqls, table); + if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { + LOG.info("Begin to preCheck postSqls:[{}].", String.join(";", renderedPostSqls)); + for(String sql : renderedPostSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e){ + throw RdbmsException.asPostSQLParserException(DataBaseType.MySql,e,sql); + } + } + } + } +} From 0582da63a51b63768c67bd75a5096dec53e4f788 Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 1 Sep 2021 17:08:12 +0800 Subject: [PATCH 027/251] remove doriswriter --- .../writer/doriswriter/StarRocksWriter.java | 141 -------------- .../doriswriter/StarRocksWriterOptions.java | 146 --------------- .../manager/StarRocksFlushTuple.java | 20 -- .../manager/StarRocksStreamLoadVisitor.java | 175 ------------------ .../manager/StarRocksWriterManager.java | 144 -------------- .../row/StarRocksBaseSerializer.java | 18 -- .../row/StarRocksCsvSerializer.java | 32 ---- .../row/StarRocksDelimiterParser.java | 55 ------ .../doriswriter/row/StarRocksISerializer.java | 11 -- .../row/StarRocksJsonSerializer.java | 34 ---- .../row/StarRocksSerializerFactory.java | 22 --- .../doriswriter/util/StarRocksWriterUtil.java | 83 --------- 12 files changed, 881 deletions(-) delete mode 100755 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java delete mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java delete mode 100755 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java deleted file mode 100755 index 666a99d9..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriter.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter; - -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.RecordReceiver; -import com.alibaba.datax.common.spi.Writer; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.manager.StarRocksWriterManager; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksISerializer; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksSerializerFactory; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.util.StarRocksWriterUtil; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.sql.Connection; -import java.util.ArrayList; -import java.util.List; - -public class StarRocksWriter extends Writer { - - public static class Job extends Writer.Job { - - private static final Logger LOG = LoggerFactory.getLogger(Job.class); - private Configuration originalConfig = null; - private StarRocksWriterOptions options; - - @Override - public void init() { - this.originalConfig = super.getPluginJobConf(); - options = new StarRocksWriterOptions(super.getPluginJobConf()); - options.doPretreatment(); - } - - @Override - public void preCheck(){ - this.init(); - StarRocksWriterUtil.preCheckPrePareSQL(options); - StarRocksWriterUtil.preCheckPostSQL(options); - } - - @Override - public void prepare() { - String username = options.getUsername(); - String password = options.getPassword(); - String jdbcUrl = options.getJdbcUrl(); - List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPreSqlList(), options.getTable()); - if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { - Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); - LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPreSqls), jdbcUrl); - StarRocksWriterUtil.executeSqls(conn, renderedPreSqls); - DBUtil.closeDBResources(null, null, conn); - } - } - - @Override - public List split(int mandatoryNumber) { - List configurations = new ArrayList<>(mandatoryNumber); - for (int i = 0; i < mandatoryNumber; i++) { - configurations.add(originalConfig); - } - return configurations; - } - - @Override - public void post() { - String username = options.getUsername(); - String password = options.getPassword(); - String jdbcUrl = options.getJdbcUrl(); - List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(options.getPostSqlList(), options.getTable()); - if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { - Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); - LOG.info("Begin to execute preSqls:[{}]. context info:{}.", String.join(";", renderedPostSqls), jdbcUrl); - StarRocksWriterUtil.executeSqls(conn, renderedPostSqls); - DBUtil.closeDBResources(null, null, conn); - } - } - - @Override - public void destroy() { - } - - } - - public static class Task extends Writer.Task { - private StarRocksWriterManager writerManager; - private StarRocksWriterOptions options; - private StarRocksISerializer rowSerializer; - - @Override - public void init() { - options = new StarRocksWriterOptions(super.getPluginJobConf()); - writerManager = new StarRocksWriterManager(options); - rowSerializer = StarRocksSerializerFactory.createSerializer(options); - } - - @Override - public void prepare() { - } - - public void startWrite(RecordReceiver recordReceiver) { - try { - Record record; - while ((record = recordReceiver.getFromReader()) != null) { - if (record.getColumnNumber() != options.getColumns().size()) { - throw DataXException - .asDataXException( - DBUtilErrorCode.CONF_ERROR, - String.format( - "列配置信息有错误. 因为您配置的任务中,源头读取字段数:%s 与 目的表要写入的字段数:%s 不相等. 请检查您的配置并作出修改.", - record.getColumnNumber(), - options.getColumns().size())); - } - writerManager.writeRecord(rowSerializer.serialize(record)); - } - } catch (Exception e) { - throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); - } - } - - @Override - public void post() { - try { - writerManager.close(); - } catch (Exception e) { - throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); - } - } - - @Override - public void destroy() {} - - @Override - public boolean supportFailOver(){ - return false; - } - } -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java deleted file mode 100644 index 5180512f..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/StarRocksWriterOptions.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter; - -import java.io.Serializable; - -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public class StarRocksWriterOptions implements Serializable { - - private static final long serialVersionUID = 1l; - private static final long KILO_BYTES_SCALE = 1024l; - private static final long MEGA_BYTES_SCALE = KILO_BYTES_SCALE * KILO_BYTES_SCALE; - private static final int MAX_RETRIES = 1; - private static final int BATCH_ROWS = 500000; - private static final long BATCH_BYTES = 90 * MEGA_BYTES_SCALE; - - private static final String KEY_LOAD_PROPS_FORMAT = "format"; - public enum StreamLoadFormat { - CSV, JSON; - } - - private static final String KEY_USERNAME = "username"; - private static final String KEY_PASSWORD = "password"; - private static final String KEY_DATABASE = "database"; - private static final String KEY_TABLE = "table"; - private static final String KEY_COLUMN = "column"; - private static final String KEY_PRE_SQL = "preSql"; - private static final String KEY_POST_SQL = "postSql"; - private static final String KEY_JDBC_URL = "jdbcUrl"; - private static final String KEY_MAX_BATCH_ROWS = "maxBatchRows"; - private static final String KEY_MAX_BATCH_SIZE = "maxBatchSize"; - private static final String KEY_LOAD_URL = "loadUrl"; - private static final String KEY_FLUSH_QUEUE_LENGTH = "flushQueueLength"; - private static final String KEY_LOAD_PROPS = "loadProps"; - - private final Configuration options; - - public StarRocksWriterOptions(Configuration options) { - this.options = options; - } - - public void doPretreatment() { - validateRequired(); - validateStreamLoadUrl(); - } - - public String getJdbcUrl() { - return options.getString(KEY_JDBC_URL); - } - - public String getDatabase() { - return options.getString(KEY_DATABASE); - } - - public String getTable() { - return options.getString(KEY_TABLE); - } - - public String getUsername() { - return options.getString(KEY_USERNAME); - } - - public String getPassword() { - return options.getString(KEY_PASSWORD); - } - - public List getLoadUrlList() { - return options.getList(KEY_LOAD_URL, String.class); - } - - public List getColumns() { - return options.getList(KEY_COLUMN, String.class).stream().map(str -> str.replace("`", "")).collect(Collectors.toList()); - } - - public List getPreSqlList() { - return options.getList(KEY_PRE_SQL, String.class); - } - - public List getPostSqlList() { - return options.getList(KEY_POST_SQL, String.class); - } - - public Map getLoadProps() { - return options.getMap(KEY_LOAD_PROPS); - } - - public int getMaxRetries() { - return MAX_RETRIES; - } - - public int getBatchRows() { - Integer rows = options.getInt(KEY_MAX_BATCH_ROWS); - return null == rows ? BATCH_ROWS : rows; - } - - public long getBatchSize() { - Long size = options.getLong(KEY_MAX_BATCH_SIZE); - return null == size ? BATCH_BYTES : size; - } - - public int getFlushQueueLength() { - Integer len = options.getInt(KEY_FLUSH_QUEUE_LENGTH); - return null == len ? 1 : len; - } - - public StreamLoadFormat getStreamLoadFormat() { - Map loadProps = getLoadProps(); - if (null == loadProps) { - return StreamLoadFormat.CSV; - } - if (loadProps.containsKey(KEY_LOAD_PROPS_FORMAT) - && StreamLoadFormat.JSON.name().equalsIgnoreCase(String.valueOf(loadProps.get(KEY_LOAD_PROPS_FORMAT)))) { - return StreamLoadFormat.JSON; - } - return StreamLoadFormat.CSV; - } - - private void validateStreamLoadUrl() { - List urlList = getLoadUrlList(); - for (String host : urlList) { - if (host.split(":").length < 2) { - throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, - "loadUrl的格式不正确,请输入 `fe_ip:fe_http_ip;fe_ip:fe_http_ip`。"); - } - } - } - - private void validateRequired() { - final String[] requiredOptionKeys = new String[]{ - KEY_USERNAME, - KEY_PASSWORD, - KEY_DATABASE, - KEY_TABLE, - KEY_COLUMN, - KEY_LOAD_URL - }; - for (String optionKey : requiredOptionKeys) { - options.getNecessaryValue(optionKey, DBUtilErrorCode.REQUIRED_VALUE); - } - } -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java deleted file mode 100644 index cd8c663b..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksFlushTuple.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; - -import java.util.List; - -public class StarRocksFlushTuple { - - private String label; - private Long bytes; - private List rows; - - public StarRocksFlushTuple(String label, Long bytes, List rows) { - this.label = label; - this.bytes = bytes; - this.rows = rows; - } - - public String getLabel() { return label; } - public Long getBytes() { return bytes; } - public List getRows() { return rows; } -} \ No newline at end of file diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java deleted file mode 100644 index 84fc5200..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksStreamLoadVisitor.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; - -import com.alibaba.fastjson.JSON; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.row.StarRocksDelimiterParser; - -import org.apache.commons.codec.binary.Base64; -import org.apache.http.HttpEntity; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.impl.client.CloseableHttpClient; -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.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; -import java.util.Map; - - -public class StarRocksStreamLoadVisitor { - - private static final Logger LOG = LoggerFactory.getLogger(StarRocksStreamLoadVisitor.class); - - private final StarRocksWriterOptions writerOptions; - private int pos; - - public StarRocksStreamLoadVisitor(StarRocksWriterOptions writerOptions) { - this.writerOptions = writerOptions; - } - - public void doStreamLoad(StarRocksFlushTuple flushData) throws IOException { - String host = getAvailableHost(); - if (null == host) { - throw new IOException("None of the host in `load_url` could be connected."); - } - String loadUrl = new StringBuilder(host) - .append("/api/") - .append(writerOptions.getDatabase()) - .append("/") - .append(writerOptions.getTable()) - .append("/_stream_load") - .toString(); - LOG.debug(String.format("Start to join batch data: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); - Map loadResult = doHttpPut(loadUrl, flushData.getLabel(), joinRows(flushData.getRows(), flushData.getBytes().intValue())); - final String keyStatus = "Status"; - if (null == loadResult || !loadResult.containsKey(keyStatus)) { - throw new IOException("Unable to flush data to StarRocks: unknown result status."); - } - LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); - if (loadResult.get(keyStatus).equals("Fail")) { - throw new IOException( - new StringBuilder("Failed to flush data to StarRocks.\n").append(JSON.toJSONString(loadResult)).toString() - ); - } - } - - private String getAvailableHost() { - List hostList = writerOptions.getLoadUrlList(); - if (pos >= hostList.size()) { - pos = 0; - } - for (; pos < hostList.size(); pos++) { - String host = new StringBuilder("http://").append(hostList.get(pos)).toString(); - if (tryHttpConnection(host)) { - return host; - } - } - return null; - } - - private boolean tryHttpConnection(String host) { - try { - URL url = new URL(host); - HttpURLConnection co = (HttpURLConnection) url.openConnection(); - co.setConnectTimeout(1000); - co.connect(); - co.disconnect(); - return true; - } catch (Exception e1) { - LOG.warn("Failed to connect to address:{}", host, e1); - return false; - } - } - - private byte[] joinRows(List rows, int totalBytes) { - if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { - Map props = writerOptions.getLoadProps(); - byte[] lineDelimiter = StarRocksDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n").getBytes(StandardCharsets.UTF_8); - ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); - for (String row : rows) { - bos.put(row.getBytes(StandardCharsets.UTF_8)); - bos.put(lineDelimiter); - } - return bos.array(); - } - - if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - ByteBuffer bos = ByteBuffer.allocate(totalBytes + (rows.isEmpty() ? 2 : rows.size() + 1)); - bos.put("[".getBytes(StandardCharsets.UTF_8)); - byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); - boolean isFirstElement = true; - for (String row : rows) { - if (!isFirstElement) { - bos.put(jsonDelimiter); - } - bos.put(row.getBytes(StandardCharsets.UTF_8)); - isFirstElement = false; - } - bos.put("]".getBytes(StandardCharsets.UTF_8)); - return bos.array(); - } - throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); - } - - @SuppressWarnings("unchecked") - private Map doHttpPut(String loadUrl, String label, byte[] data) throws IOException { - LOG.info(String.format("Executing stream load to: '%s', size: '%s'", loadUrl, data.length)); - final HttpClientBuilder httpClientBuilder = HttpClients.custom() - .setRedirectStrategy(new DefaultRedirectStrategy() { - @Override - protected boolean isRedirectable(String method) { - return true; - } - }); - try (CloseableHttpClient httpclient = httpClientBuilder.build()) { - HttpPut httpPut = new HttpPut(loadUrl); - List cols = writerOptions.getColumns(); - if (null != cols && !cols.isEmpty()) { - httpPut.setHeader("columns", String.join(",", cols)); - } - if (null != writerOptions.getLoadProps()) { - for (Map.Entry entry : writerOptions.getLoadProps().entrySet()) { - httpPut.setHeader(entry.getKey(), String.valueOf(entry.getValue())); - } - } - httpPut.setHeader("Expect", "100-continue"); - httpPut.setHeader("label", label); - httpPut.setHeader("Content-Type", "application/x-www-form-urlencoded"); - httpPut.setHeader("Authorization", getBasicAuthHeader(writerOptions.getUsername(), writerOptions.getPassword())); - httpPut.setEntity(new ByteArrayEntity(data)); - httpPut.setConfig(RequestConfig.custom().setRedirectsEnabled(true).build()); - try (CloseableHttpResponse resp = httpclient.execute(httpPut)) { - int code = resp.getStatusLine().getStatusCode(); - if (200 != code) { - LOG.warn("Request failed with code:{}", code); - return null; - } - HttpEntity respEntity = resp.getEntity(); - if (null == respEntity) { - LOG.warn("Request failed with empty response."); - return null; - } - return (Map)JSON.parse(EntityUtils.toString(respEntity)); - } - } - } - - private String getBasicAuthHeader(String username, String password) { - String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes()); - return new StringBuilder("Basic ").append(new String(encodedAuth)).toString(); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java deleted file mode 100644 index 4e53adeb..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/manager/StarRocksWriterManager.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.LinkedBlockingDeque; - -import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; -import com.google.common.base.Strings; - -public class StarRocksWriterManager { - - private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterManager.class); - - private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; - private final StarRocksWriterOptions writerOptions; - - private final List buffer = new ArrayList<>(); - private int batchCount = 0; - private long batchSize = 0; - private volatile boolean closed = false; - private volatile Exception flushException; - private final LinkedBlockingDeque flushQueue; - - public StarRocksWriterManager(StarRocksWriterOptions writerOptions) { - this.writerOptions = writerOptions; - this.starrocksStreamLoadVisitor = new StarRocksStreamLoadVisitor(writerOptions); - flushQueue = new LinkedBlockingDeque<>(writerOptions.getFlushQueueLength()); - this.startAsyncFlushing(); - } - - public final synchronized void writeRecord(String record) throws IOException { - checkFlushException(); - try { - buffer.add(record); - batchCount++; - batchSize += record.getBytes().length; - if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { - String label = createBatchLabel(); - LOG.debug(String.format("StarRocks buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); - flush(label, false); - } - } catch (Exception e) { - throw new IOException("Writing records to StarRocks failed.", e); - } - } - - public synchronized void flush(String label, boolean waitUtilDone) throws Exception { - checkFlushException(); - if (batchCount == 0) { - if (waitUtilDone) { - waitAsyncFlushingDone(); - } - return; - } - flushQueue.put(new StarRocksFlushTuple(label, batchSize, new ArrayList<>(buffer))); - if (waitUtilDone) { - // wait the last flush - waitAsyncFlushingDone(); - } - buffer.clear(); - batchCount = 0; - batchSize = 0; - } - - public synchronized void close() { - if (!closed) { - closed = true; - try { - String label = createBatchLabel(); - if (batchCount > 0) LOG.debug(String.format("StarRocks Sink is about to close: label[%s].", label)); - flush(label, true); - } catch (Exception e) { - throw new RuntimeException("Writing records to StarRocks failed.", e); - } - } - checkFlushException(); - } - - public String createBatchLabel() { - return UUID.randomUUID().toString(); - } - - private void startAsyncFlushing() { - // start flush thread - Thread flushThread = new Thread(new Runnable(){ - public void run() { - while(true) { - try { - asyncFlush(); - } catch (Exception e) { - flushException = e; - } - } - } - }); - flushThread.setDaemon(true); - flushThread.start(); - } - - private void waitAsyncFlushingDone() throws InterruptedException { - // wait previous flushings - for (int i = 0; i <= writerOptions.getFlushQueueLength(); i++) { - flushQueue.put(new StarRocksFlushTuple("", 0l, null)); - } - } - - private void asyncFlush() throws Exception { - StarRocksFlushTuple flushData = flushQueue.take(); - if (Strings.isNullOrEmpty(flushData.getLabel())) { - return; - } - LOG.debug(String.format("Async stream load: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); - for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { - try { - // flush to StarRocks with stream load - starrocksStreamLoadVisitor.doStreamLoad(flushData); - LOG.info(String.format("Async stream load finished: label[%s].", flushData.getLabel())); - break; - } catch (Exception e) { - LOG.warn("Failed to flush batch data to StarRocks, retry times = {}", i, e); - if (i >= writerOptions.getMaxRetries()) { - throw new IOException(e); - } - try { - Thread.sleep(1000l * (i + 1)); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - throw new IOException("Unable to flush, interrupted while doing another attempt", e); - } - } - } - } - - private void checkFlushException() { - if (flushException != null) { - throw new RuntimeException("Writing records to StarRocks failed.", flushException); - } - } -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java deleted file mode 100644 index 77d25f12..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksBaseSerializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Column.Type; - -public class StarRocksBaseSerializer { - - protected String fieldConvertion(Column col) { - if (null == col.getRawData()) { - return null; - } - if (Type.BOOL == col.getType()) { - return String.valueOf(col.asLong()); - } - return col.asString(); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java deleted file mode 100644 index 1366d570..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksCsvSerializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import java.io.StringWriter; - -import com.alibaba.datax.common.element.Record; - -import com.google.common.base.Strings; - -public class StarRocksCsvSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { - - private static final long serialVersionUID = 1L; - - private final String columnSeparator; - - public StarRocksCsvSerializer(String sp) { - this.columnSeparator = StarRocksDelimiterParser.parse(sp, "\t"); - } - - @Override - public String serialize(Record row) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < row.getColumnNumber(); i++) { - String value = fieldConvertion(row.getColumn(i)); - sb.append(null == value ? "\\N" : value); - if (i < row.getColumnNumber() - 1) { - sb.append(columnSeparator); - } - } - return sb.toString(); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java deleted file mode 100644 index 04301e0f..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksDelimiterParser.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import java.io.StringWriter; - -import com.google.common.base.Strings; - -public class StarRocksDelimiterParser { - - private static final String HEX_STRING = "0123456789ABCDEF"; - - public static String parse(String sp, String dSp) throws RuntimeException { - if (Strings.isNullOrEmpty(sp)) { - return dSp; - } - if (!sp.toUpperCase().startsWith("\\X")) { - return sp; - } - String hexStr = sp.substring(2); - // check hex str - if (hexStr.isEmpty()) { - throw new RuntimeException("Failed to parse delimiter: `Hex str is empty`"); - } - if (hexStr.length() % 2 != 0) { - throw new RuntimeException("Failed to parse delimiter: `Hex str length error`"); - } - for (char hexChar : hexStr.toUpperCase().toCharArray()) { - if (HEX_STRING.indexOf(hexChar) == -1) { - throw new RuntimeException("Failed to parse delimiter: `Hex str format error`"); - } - } - // transform to separator - StringWriter writer = new StringWriter(); - for (byte b : hexStrToBytes(hexStr)) { - writer.append((char) b); - } - return writer.toString(); - } - - private static byte[] hexStrToBytes(String hexStr) { - String upperHexStr = hexStr.toUpperCase(); - int length = upperHexStr.length() / 2; - char[] hexChars = upperHexStr.toCharArray(); - byte[] bytes = new byte[length]; - for (int i = 0; i < length; i++) { - int pos = i * 2; - bytes[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); - } - return bytes; - } - - private static byte charToByte(char c) { - return (byte) HEX_STRING.indexOf(c); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java deleted file mode 100644 index 7bcb8973..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksISerializer.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import java.io.Serializable; - -import com.alibaba.datax.common.element.Record; - -public interface StarRocksISerializer extends Serializable { - - String serialize(Record row); - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java deleted file mode 100644 index 60faa1be..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksJsonSerializer.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.alibaba.datax.common.element.Record; -import com.alibaba.fastjson.JSON; - -public class StarRocksJsonSerializer extends StarRocksBaseSerializer implements StarRocksISerializer { - - private static final long serialVersionUID = 1L; - - private final List fieldNames; - - public StarRocksJsonSerializer(List fieldNames) { - this.fieldNames = fieldNames; - } - - @Override - public String serialize(Record row) { - if (null == fieldNames) { - return ""; - } - Map rowMap = new HashMap<>(fieldNames.size()); - int idx = 0; - for (String fieldName : fieldNames) { - rowMap.put(fieldName, fieldConvertion(row.getColumn(idx))); - idx++; - } - return JSON.toJSONString(rowMap); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java deleted file mode 100644 index 85f446cd..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/row/StarRocksSerializerFactory.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.row; - -import java.util.Map; - -import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; - -public class StarRocksSerializerFactory { - - private StarRocksSerializerFactory() {} - - public static StarRocksISerializer createSerializer(StarRocksWriterOptions writerOptions) { - if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { - Map props = writerOptions.getLoadProps(); - return new StarRocksCsvSerializer(null == props || !props.containsKey("column_separator") ? null : String.valueOf(props.get("column_separator"))); - } - if (StarRocksWriterOptions.StreamLoadFormat.JSON.equals(writerOptions.getStreamLoadFormat())) { - return new StarRocksJsonSerializer(writerOptions.getColumns()); - } - throw new RuntimeException("Failed to create row serializer, unsupported `format` from stream load properties."); - } - -} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java deleted file mode 100755 index c3b5d8d1..00000000 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/doriswriter/util/StarRocksWriterUtil.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.starrocks.connector.datax.plugin.writer.starrockswriter.util; - -import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.alibaba.datax.plugin.rdbms.util.RdbmsException; -import com.alibaba.datax.plugin.rdbms.writer.Constant; -import com.alibaba.druid.sql.parser.ParserException; -import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; -import com.google.common.base.Strings; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.sql.Connection; -import java.sql.Statement; -import java.util.*; - -public final class StarRocksWriterUtil { - private static final Logger LOG = LoggerFactory.getLogger(StarRocksWriterUtil.class); - - private StarRocksWriterUtil() {} - - public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { - if (null == preOrPostSqls) { - return Collections.emptyList(); - } - List renderedSqls = new ArrayList<>(); - for (String sql : preOrPostSqls) { - if (!Strings.isNullOrEmpty(sql)) { - renderedSqls.add(sql.replace(Constant.TABLE_NAME_PLACEHOLDER, tableName)); - } - } - return renderedSqls; - } - - public static void executeSqls(Connection conn, List sqls) { - Statement stmt = null; - String currentSql = null; - try { - stmt = conn.createStatement(); - for (String sql : sqls) { - currentSql = sql; - DBUtil.executeSqlWithoutResultSet(stmt, sql); - } - } catch (Exception e) { - throw RdbmsException.asQueryException(DataBaseType.MySql, e, currentSql, null, null); - } finally { - DBUtil.closeDBResources(null, stmt, null); - } - } - - public static void preCheckPrePareSQL(StarRocksWriterOptions options) { - String table = options.getTable(); - List preSqls = options.getPreSqlList(); - List renderedPreSqls = StarRocksWriterUtil.renderPreOrPostSqls(preSqls, table); - if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { - LOG.info("Begin to preCheck preSqls:[{}].", String.join(";", renderedPreSqls)); - for (String sql : renderedPreSqls) { - try { - DBUtil.sqlValid(sql, DataBaseType.MySql); - } catch (ParserException e) { - throw RdbmsException.asPreSQLParserException(DataBaseType.MySql,e,sql); - } - } - } - } - - public static void preCheckPostSQL(StarRocksWriterOptions options) { - String table = options.getTable(); - List postSqls = options.getPostSqlList(); - List renderedPostSqls = StarRocksWriterUtil.renderPreOrPostSqls(postSqls, table); - if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { - LOG.info("Begin to preCheck postSqls:[{}].", String.join(";", renderedPostSqls)); - for(String sql : renderedPostSqls) { - try { - DBUtil.sqlValid(sql, DataBaseType.MySql); - } catch (ParserException e){ - throw RdbmsException.asPostSQLParserException(DataBaseType.MySql,e,sql); - } - } - } - } -} From 1e03c200f71ea3f042d9b69f1cb1fa511fe6062d Mon Sep 17 00:00:00 2001 From: fariel Date: Wed, 1 Sep 2021 20:37:00 +0800 Subject: [PATCH 028/251] support wildcard column --- build.sh | 1 + .../starrockswriter/StarRocksWriter.java | 5 +++++ .../StarRocksWriterOptions.java | 20 ++++++++++++++++++- .../util/StarRocksWriterUtil.java | 19 ++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100755 build.sh diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..e3992acb --- /dev/null +++ b/build.sh @@ -0,0 +1 @@ +mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java index 666a99d9..9d8fdf15 100755 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriter.java @@ -93,6 +93,11 @@ public class StarRocksWriter extends Writer { @Override public void init() { options = new StarRocksWriterOptions(super.getPluginJobConf()); + if (options.isWildcardColumn()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, options.getJdbcUrl(), options.getUsername(), options.getPassword()); + List columns = StarRocksWriterUtil.getStarRocksColumns(conn, options.getDatabase(), options.getTable()); + options.setInfoCchemaColumns(columns); + } writerManager = new StarRocksWriterManager(options); rowSerializer = StarRocksSerializerFactory.createSerializer(options); } diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java index 5180512f..9e4abd12 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -39,9 +39,16 @@ public class StarRocksWriterOptions implements Serializable { private static final String KEY_LOAD_PROPS = "loadProps"; private final Configuration options; + private List infoCchemaColumns; + private List userSetColumns; + private boolean isWildcardColumn; public StarRocksWriterOptions(Configuration options) { this.options = options; + this.userSetColumns = options.getList(KEY_COLUMN, String.class).stream().map(str -> str.replace("`", "")).collect(Collectors.toList()); + if (1 == options.getList(KEY_COLUMN, String.class).size() && "*".trim().equals(options.getList(KEY_COLUMN, String.class).get(0))) { + this.isWildcardColumn = true; + } } public void doPretreatment() { @@ -74,7 +81,18 @@ public class StarRocksWriterOptions implements Serializable { } public List getColumns() { - return options.getList(KEY_COLUMN, String.class).stream().map(str -> str.replace("`", "")).collect(Collectors.toList()); + if (isWildcardColumn) { + return this.infoCchemaColumns; + } + return this.userSetColumns; + } + + public boolean isWildcardColumn() { + return this.isWildcardColumn; + } + + public void setInfoCchemaColumns(List cols) { + this.infoCchemaColumns = cols; } public List getPreSqlList() { diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java index c3b5d8d1..8de4ad60 100755 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/util/StarRocksWriterUtil.java @@ -12,6 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.Connection; +import java.sql.ResultSet; import java.sql.Statement; import java.util.*; @@ -20,6 +21,24 @@ public final class StarRocksWriterUtil { private StarRocksWriterUtil() {} + public static List getStarRocksColumns(Connection conn, String databaseName, String tableName) { + String currentSql = String.format("SELECT COLUMN_NAME FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = '%s' AND `TABLE_NAME` = '%s' ORDER BY `ORDINAL_POSITION` ASC;", databaseName, tableName); + List columns = new ArrayList<>(); + ResultSet rs = null; + try { + rs = DBUtil.query(conn, currentSql); + while (DBUtil.asyncResultSetNext(rs)) { + String colName = rs.getString("COLUMN_NAME"); + columns.add(colName); + } + return columns; + } catch (Exception e) { + throw RdbmsException.asQueryException(DataBaseType.MySql, e, currentSql, null, null); + } finally { + DBUtil.closeDBResources(rs, null, null); + } + } + public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { if (null == preOrPostSqls) { return Collections.emptyList(); From 16a61519191bf73ea82552d0ceb4658138ac9143 Mon Sep 17 00:00:00 2001 From: fariel Date: Thu, 9 Sep 2021 15:30:01 +0800 Subject: [PATCH 029/251] fix npe --- .../starrockswriter/manager/StarRocksStreamLoadVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index 15e93e87..a9d10621 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -96,7 +96,7 @@ public class StarRocksStreamLoadVisitor { private byte[] joinRows(List rows, int totalBytes) { if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { Map props = writerOptions.getLoadProps(); - byte[] lineDelimiter = (props.containsKey("row_delimiter") ? StarRocksDelimiterParser.parse(String.valueOf(props.get("row_delimiter")), "\n") : "\n").getBytes(StandardCharsets.UTF_8); + byte[] lineDelimiter = StarRocksDelimiterParser.parse((String)props.get("row_delimiter"), "\n").getBytes(StandardCharsets.UTF_8); ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); for (String row : rows) { bos.put(row.getBytes(StandardCharsets.UTF_8)); From 38b4dc8946178eb013f002f93de99a748950cd9f Mon Sep 17 00:00:00 2001 From: wang Date: Thu, 9 Sep 2021 16:31:47 +0800 Subject: [PATCH 030/251] =?UTF-8?q?fix=20bug:=20=E8=A7=A3=E5=86=B3ob=20wri?= =?UTF-8?q?ter=E8=BF=9E=E6=8E=A5=E6=95=B0=E9=9A=8F=E7=9D=80=E5=86=99?= =?UTF-8?q?=E5=85=A5=E4=B8=8D=E6=96=AD=E4=B8=8A=E6=B6=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datax/plugin/writer/oceanbasev10writer/task/InsertTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java index 522d91a5..36fc726b 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java @@ -65,6 +65,7 @@ public class InsertTask implements Runnable { this.writeRecordSql = writeRecordSql; this.isStop = false; this.deleteMeta = deleteMeta; + connHolder.initConnection(); } void setWriterTask(ConcurrentTableWriterTask writerTask) { @@ -151,7 +152,6 @@ public class InsertTask implements Runnable { public void doMultiInsert(final List buffer, final boolean printCost, final long restrict) { checkMemstore(); - connHolder.initConnection(); Connection conn = connHolder.getConn(); boolean success = false; long cost = 0; From b725a83ac13c17e082726267b0cc068761cd55da Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 10 Sep 2021 15:10:13 +0800 Subject: [PATCH 031/251] bumping version to 1.1.0 --- README.md | 157 ++-------------------------------------- build.sh | 4 + starrockswriter/pom.xml | 1 + 3 files changed, 11 insertions(+), 151 deletions(-) diff --git a/README.md b/README.md index 7fb4c5eb..9b271464 100644 --- a/README.md +++ b/README.md @@ -1,154 +1,9 @@ -![Datax-logo](https://github.com/alibaba/DataX/blob/master/images/DataX-logo.jpg) +# StarRocks writer for DataX +This is a repo forked from [DataX](`https://github.com/alibaba/DataX`), and maintained by [StarRocks](https://www.dorisdb.com) (starrockswriter). -# DataX - -DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 - -# DataX 商业版本 -阿里云DataWorks数据集成是DataX团队在阿里云上的商业化产品,致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下的数据同步解决方案。目前已经支持云上近3000家客户,单日同步数据超过3万亿条。DataWorks数据集成目前支持离线50+种数据源,可以进行整库迁移、批量上云、增量同步、分库分表等各类同步解决方案。2020年更新实时同步能力,2020年更新实时同步能力,支持10+种数据源的读写任意组合。提供MySQL,Oracle等多种数据源到阿里云MaxCompute,Hologres等大数据引擎的一键全增量同步解决方案。 - -https://www.aliyun.com/product/bigdata/ide - - -# Features - -DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。 - - - -# DataX详细介绍 - -##### 请参考:[DataX-Introduction](https://github.com/alibaba/DataX/blob/master/introduction.md) - - - -# Quick Start - -##### Download [DataX下载地址](http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz) - -##### 请点击:[Quick Start](https://github.com/alibaba/DataX/blob/master/userGuid.md) - - - -# Support Data Channels - -DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图,详情请点击:[DataX数据源参考指南](https://github.com/alibaba/DataX/wiki/DataX-all-data-channels) - -| 类型 | 数据源 | Reader(读) | Writer(写) |文档| -| ------------ | ---------- | :-------: | :-------: |:-------: | -| RDBMS 关系型数据库 | MySQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md)| -|             | Oracle     |     √     |     √     |[读](https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md)| -| | SQLServer | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/sqlserverreader/doc/sqlserverreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/sqlserverwriter/doc/sqlserverwriter.md)| -| | PostgreSQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/postgresqlreader/doc/postgresqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md)| -| | DRDS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md)| -| | 通用RDBMS(支持所有关系型数据库) | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/rdbmsreader/doc/rdbmsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/rdbmswriter/doc/rdbmswriter.md)| -| 阿里云数仓数据存储 | ODPS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/odpsreader/doc/odpsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/odpswriter/doc/odpswriter.md)| -| | ADS | | √ |[写](https://github.com/alibaba/DataX/blob/master/adswriter/doc/adswriter.md)| -| | OSS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ossreader/doc/ossreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/osswriter/doc/osswriter.md)| -| | OCS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ocsreader/doc/ocsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/ocswriter/doc/ocswriter.md)| -| NoSQL数据存储 | OTS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/otsreader/doc/otsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/otswriter/doc/otswriter.md)| -| | Hbase0.94 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase094xreader/doc/hbase094xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase094xwriter/doc/hbase094xwriter.md)| -| | Hbase1.1 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase11xreader/doc/hbase11xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase11xwriter/doc/hbase11xwriter.md)| -| | Phoenix4.x | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase11xsqlreader/doc/hbase11xsqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase11xsqlwriter/doc/hbase11xsqlwriter.md)| -| | Phoenix5.x | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase20xsqlreader/doc/hbase20xsqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase20xsqlwriter/doc/hbase20xsqlwriter.md)| -| | MongoDB | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mongodbreader/doc/mongodbreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mongodbwriter/doc/mongodbwriter.md)| -| | Hive | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hdfsreader/doc/hdfsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md)| -| | Cassandra | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/cassandrareader/doc/cassandrareader.md) 、[写](https://github.com/alibaba/DataX/blob/master/cassandrawriter/doc/cassandrawriter.md)| -| 无结构化数据存储 | TxtFile | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/txtfilereader/doc/txtfilereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/txtfilewriter/doc/txtfilewriter.md)| -| | FTP | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ftpreader/doc/ftpreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/ftpwriter/doc/ftpwriter.md)| -| | HDFS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hdfsreader/doc/hdfsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md)| -| | Elasticsearch | | √ |[写](https://github.com/alibaba/DataX/blob/master/elasticsearchwriter/doc/elasticsearchwriter.md)| -| 时间序列数据库 | OpenTSDB | √ | |[读](https://github.com/alibaba/DataX/blob/master/opentsdbreader/doc/opentsdbreader.md)| -| | TSDB | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/tsdbreader/doc/tsdbreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/tsdbwriter/doc/tsdbhttpwriter.md)| - -# 阿里云DataWorks数据集成 - -目前DataX的已有能力已经全部融和进阿里云的数据集成,并且比DataX更加高效、安全,同时数据集成具备DataX不具备的其它高级特性和功能。可以理解为数据集成是DataX的全面升级的商业化用版本,为企业可以提供稳定、可靠、安全的数据传输服务。与DataX相比,数据集成主要有以下几大突出特点: - -支持实时同步: - -- 功能简介:https://help.aliyun.com/document_detail/181912.html -- 支持的数据源:https://help.aliyun.com/document_detail/146778.html -- 支持数据处理:https://help.aliyun.com/document_detail/146777.html - -离线同步数据源种类大幅度扩充: - -- 新增比如:DB2、Kafka、Hologres、MetaQ、SAPHANA、达梦等等,持续扩充中 -- 离线同步支持的数据源:https://help.aliyun.com/document_detail/137670.html -- 具备同步解决方案: - - 解决方案系统:https://help.aliyun.com/document_detail/171765.html - - 一键全增量:https://help.aliyun.com/document_detail/175676.html - - 整库迁移:https://help.aliyun.com/document_detail/137809.html - - 批量上云:https://help.aliyun.com/document_detail/146671.html - - 更新更多能力请访问:https://help.aliyun.com/document_detail/137663.html - - -# 我要开发新的插件 - -请点击:[DataX插件开发宝典](https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md) - - -# 项目成员 - -核心Contributions: 言柏 、枕水、秋奇、青砾、一斅、云时 - -感谢天烬、光戈、祁然、巴真、静行对DataX做出的贡献。 - -# License - -This software is free to use under the Apache License [Apache license](https://github.com/alibaba/DataX/blob/master/license.txt). - -# -请及时提出issue给我们。请前往:[DataxIssue](https://github.com/alibaba/DataX/issues) - -# 开源版DataX企业用户 - -![Datax-logo](https://github.com/alibaba/DataX/blob/master/images/datax-enterprise-users.jpg) - -``` -长期招聘 联系邮箱:datax@alibabacloud.com -【JAVA开发职位】 -职位名称:JAVA资深开发工程师/专家/高级专家 -工作年限 : 2年以上 -学历要求 : 本科(如果能力靠谱,这些都不是条件) -期望层级 : P6/P7/P8 - -岗位描述: - 1. 负责阿里云大数据平台(数加)的开发设计。 - 2. 负责面向政企客户的大数据相关产品开发; - 3. 利用大规模机器学习算法挖掘数据之间的联系,探索数据挖掘技术在实际场景中的产品应用 ; - 4. 一站式大数据开发平台 - 5. 大数据任务调度引擎 - 6. 任务执行引擎 - 7. 任务监控告警 - 8. 海量异构数据同步 - -岗位要求: - 1. 拥有3年以上JAVA Web开发经验; - 2. 熟悉Java的基础技术体系。包括JVM、类装载、线程、并发、IO资源管理、网络; - 3. 熟练使用常用Java技术框架、对新技术框架有敏锐感知能力;深刻理解面向对象、设计原则、封装抽象; - 4. 熟悉HTML/HTML5和JavaScript;熟悉SQL语言; - 5. 执行力强,具有优秀的团队合作精神、敬业精神; - 6. 深刻理解设计模式及应用场景者加分; - 7. 具有较强的问题分析和处理能力、比较强的动手能力,对技术有强烈追求者优先考虑; - 8. 对高并发、高稳定可用性、高性能、大数据处理有过实际项目及产品经验者优先考虑; - 9. 有大数据产品、云产品、中间件技术解决方案者优先考虑。 -```` -钉钉用户群: - -- DataX开源用户交流群 - - - -- DataX开源用户交流群2 - - - -- DataX开源用户交流群3 - - - -- DataX开源用户交流群4 - - - -- DataX开源用户交流群5 - - +## How to use +1. Run `./build.sh` to gennerate the `starrockswriter.tar.gz`, then untar it into your own [DataX release](`https://github.com/alibaba/DataX`) directory(which will be `datax/plugin/writer/`). +2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to `https://docs.dorisdb.com`. +3. Run `python datax/bin/datax.py --jvm="-Xms6G -Xmx6G" --loglevel=debug job.json` to start a job. diff --git a/build.sh b/build.sh index e3992acb..e560ac8d 100755 --- a/build.sh +++ b/build.sh @@ -1 +1,5 @@ +ShellDir="$( cd "$( dirname "$0" )" && pwd )" +cd $ShellDir mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true +rm -f starrockswriter.tar.gz +tar -czvf starrockswriter.tar.gz target/datax/datax/plugin/writer/starrockswriter diff --git a/starrockswriter/pom.xml b/starrockswriter/pom.xml index f36fc4b5..9398b9ff 100755 --- a/starrockswriter/pom.xml +++ b/starrockswriter/pom.xml @@ -8,6 +8,7 @@ starrockswriter starrockswriter + 1.1.0 jar From 014b240a1ff9710d018b549fca30c49907defe05 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 10 Sep 2021 15:16:51 +0800 Subject: [PATCH 032/251] optimize build script --- build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index e560ac8d..1dd4fac6 100755 --- a/build.sh +++ b/build.sh @@ -2,4 +2,5 @@ ShellDir="$( cd "$( dirname "$0" )" && pwd )" cd $ShellDir mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true rm -f starrockswriter.tar.gz -tar -czvf starrockswriter.tar.gz target/datax/datax/plugin/writer/starrockswriter +cd target/datax/datax/plugin/writer/ +tar -czvf starrockswriter.tar.gz starrockswriter From 629fa484120574dc6521e288c37826d0cf7f2c49 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 10 Sep 2021 15:18:38 +0800 Subject: [PATCH 033/251] build starrockswriter.tar.gz --- build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sh b/build.sh index 1dd4fac6..609aa2bb 100755 --- a/build.sh +++ b/build.sh @@ -4,3 +4,4 @@ mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip rm -f starrockswriter.tar.gz cd target/datax/datax/plugin/writer/ tar -czvf starrockswriter.tar.gz starrockswriter +mv starrockswriter.tar.gz $ShellDir From e41e89330b7c19cf6ec634d4619756482f3319d4 Mon Sep 17 00:00:00 2001 From: fariel Date: Fri, 10 Sep 2021 15:21:44 +0800 Subject: [PATCH 034/251] modify readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b271464..2280a13f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # StarRocks writer for DataX -This is a repo forked from [DataX](`https://github.com/alibaba/DataX`), and maintained by [StarRocks](https://www.dorisdb.com) (starrockswriter). +This is a repo forked from [DataX](https://github.com/alibaba/DataX), and maintained by [StarRocks](https://www.dorisdb.com) (starrockswriter). ## How to use -1. Run `./build.sh` to gennerate the `starrockswriter.tar.gz`, then untar it into your own [DataX release](`https://github.com/alibaba/DataX`) directory(which will be `datax/plugin/writer/`). +1. Run `./build.sh` to gennerate the `starrockswriter.tar.gz`, then untar it into your own [DataX release](https://github.com/alibaba/DataX) directory(which will be `datax/plugin/writer/`). 2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to `https://docs.dorisdb.com`. 3. Run `python datax/bin/datax.py --jvm="-Xms6G -Xmx6G" --loglevel=debug job.json` to start a job. From 1ab7dde5d28de9b3017aec1126be1b3a5fed43f4 Mon Sep 17 00:00:00 2001 From: hffariel Date: Wed, 15 Sep 2021 14:31:01 +0800 Subject: [PATCH 035/251] modify README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2280a13f..0ff50387 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # StarRocks writer for DataX -This is a repo forked from [DataX](https://github.com/alibaba/DataX), and maintained by [StarRocks](https://www.dorisdb.com) (starrockswriter). +This is a repo forked from [DataX](https://github.com/alibaba/DataX), and maintained by [StarRocks](https://www.starrocks.com) (starrockswriter). ## How to use 1. Run `./build.sh` to gennerate the `starrockswriter.tar.gz`, then untar it into your own [DataX release](https://github.com/alibaba/DataX) directory(which will be `datax/plugin/writer/`). -2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to `https://docs.dorisdb.com`. +2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to the [Documentations](https://docs.starrocks.com). 3. Run `python datax/bin/datax.py --jvm="-Xms6G -Xmx6G" --loglevel=debug job.json` to start a job. From 39c7065526725f7994f8c55d364362840b7af876 Mon Sep 17 00:00:00 2001 From: hffariel Date: Wed, 15 Sep 2021 14:55:30 +0800 Subject: [PATCH 036/251] fix build issue --- starrockswriter/src/main/assembly/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/starrockswriter/src/main/assembly/package.xml b/starrockswriter/src/main/assembly/package.xml index 79ca7be8..c63845b4 100755 --- a/starrockswriter/src/main/assembly/package.xml +++ b/starrockswriter/src/main/assembly/package.xml @@ -19,7 +19,7 @@ target/ - starrockswriter-0.0.1-SNAPSHOT.jar + starrockswriter-1.1.0.jar plugin/writer/starrockswriter From 9e9fd10b445594d935e618676897ef5f2f71e7c1 Mon Sep 17 00:00:00 2001 From: hffariel Date: Wed, 15 Sep 2021 19:58:29 +0800 Subject: [PATCH 037/251] fix charset to utf-8 --- .../starrockswriter/manager/StarRocksStreamLoadVisitor.java | 2 +- .../writer/starrockswriter/manager/StarRocksWriterManager.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index a9d10621..aecac149 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -168,7 +168,7 @@ public class StarRocksStreamLoadVisitor { private String getBasicAuthHeader(String username, String password) { String auth = username + ":" + password; - byte[] encodedAuth = Base64.encodeBase64(auth.getBytes()); + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); return new StringBuilder("Basic ").append(new String(encodedAuth)).toString(); } diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index e5234425..0f68afe9 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -38,7 +39,7 @@ public class StarRocksWriterManager { try { buffer.add(record); batchCount++; - batchSize += record.getBytes().length; + batchSize += record.getBytes(StandardCharsets.UTF_8).length; if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { String label = createBatchLabel(); LOG.debug(String.format("StarRocks buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); From 8fd01d22ca4d4c0f2598d775b7abbd36ef4009b2 Mon Sep 17 00:00:00 2001 From: hffariel Date: Thu, 16 Sep 2021 16:38:24 +0800 Subject: [PATCH 038/251] remove aliyun mirror to do the auto releasing --- pom.xml | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/pom.xml b/pom.xml index 5f194b06..7d03f132 100644 --- a/pom.xml +++ b/pom.xml @@ -183,34 +183,6 @@ - - - central - Nexus aliyun - https://maven.aliyun.com/repository/central - - true - - - true - - - - - - - central - Nexus aliyun - https://maven.aliyun.com/repository/central - - true - - - true - - - - From 5b975c55a775e0a1075d1076987939d1e326030e Mon Sep 17 00:00:00 2001 From: wang Date: Thu, 16 Sep 2021 19:27:56 +0800 Subject: [PATCH 039/251] =?UTF-8?q?fix=20bug=EF=BC=9A=E5=9C=A8=E5=87=BA?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E4=BC=9A?= =?UTF-8?q?=E8=B0=83=E4=B8=80=E6=AC=A1reconnect=EF=BC=8C=E8=BF=99=E9=87=8C?= =?UTF-8?q?=E9=9D=A2=E9=87=8A=E6=94=BE=E6=97=A7=E8=BF=9E=E6=8E=A5=EF=BC=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=96=B0=E8=BF=9E=E6=8E=A5=EF=BC=9B=E8=BF=9B?= =?UTF-8?q?=E5=85=A5=E4=B8=8B=E4=B8=80=E6=AC=A1=E5=BE=AA=E7=8E=AF=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=EF=BC=8C=E5=8F=88=E5=88=9B=E5=BB=BA=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E8=BF=9E=E6=8E=A5=EF=BC=8C=E6=89=80=E4=BB=A5=E5=9C=A8?= =?UTF-8?q?reconnect=E9=87=8C=E9=9D=A2=E5=88=9B=E5=BB=BA=E7=9A=84=E9=82=A3?= =?UTF-8?q?=E4=B8=AA=E6=96=B0=E8=BF=9E=E6=8E=A5=E5=B0=B1=E6=B3=84=E9=9C=B2?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datax/plugin/writer/oceanbasev10writer/task/InsertTask.java | 1 - 1 file changed, 1 deletion(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java index 36fc726b..968908ca 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java @@ -165,7 +165,6 @@ public class InsertTask implements Runnable { } catch (InterruptedException e) { LOG.info("thread interrupted ..., ignore"); } - connHolder.initConnection(); conn = connHolder.getConn(); LOG.info("retry {}, start do batch insert, size={}", i, buffer.size()); checkMemstore(); From e7d879185b059a6bf03d19c2bca67e8516fe5680 Mon Sep 17 00:00:00 2001 From: hffariel Date: Fri, 17 Sep 2021 19:08:21 +0800 Subject: [PATCH 040/251] add auto-release workflow --- .github/workflows/release.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..27435856 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,30 @@ +name: Release + +on: + push: + tags: + - "v*.*.*" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Set up Maven Central Repository + uses: actions/setup-java@v2 + with: + java-version: '8' + distribution: 'adopt' + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - run: | + git checkout main + mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true + cd target/datax/datax/plugin/writer/ + tar -czvf starrockswriter.tar.gz starrockswriter + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: | + target/datax/datax/plugin/writer/starrockswriter.tar.gz From a02a69f2bd5d1e88188d08d118e0ab96f654cb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E7=85=A6?= Date: Sat, 18 Sep 2021 19:51:03 +0800 Subject: [PATCH 041/251] dbname with minus('-') can not be parsed in ob writer --- .../plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java index 49e5c05f..5988cea4 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java @@ -31,7 +31,7 @@ public class ServerConnectInfo { } private void parseJdbcUrl(final String jdbcUrl) { - Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w]+)\\?"); + Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w-]+)\\?"); Matcher matcher = pattern.matcher(jdbcUrl); if (matcher.find()) { String ipPort = matcher.group(1); From c0351b8d76a704b63fdcbbb294c57b4b47ca491a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E7=85=A6?= Date: Sat, 18 Sep 2021 19:51:03 +0800 Subject: [PATCH 042/251] dbname with minus('-') can not be parsed in ob writer --- .../plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java index 49e5c05f..5988cea4 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java @@ -31,7 +31,7 @@ public class ServerConnectInfo { } private void parseJdbcUrl(final String jdbcUrl) { - Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w]+)\\?"); + Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w-]+)\\?"); Matcher matcher = pattern.matcher(jdbcUrl); if (matcher.find()) { String ipPort = matcher.group(1); From fe43e20ea92a03b3b50f98068407446b81d1cdc0 Mon Sep 17 00:00:00 2001 From: hffariel Date: Thu, 23 Sep 2021 17:15:14 +0800 Subject: [PATCH 043/251] reduce the getBytes operations --- .../starrockswriter/manager/StarRocksFlushTuple.java | 6 +++--- .../manager/StarRocksStreamLoadVisitor.java | 10 +++++----- .../manager/StarRocksWriterManager.java | 7 ++++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java index cd8c663b..47cebb91 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java @@ -6,9 +6,9 @@ public class StarRocksFlushTuple { private String label; private Long bytes; - private List rows; + private List rows; - public StarRocksFlushTuple(String label, Long bytes, List rows) { + public StarRocksFlushTuple(String label, Long bytes, List rows) { this.label = label; this.bytes = bytes; this.rows = rows; @@ -16,5 +16,5 @@ public class StarRocksFlushTuple { public String getLabel() { return label; } public Long getBytes() { return bytes; } - public List getRows() { return rows; } + public List getRows() { return rows; } } \ No newline at end of file diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index aecac149..656f4020 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -93,13 +93,13 @@ public class StarRocksStreamLoadVisitor { } } - private byte[] joinRows(List rows, int totalBytes) { + private byte[] joinRows(List rows, int totalBytes) { if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { Map props = writerOptions.getLoadProps(); byte[] lineDelimiter = StarRocksDelimiterParser.parse((String)props.get("row_delimiter"), "\n").getBytes(StandardCharsets.UTF_8); ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); - for (String row : rows) { - bos.put(row.getBytes(StandardCharsets.UTF_8)); + for (byte[] row : rows) { + bos.put(row); bos.put(lineDelimiter); } return bos.array(); @@ -110,11 +110,11 @@ public class StarRocksStreamLoadVisitor { bos.put("[".getBytes(StandardCharsets.UTF_8)); byte[] jsonDelimiter = ",".getBytes(StandardCharsets.UTF_8); boolean isFirstElement = true; - for (String row : rows) { + for (byte[] row : rows) { if (!isFirstElement) { bos.put(jsonDelimiter); } - bos.put(row.getBytes(StandardCharsets.UTF_8)); + bos.put(row); isFirstElement = false; } bos.put("]".getBytes(StandardCharsets.UTF_8)); diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index 0f68afe9..0e89005f 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -20,7 +20,7 @@ public class StarRocksWriterManager { private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; private final StarRocksWriterOptions writerOptions; - private final List buffer = new ArrayList<>(); + private final List buffer = new ArrayList<>(); private int batchCount = 0; private long batchSize = 0; private volatile boolean closed = false; @@ -37,9 +37,10 @@ public class StarRocksWriterManager { public final synchronized void writeRecord(String record) throws IOException { checkFlushException(); try { - buffer.add(record); + byte[] bts = record.getBytes(StandardCharsets.UTF_8); + buffer.add(bts); batchCount++; - batchSize += record.getBytes(StandardCharsets.UTF_8).length; + batchSize += bts.length; if (batchCount >= writerOptions.getBatchRows() || batchSize >= writerOptions.getBatchSize()) { String label = createBatchLabel(); LOG.debug(String.format("StarRocks buffer Sinking triggered: rows[%d] label[%s].", batchCount, label)); From cbc93b98ff8d3ab63c37659a590b8f8759d6a028 Mon Sep 17 00:00:00 2001 From: hffariel Date: Fri, 24 Sep 2021 11:34:55 +0800 Subject: [PATCH 044/251] add interval sinking --- starrockswriter/doc/starrockswriter.md | 8 ++++ .../StarRocksWriterOptions.java | 7 ++++ .../manager/StarRocksWriterManager.java | 39 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/starrockswriter/doc/starrockswriter.md b/starrockswriter/doc/starrockswriter.md index f471b752..1080d072 100644 --- a/starrockswriter/doc/starrockswriter.md +++ b/starrockswriter/doc/starrockswriter.md @@ -173,6 +173,14 @@ StarRocksWriter 插件实现了写入数据到 StarRocks 主库的目的表的 * 默认值:104857600 (100M) +* **flushInterval** + + * 描述:上一次StreamLoad结束至下一次开始的时间间隔(单位:ms)。
+ + * 必选:否
+ + * 默认值:300000 (ms) + * **loadProps** * 描述:StreamLoad 的请求参数,详情参照StreamLoad介绍页面。
diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java index 9e4abd12..be3fa3ec 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -18,6 +18,7 @@ public class StarRocksWriterOptions implements Serializable { private static final int MAX_RETRIES = 1; private static final int BATCH_ROWS = 500000; private static final long BATCH_BYTES = 90 * MEGA_BYTES_SCALE; + private static final long FLUSH_INTERVAL = 300000; private static final String KEY_LOAD_PROPS_FORMAT = "format"; public enum StreamLoadFormat { @@ -34,6 +35,7 @@ public class StarRocksWriterOptions implements Serializable { private static final String KEY_JDBC_URL = "jdbcUrl"; private static final String KEY_MAX_BATCH_ROWS = "maxBatchRows"; private static final String KEY_MAX_BATCH_SIZE = "maxBatchSize"; + private static final String KEY_FLUSH_INTERVAL = "flushInterval"; private static final String KEY_LOAD_URL = "loadUrl"; private static final String KEY_FLUSH_QUEUE_LENGTH = "flushQueueLength"; private static final String KEY_LOAD_PROPS = "loadProps"; @@ -120,6 +122,11 @@ public class StarRocksWriterOptions implements Serializable { Long size = options.getLong(KEY_MAX_BATCH_SIZE); return null == size ? BATCH_BYTES : size; } + + public long getFlushInterval() { + Long interval = options.getLong(KEY_FLUSH_INTERVAL); + return null == interval ? FLUSH_INTERVAL : interval; + } public int getFlushQueueLength() { Integer len = options.getInt(KEY_FLUSH_QUEUE_LENGTH); diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index 0e89005f..f32eccde 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -1,5 +1,6 @@ package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,7 +9,11 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import com.google.common.base.Strings; import com.starrocks.connector.datax.plugin.writer.starrockswriter.StarRocksWriterOptions; @@ -26,14 +31,45 @@ public class StarRocksWriterManager { private volatile boolean closed = false; private volatile Exception flushException; private final LinkedBlockingDeque flushQueue; + private ScheduledExecutorService scheduler; + private ScheduledFuture scheduledFuture; public StarRocksWriterManager(StarRocksWriterOptions writerOptions) { this.writerOptions = writerOptions; this.starrocksStreamLoadVisitor = new StarRocksStreamLoadVisitor(writerOptions); flushQueue = new LinkedBlockingDeque<>(writerOptions.getFlushQueueLength()); + this.startScheduler(); this.startAsyncFlushing(); } + public void startScheduler() { + stopScheduler(); + this.scheduler = Executors.newScheduledThreadPool(1, new BasicThreadFactory.Builder().namingPattern("starrocks-interval-flush").daemon(true).build()); + this.scheduledFuture = this.scheduler.schedule(() -> { + synchronized (StarRocksWriterManager.this) { + if (!closed) { + try { + String label = createBatchLabel(); + LOG.info(String.format("StarRocks interval Sinking triggered: label[%s].", label)); + if (batchCount == 0) { + startScheduler(); + } + flush(label, false); + } catch (Exception e) { + flushException = e; + } + } + } + }, writerOptions.getFlushInterval(), TimeUnit.MILLISECONDS); + } + + public void stopScheduler() { + if (this.scheduledFuture != null) { + scheduledFuture.cancel(false); + this.scheduler.shutdown(); + } + } + public final synchronized void writeRecord(String record) throws IOException { checkFlushException(); try { @@ -109,6 +145,7 @@ public class StarRocksWriterManager { for (int i = 0; i <= writerOptions.getFlushQueueLength(); i++) { flushQueue.put(new StarRocksFlushTuple("", 0l, null)); } + checkFlushException(); } private void asyncFlush() throws Exception { @@ -116,12 +153,14 @@ public class StarRocksWriterManager { if (Strings.isNullOrEmpty(flushData.getLabel())) { return; } + stopScheduler(); LOG.debug(String.format("Async stream load: rows[%d] bytes[%d] label[%s].", flushData.getRows().size(), flushData.getBytes(), flushData.getLabel())); for (int i = 0; i <= writerOptions.getMaxRetries(); i++) { try { // flush to StarRocks with stream load starrocksStreamLoadVisitor.doStreamLoad(flushData); LOG.info(String.format("Async stream load finished: label[%s].", flushData.getLabel())); + startScheduler(); break; } catch (Exception e) { LOG.warn("Failed to flush batch data to StarRocks, retry times = {}", i, e); From 09374d259686bb37e533d12f5b616febf87314a8 Mon Sep 17 00:00:00 2001 From: Longda Feng Date: Fri, 24 Sep 2021 11:52:46 +0800 Subject: [PATCH 045/251] Add OceanBase supporting list. --- README.md | 3 ++- introduction.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 681de048..37a21022 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # DataX -DataX 是阿里云 [DataWorks数据集成](https://www.aliyun.com/product/bigdata/ide) 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。 +DataX 是阿里云 [DataWorks数据集成](https://www.aliyun.com/product/bigdata/ide) 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。 # DataX 商业版本 阿里云DataWorks数据集成是DataX团队在阿里云上的商业化产品,致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下的数据同步解决方案。目前已经支持云上近3000家客户,单日同步数据超过3万亿条。DataWorks数据集成目前支持离线50+种数据源,可以进行整库迁移、批量上云、增量同步、分库分表等各类同步解决方案。2020年更新实时同步能力,2020年更新实时同步能力,支持10+种数据源的读写任意组合。提供MySQL,Oracle等多种数据源到阿里云MaxCompute,Hologres等大数据引擎的一键全增量同步解决方案。 @@ -39,6 +39,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | ------------ | ---------- | :-------: | :-------: |:-------: | | RDBMS 关系型数据库 | MySQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md)| |             | Oracle     |     √     |     √     |[读](https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md)| +|             | OceanBase  |     √     |     √     |[读](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase) 、[写](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase)| | | SQLServer | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/sqlserverreader/doc/sqlserverreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/sqlserverwriter/doc/sqlserverwriter.md)| | | PostgreSQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/postgresqlreader/doc/postgresqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md)| | | DRDS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md)| diff --git a/introduction.md b/introduction.md index b27607c7..d08ad98d 100644 --- a/introduction.md +++ b/introduction.md @@ -36,6 +36,7 @@ DataX本身作为离线数据同步框架,采用Framework + plugin架构构建 | ------------ | ---------- | :-------: | :-------: |:-------: | | RDBMS 关系型数据库 | MySQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md)| |             | Oracle     |     √     |     √     |[读](https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md)| +|             | OceanBase  |     √     |     √     |[读](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase) 、[写](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase)| | | SQLServer | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/sqlserverreader/doc/sqlserverreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/sqlserverwriter/doc/sqlserverwriter.md)| | | PostgreSQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/postgresqlreader/doc/postgresqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md)| | | DRDS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md)| From 26d1f11c1b55203325810bb62a94c9bd5a258469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E7=85=A6?= Date: Fri, 24 Sep 2021 18:03:38 +0800 Subject: [PATCH 046/251] obwriter: adapted for short jdbc url --- .../OceanBaseV10Writer.java | 1 - .../ext/ServerConnectInfo.java | 27 ++++++++++++++++--- .../task/ConcurrentTableWriterTask.java | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index 89ef1c52..4ffaffed 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -20,7 +20,6 @@ import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.datax.plugin.rdbms.writer.Key; import com.alibaba.datax.plugin.rdbms.writer.util.WriterUtil; import com.alibaba.datax.plugin.writer.oceanbasev10writer.task.ConcurrentTableWriterTask; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.task.SingleTableWriterTask; import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; /** diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java index 5988cea4..b0611642 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java @@ -24,8 +24,26 @@ public class ServerConnectInfo { this.tenantName = ss[1].trim().split(":")[1]; this.jdbcUrl = ss[2].replace("jdbc:mysql:", "jdbc:oceanbase:"); } else { - throw new RuntimeException ("jdbc url format is not correct: " + jdbcUrl); + this.jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:"); + if (username.contains("@") && username.contains("#")) { + this.userName = username.substring(0, username.indexOf("@")); + this.tenantName = username.substring(username.indexOf("@") + 1, username.indexOf("#")); + this.clusterName = username.substring(username.indexOf("#") + 1); + } else if (username.contains(":")) { + String[] config = username.split(":"); + if (config.length != 3) { + throw new RuntimeException ("username format is not correct: " + username); + } + this.clusterName = config[0]; + this.tenantName = config[1]; + this.userName = config[2]; + } else { + this.clusterName = null; + this.tenantName = null; + this.userName = username; + } } + this.password = password; parseJdbcUrl(jdbcUrl); } @@ -51,8 +69,11 @@ public class ServerConnectInfo { } public String getFullUserName() { - StringBuilder builder = new StringBuilder(); - builder.append(userName).append("@").append(tenantName).append("#").append(clusterName); + StringBuilder builder = new StringBuilder(userName); + if (tenantName != null && clusterName != null) { + builder.append("@").append(tenantName).append("#").append(clusterName); + } + return builder.toString(); } } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index 084acbeb..cbc9a936 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -150,7 +150,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { partCalculator = new ObPartitionIdCalculator(connectInfo.ipPort, tableEntryKey); } catch (Exception ex) { ++retry; - LOG.warn("create new part calculator failed, retry ... {}", retry, ex); + LOG.warn("create new part calculator failed, retry {}: {}", retry, ex.getMessage()); } } while (partCalculator == null && retry < 3); // try 3 times } From 26df387f0fbb0eb1cdabc1752a09823f984b65aa Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:13:08 +0800 Subject: [PATCH 047/251] Update mongodbreader.md --- mongodbreader/doc/mongodbreader.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mongodbreader/doc/mongodbreader.md b/mongodbreader/doc/mongodbreader.md index 6d1e6a99..b61493e6 100644 --- a/mongodbreader/doc/mongodbreader.md +++ b/mongodbreader/doc/mongodbreader.md @@ -8,7 +8,7 @@ MongoDBReader 插件利用 MongoDB 的java客户端MongoClient进行MongoDB的 MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的JOB程序按照指定的规则对MongoDB中的数据进行分片,并行读取,然后将MongoDB支持的类型通过逐一判断转换成Datax支持的类型。 #### 3 功能说明 -* 该示例从ODPS读一份数据到MongoDB。 +* 该示例从MongoDB读一份数据到ODPS。 { "job": { @@ -147,4 +147,4 @@ MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的J #### 6 性能报告 -#### 7 测试报告 \ No newline at end of file +#### 7 测试报告 From 7cfd0e36215fcbc7f4d8854421ab3f980754f33c Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:23:09 +0800 Subject: [PATCH 048/251] Update hbase11xwriter.md --- hbase11xwriter/doc/hbase11xwriter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index ff20abe9..02fd5507 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -202,7 +202,7 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase字段。index:指定该列对应reader端column的索引,从0开始;name:指定hbase表中的列,必须为 列族:列名 的格式;type:指定写入数据类型,用于转换HBase byte[]。配置格式如下: - ``` +``` "column": [ { "index":1, From 2632974c524bda68ac827e2dd1b6694ad9a58cdb Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:23:59 +0800 Subject: [PATCH 049/251] Update hbase11xwriter.md --- hbase11xwriter/doc/hbase11xwriter.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index 02fd5507..cc519b28 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -203,6 +203,7 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase字段。index:指定该列对应reader端column的索引,从0开始;name:指定hbase表中的列,必须为 列族:列名 的格式;type:指定写入数据类型,用于转换HBase byte[]。配置格式如下: ``` + "column": [ { "index":1, @@ -216,7 +217,7 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba } ] - ``` +``` * 必选:是
From 8e37018d78d2bd76a23cbf51183b72db59912f7a Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:25:35 +0800 Subject: [PATCH 050/251] Update hbase11xwriter.md --- hbase11xwriter/doc/hbase11xwriter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index cc519b28..300cbfa4 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -219,9 +219,9 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba ``` - * 必选:是
+* 必选:是
- * 默认值:无
+* 默认值:无
* **rowkeyColumn** From a080664e1ae379b922296f90e1ded3f6101ee413 Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:26:43 +0800 Subject: [PATCH 051/251] Update hbase11xwriter.md --- hbase11xwriter/doc/hbase11xwriter.md | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index 300cbfa4..f44a610c 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -202,26 +202,26 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase字段。index:指定该列对应reader端column的索引,从0开始;name:指定hbase表中的列,必须为 列族:列名 的格式;type:指定写入数据类型,用于转换HBase byte[]。配置格式如下: -``` + ``` -"column": [ - { - "index":1, - "name": "cf1:q1", - "type": "string" - }, - { - "index":2, - "name": "cf1:q2", - "type": "string" - } - ] - -``` + "column": [ + { + "index":1, + "name": "cf1:q1", + "type": "string" + }, + { + "index":2, + "name": "cf1:q2", + "type": "string" + } + ] -* 必选:是
+ ``` + + * 必选:是
-* 默认值:无
+ * 默认值:无
* **rowkeyColumn** From 133269e69e890bfa337685ecf797dd2ff035c338 Mon Sep 17 00:00:00 2001 From: hexsmith Date: Fri, 24 Sep 2021 21:28:05 +0800 Subject: [PATCH 052/251] Update hbase11xwriter.md --- hbase11xwriter/doc/hbase11xwriter.md | 36 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index f44a610c..969f2e47 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -228,17 +228,17 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase的rowkey列。index:指定该列对应reader端column的索引,从0开始,若为常量index为-1;type:指定写入数据类型,用于转换HBase byte[];value:配置常量,常作为多个字段的拼接符。hbasewriter会将rowkeyColumn中所有列按照配置顺序进行拼接作为写入hbase的rowkey,不能全为常量。配置格式如下: ``` -"rowkeyColumn": [ - { - "index":0, - "type":"string" - }, - { - "index":-1, - "type":"string", - "value":"_" - } - ] + "rowkeyColumn": [ + { + "index":0, + "type":"string" + }, + { + "index":-1, + "type":"string", + "value":"_" + } + ] ``` @@ -251,19 +251,19 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:指定写入hbase的时间戳。支持:当前时间、指定时间列,指定时间,三者选一。若不配置表示用当前时间。index:指定对应reader端column的索引,从0开始,需保证能转换为long,若是Date类型,会尝试用yyyy-MM-dd HH:mm:ss和yyyy-MM-dd HH:mm:ss SSS去解析;若为指定时间index为-1;value:指定时间的值,long值。配置格式如下: ``` -"versionColumn":{ - "index":1 -} + "versionColumn":{ + "index":1 + } ``` 或者 ``` -"versionColumn":{ - "index":-1, - "value":123456789 -} + "versionColumn":{ + "index":-1, + "value":123456789 + } ``` From 65104b79eded393a25795ca4c7c06c021ceea06a Mon Sep 17 00:00:00 2001 From: PeineLiang Date: Thu, 30 Sep 2021 11:46:18 +0800 Subject: [PATCH 053/251] Update json syntax error --- drdsreader/doc/drdsreader.md | 2 +- postgresqlreader/doc/postgresqlreader.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drdsreader/doc/drdsreader.md b/drdsreader/doc/drdsreader.md index 25df9200..c54e6bd1 100644 --- a/drdsreader/doc/drdsreader.md +++ b/drdsreader/doc/drdsreader.md @@ -50,7 +50,7 @@ DRDS的插件目前DataX只适配了Mysql引擎的场景,DRDS对于DataX而言 // 数据库连接密码 "password": "root", "column": [ - "id","name" + "id","name" ], "connection": [ { diff --git a/postgresqlreader/doc/postgresqlreader.md b/postgresqlreader/doc/postgresqlreader.md index fed2c7e9..02c354ab 100644 --- a/postgresqlreader/doc/postgresqlreader.md +++ b/postgresqlreader/doc/postgresqlreader.md @@ -48,7 +48,7 @@ PostgresqlReader插件实现了从PostgreSQL读取数据。在底层实现上, // 数据库连接密码 "password": "xx", "column": [ - "id","name" + "id","name" ], //切分主键 "splitPk": "id", From 4450ccadd88a92e66c3f3e763ebc729038690607 Mon Sep 17 00:00:00 2001 From: hffariel Date: Sat, 9 Oct 2021 18:38:33 +0800 Subject: [PATCH 054/251] add the convertion of `bytes` columns --- .../starrockswriter/StarRocksWriterOptions.java | 1 - .../starrockswriter/row/StarRocksBaseSerializer.java | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java index be3fa3ec..8d5ede98 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -158,7 +158,6 @@ public class StarRocksWriterOptions implements Serializable { private void validateRequired() { final String[] requiredOptionKeys = new String[]{ KEY_USERNAME, - KEY_PASSWORD, KEY_DATABASE, KEY_TABLE, KEY_COLUMN, diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java index 77d25f12..a7ad499d 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/row/StarRocksBaseSerializer.java @@ -6,13 +6,21 @@ import com.alibaba.datax.common.element.Column.Type; public class StarRocksBaseSerializer { protected String fieldConvertion(Column col) { - if (null == col.getRawData()) { + if (null == col.getRawData() || Type.NULL == col.getType()) { return null; } if (Type.BOOL == col.getType()) { return String.valueOf(col.asLong()); } + if (Type.BYTES == col.getType()) { + byte[] bts = (byte[])col.getRawData(); + long value = 0; + for (int i = 0; i < bts.length; i++) { + value += (bts[bts.length - i - 1] & 0xffL) << (8 * i); + } + return String.valueOf(value); + } return col.asString(); } -} +} \ No newline at end of file From d2ab6127546004569dfd5533a344a516131a618d Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 12 Oct 2021 15:44:24 +0800 Subject: [PATCH 055/251] add tdengine writer plugin --- .../com/alibaba/datax/core/EngineTest.java | 18 +++ job/opentsdb2stream.json | 31 +++++ job/opentsdb2tdengine.json | 34 ++++++ package.xml | 7 ++ pom.xml | 92 +++++++------- tdenginewriter/pom.xml | 75 ++++++++++++ tdenginewriter/src/main/assembly/package.xml | 34 ++++++ .../datax/plugin/writer/JniConnection.java | 83 +++++++++++++ .../datax/plugin/writer/TDengineWriter.java | 113 ++++++++++++++++++ .../writer/TDengineWriterErrorCode.java | 31 +++++ ...libaba_datax_plugin_writer_JniConnection.h | 87 ++++++++++++++ tdenginewriter/src/main/resources/plugin.json | 9 ++ .../main/resources/plugin_job_template.json | 10 ++ .../plugin/writer/JniConnectionTest.java | 19 +++ 14 files changed, 598 insertions(+), 45 deletions(-) create mode 100644 core/src/test/java/com/alibaba/datax/core/EngineTest.java create mode 100644 job/opentsdb2stream.json create mode 100644 job/opentsdb2tdengine.json create mode 100644 tdenginewriter/pom.xml create mode 100755 tdenginewriter/src/main/assembly/package.xml create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h create mode 100755 tdenginewriter/src/main/resources/plugin.json create mode 100644 tdenginewriter/src/main/resources/plugin_job_template.json create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java diff --git a/core/src/test/java/com/alibaba/datax/core/EngineTest.java b/core/src/test/java/com/alibaba/datax/core/EngineTest.java new file mode 100644 index 00000000..3f36263b --- /dev/null +++ b/core/src/test/java/com/alibaba/datax/core/EngineTest.java @@ -0,0 +1,18 @@ +package com.alibaba.datax.core; + + +public class EngineTest { + + public static void main(String[] args) { + System.out.println(System.getProperty("java.library.path")); +// String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2stream.json"}; + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2tdengine.json"}; + System.setProperty("datax.home", "/Users/yangzy/workspace/DataX/target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/job/opentsdb2stream.json b/job/opentsdb2stream.json new file mode 100644 index 00000000..1ea43204 --- /dev/null +++ b/job/opentsdb2stream.json @@ -0,0 +1,31 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather.temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/job/opentsdb2tdengine.json b/job/opentsdb2tdengine.json new file mode 100644 index 00000000..cdf2277b --- /dev/null +++ b/job/opentsdb2tdengine.json @@ -0,0 +1,34 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather.temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.56.105", + "port": 6030, + "db": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/package.xml b/package.xml index 882dd23b..a93e945c 100755 --- a/package.xml +++ b/package.xml @@ -238,6 +238,13 @@ datax + + tdenginewriter/target/datax/ + + **/*.* + + datax + otswriter/target/datax/ diff --git a/pom.xml b/pom.xml index 3bd75a31..cb635ad3 100644 --- a/pom.xml +++ b/pom.xml @@ -47,66 +47,68 @@ transformer - mysqlreader - drdsreader - sqlserverreader - postgresqlreader - kingbaseesreader - oraclereader + + + + + + odpsreader - otsreader - otsstreamreader + + txtfilereader - hdfsreader + streamreader - ossreader - ftpreader - mongodbreader + + + rdbmsreader - hbase11xreader - hbase094xreader - tsdbreader + + + opentsdbreader - cassandrareader - gdbreader - oceanbasev10reader + + + - mysqlwriter - drdswriter + + odpswriter txtfilewriter - ftpwriter - hdfswriter + + streamwriter - otswriter - oraclewriter - sqlserverwriter - postgresqlwriter - kingbaseeswriter - osswriter - mongodbwriter + + + + + + + adswriter - ocswriter + rdbmswriter - hbase11xwriter - hbase094xwriter - hbase11xsqlwriter - hbase11xsqlreader - elasticsearchwriter - tsdbwriter - adbpgwriter - gdbwriter - cassandrawriter - clickhousewriter - oscarwriter - oceanbasev10writer + + + + + + + + + + + + + plugin-rdbms-util plugin-unstructured-storage-util - hbase20xsqlreader - hbase20xsqlwriter - kuduwriter + + + + tdenginewriter diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml new file mode 100644 index 00000000..7cef9ac2 --- /dev/null +++ b/tdenginewriter/pom.xml @@ -0,0 +1,75 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + com.alibaba.datax.tdenginewriter + tdenginewriter + 1.0.0 + + + 8 + 8 + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + junit + junit + ${junit-version} + test + + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + + \ No newline at end of file diff --git a/tdenginewriter/src/main/assembly/package.xml b/tdenginewriter/src/main/assembly/package.xml new file mode 100755 index 00000000..f7a7d0bf --- /dev/null +++ b/tdenginewriter/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/tdenginewriter + + + target/ + + tdenginewriter-1.0.0.jar + + plugin/writer/tdenginewriter + + + + + + false + plugin/writer/tdenginewriter/libs + runtime + + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java new file mode 100644 index 00000000..5cbbf2ae --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -0,0 +1,83 @@ +package com.alibaba.datax.plugin.writer; + +import java.util.Properties; + +public class JniConnection { + + private static final long JNI_NULL_POINTER = 0L; + private static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; + private static final String PROPERTY_KEY_LOCALE = "locale"; + private static final String PROPERTY_KEY_CHARSET = "charset"; + private static final String PROPERTY_KEY_TIME_ZONE = "timezone"; + + private long psql; + + static { + System.loadLibrary("taos"); + } + + public JniConnection(Properties props) { + if (this.psql != JNI_NULL_POINTER) { + close(); + this.psql = JNI_NULL_POINTER; + } + + initImp(props.getProperty(PROPERTY_KEY_CONFIG_DIR, null)); + + String locale = props.getProperty(PROPERTY_KEY_LOCALE); + if (setOptions(0, locale) < 0) { + throw new RuntimeException("Failed to set locale: " + locale + ". System default will be used."); + } + String charset = props.getProperty(PROPERTY_KEY_CHARSET); + if (setOptions(1, charset) < 0) { + throw new RuntimeException("Failed to set charset: " + charset + ". System default will be used."); + } + String timezone = props.getProperty(PROPERTY_KEY_TIME_ZONE); + if (setOptions(2, timezone) < 0) { + throw new RuntimeException("Failed to set timezone: " + timezone + ". System default will be used."); + } + } + + public long open(String host, int port, String dbname, String user, String password) { + if (this.psql != JNI_NULL_POINTER) { + close(); + this.psql = JNI_NULL_POINTER; + } + + this.psql = connectImp(host, port, dbname, user, password); + if (this.psql == JNI_NULL_POINTER) { + String errMsg = getErrMsgImp(0); + throw new RuntimeException(errMsg); + } + return this.psql; + } + + public void close() { + int code = this.closeConnectionImp(this.psql); + if (code != 0) { + throw new RuntimeException("JNI closeConnection failed"); + } + this.psql = JNI_NULL_POINTER; + } + + private static native void initImp(String configDir); + + private static native int setOptions(int optionIndex, String optionValue); + + private static native String getTsCharset(); + + private native long connectImp(String host, int port, String dbName, String user, String password); + + private native long executeQueryImp(byte[] sqlBytes, long connection); + + private native int getErrCodeImp(long connection, long pSql); + + private native String getErrMsgImp(long pSql); + + private native int getAffectedRowsImp(long connection, long pSql); + + private native int closeConnectionImp(long connection); + + private native long insertOpentsdbJson(String json, long pSql); + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java new file mode 100644 index 00000000..184279e4 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -0,0 +1,113 @@ +package com.alibaba.datax.plugin.writer; + + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; + +import java.io.BufferedWriter; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +public class TDengineWriter extends Writer { + + private static final String HOST = "host"; + private static final String PORT = "port"; + private static final String DBNAME = "dbname"; + private static final String USER = "user"; + private static final String PASSWORD = "password"; + + public static class Job extends Writer.Job { + + private Configuration originalConfig; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + } + + @Override + public void destroy() { + + } + + @Override + public List split(int mandatoryNumber) { + List writerSplitConfigs = new ArrayList(); + for (int i = 0; i < mandatoryNumber; i++) { + writerSplitConfigs.add(this.originalConfig); + } + + return writerSplitConfigs; + } + } + + public static class Task extends Writer.Task { + private static final String NEWLINE_FLAG = System.getProperty("line.separator", "\n"); + private Configuration writerSliceConfig; + private String peerPluginName; + + @Override + public void init() { + this.writerSliceConfig = getPluginJobConf(); + this.peerPluginName = getPeerPluginName(); + } + + @Override + public void destroy() { + + } + + @Override + public void startWrite(RecordReceiver lineReceiver) { + + String host = this.writerSliceConfig.getString(HOST); + int port = this.writerSliceConfig.getInt(PORT); + String dbname = this.writerSliceConfig.getString(DBNAME); + String user = this.writerSliceConfig.getString(USER); + String password = this.writerSliceConfig.getString(PASSWORD); + + JniConnection connection = new JniConnection(new Properties()); + long psql = connection.open(host, port, dbname, user, password); + System.out.println("psql: " + psql); + connection.close(); + + try { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)); + + Record record; + while ((record = lineReceiver.getFromReader()) != null) { + writer.write(recordToString(record)); + } + writer.flush(); + + } catch (Exception e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); + } + } + + private String recordToString(Record record) { + int recordLength = record.getColumnNumber(); + if (0 == recordLength) { + return NEWLINE_FLAG; + } + + Column column; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + sb.append(NEWLINE_FLAG); + + return sb.toString(); + } + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java new file mode 100644 index 00000000..02e87079 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java @@ -0,0 +1,31 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineWriterErrorCode implements ErrorCode { + RUNTIME_EXCEPTION("TDengineWriter-00", "运行时异常"); + + private final String code; + private final String description; + + private TDengineWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h new file mode 100644 index 00000000..0a161b92 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h @@ -0,0 +1,87 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_alibaba_datax_plugin_writer_JniConnection */ + +#ifndef _Included_com_alibaba_datax_plugin_writer_JniConnection +#define _Included_com_alibaba_datax_plugin_writer_JniConnection +#ifdef __cplusplus +extern "C" { +#endif +#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER +#define com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER 0LL +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: initImp + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_initImp + (JNIEnv *, jclass, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: setOptions + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_setOptions + (JNIEnv *, jclass, jint, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getTsCharset + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getTsCharset + (JNIEnv *, jclass); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: connectImp + * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_connectImp + (JNIEnv *, jobject, jstring, jint, jstring, jstring, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: executeQueryImp + * Signature: ([BJ)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_executeQueryImp + (JNIEnv *, jobject, jbyteArray, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrCodeImp + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrCodeImp + (JNIEnv *, jobject, jlong, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrMsgImp + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgImp + (JNIEnv *, jobject, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getAffectedRowsImp + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getAffectedRowsImp + (JNIEnv *, jobject, jlong, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: closeConnectionImp + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_closeConnectionImp + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tdenginewriter/src/main/resources/plugin.json b/tdenginewriter/src/main/resources/plugin.json new file mode 100755 index 00000000..6c900a15 --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginewriter", + "class": "com.alibaba.datax.plugin.writer.TDengineWriter", + "description": { + "useScene": "data migration to tdengine", + "mechanism": "use JNI to write data to tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..5482b26e --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,10 @@ +{ + "name": "tdenginewriter", + "parameter": { + "host": "", + "port": 6030, + "db": "", + "user": "", + "password": "" + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java new file mode 100644 index 00000000..1c9f426f --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java @@ -0,0 +1,19 @@ +package com.alibaba.datax.plugin.writer; + +import org.junit.Test; + +import java.util.Properties; + +public class JniConnectionTest { + + @Test + public void test() { + JniConnection connection = new JniConnection(new Properties()); + + long psql = connection.open("192.168.56.107", 6030, "log", "root", "taosdata"); + System.out.println("psql: " + psql); + + connection.close(); + } + +} \ No newline at end of file From 5da6e34d5c877fbf4e9d57365912cfdffca5113e Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 12 Oct 2021 15:59:45 +0800 Subject: [PATCH 056/251] add maven plugin for junit test --- tdenginewriter/pom.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 7cef9ac2..2c294b8f 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -69,6 +69,23 @@
+ + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + +
From ff87a6bcff21f3fac853111bdee8cf4f0ac11464 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 12 Oct 2021 17:47:08 +0800 Subject: [PATCH 057/251] change test case --- .../com/alibaba/datax/plugin/writer/JniConnection.java | 10 ++++++++-- .../alibaba/datax/plugin/writer/TDengineWriter.java | 5 ----- .../com_alibaba_datax_plugin_writer_JniConnection.h | 8 ++++++++ .../alibaba/datax/plugin/writer/JniConnectionTest.java | 6 ++++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java index 5cbbf2ae..6c533ed8 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -38,7 +38,7 @@ public class JniConnection { } } - public long open(String host, int port, String dbname, String user, String password) { + public void open(String host, int port, String dbname, String user, String password) { if (this.psql != JNI_NULL_POINTER) { close(); this.psql = JNI_NULL_POINTER; @@ -49,7 +49,13 @@ public class JniConnection { String errMsg = getErrMsgImp(0); throw new RuntimeException(errMsg); } - return this.psql; + } + + public long insertOpentsdbJson(String json) { + if (this.psql == JNI_NULL_POINTER) { + throw new RuntimeException("JNI connection is NULL"); + } + return insertOpentsdbJson(json, this.psql); } public void close() { diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index 184279e4..ee080f54 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -73,11 +73,6 @@ public class TDengineWriter extends Writer { String user = this.writerSliceConfig.getString(USER); String password = this.writerSliceConfig.getString(PASSWORD); - JniConnection connection = new JniConnection(new Properties()); - long psql = connection.open(host, port, dbname, user, password); - System.out.println("psql: " + psql); - connection.close(); - try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h index 0a161b92..58cac666 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h @@ -81,6 +81,14 @@ JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getAff JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_closeConnectionImp (JNIEnv *, jobject, jlong); +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: insertOpentsdbJson + * Signature: (Ljava/lang/String;J)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_insertOpentsdbJson + (JNIEnv *, jobject, jstring, jlong); + #ifdef __cplusplus } #endif diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java index 1c9f426f..87fa668d 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java @@ -10,8 +10,10 @@ public class JniConnectionTest { public void test() { JniConnection connection = new JniConnection(new Properties()); - long psql = connection.open("192.168.56.107", 6030, "log", "root", "taosdata"); - System.out.println("psql: " + psql); + connection.open("192.168.56.105", 6030, "log", "root", "taosdata"); + + String json = "{\"metric\":\"weather.temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":123}}"; + connection.insertOpentsdbJson(json); connection.close(); } From f6520cf06b4475ba2e36690e84e7af2979781552 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 13 Oct 2021 12:47:31 +0800 Subject: [PATCH 058/251] change --- .../datax/plugin/writer/JniConnection.java | 31 ++++++++++++------- ...libaba_datax_plugin_writer_JniConnection.h | 10 ++++++ .../plugin/writer/JniConnectionTest.java | 2 +- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java index 6c533ed8..5512aaf9 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -5,21 +5,22 @@ import java.util.Properties; public class JniConnection { private static final long JNI_NULL_POINTER = 0L; + private static final int JNI_SUCCESSFUL = 0; private static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; private static final String PROPERTY_KEY_LOCALE = "locale"; private static final String PROPERTY_KEY_CHARSET = "charset"; private static final String PROPERTY_KEY_TIME_ZONE = "timezone"; - private long psql; + private long conn; static { System.loadLibrary("taos"); } public JniConnection(Properties props) { - if (this.psql != JNI_NULL_POINTER) { + if (this.conn != JNI_NULL_POINTER) { close(); - this.psql = JNI_NULL_POINTER; + this.conn = JNI_NULL_POINTER; } initImp(props.getProperty(PROPERTY_KEY_CONFIG_DIR, null)); @@ -39,31 +40,35 @@ public class JniConnection { } public void open(String host, int port, String dbname, String user, String password) { - if (this.psql != JNI_NULL_POINTER) { + if (this.conn != JNI_NULL_POINTER) { close(); - this.psql = JNI_NULL_POINTER; + this.conn = JNI_NULL_POINTER; } - this.psql = connectImp(host, port, dbname, user, password); - if (this.psql == JNI_NULL_POINTER) { + this.conn = connectImp(host, port, dbname, user, password); + if (this.conn == JNI_NULL_POINTER) { String errMsg = getErrMsgImp(0); throw new RuntimeException(errMsg); } } - public long insertOpentsdbJson(String json) { - if (this.psql == JNI_NULL_POINTER) { + public void insertOpentsdbJson(String json) { + if (this.conn == JNI_NULL_POINTER) { throw new RuntimeException("JNI connection is NULL"); } - return insertOpentsdbJson(json, this.psql); + long code = insertOpentsdbJson(json, this.conn); + if (code != JNI_SUCCESSFUL) { + String errMsg = getErrMsgByCode(code); + throw new RuntimeException(errMsg); + } } public void close() { - int code = this.closeConnectionImp(this.psql); + int code = this.closeConnectionImp(this.conn); if (code != 0) { throw new RuntimeException("JNI closeConnection failed"); } - this.psql = JNI_NULL_POINTER; + this.conn = JNI_NULL_POINTER; } private static native void initImp(String configDir); @@ -80,6 +85,8 @@ public class JniConnection { private native String getErrMsgImp(long pSql); + private native String getErrMsgByCode(long code); + private native int getAffectedRowsImp(long connection, long pSql); private native int closeConnectionImp(long connection); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h index 58cac666..4bdf3639 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h @@ -9,6 +9,8 @@ extern "C" { #endif #undef com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER #define com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER 0LL +#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL +#define com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL 0L /* * Class: com_alibaba_datax_plugin_writer_JniConnection * Method: initImp @@ -65,6 +67,14 @@ JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErr JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgImp (JNIEnv *, jobject, jlong); +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrMsgByCode + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgByCode + (JNIEnv *, jobject, jlong); + /* * Class: com_alibaba_datax_plugin_writer_JniConnection * Method: getAffectedRowsImp diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java index 87fa668d..603931ef 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java @@ -10,7 +10,7 @@ public class JniConnectionTest { public void test() { JniConnection connection = new JniConnection(new Properties()); - connection.open("192.168.56.105", 6030, "log", "root", "taosdata"); + connection.open("192.168.56.105", 6030, "test", "root", "taosdata"); String json = "{\"metric\":\"weather.temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":123}}"; connection.insertOpentsdbJson(json); From 975096b676dc408ba311e4f74eda06876702c605 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 13 Oct 2021 17:02:43 +0800 Subject: [PATCH 059/251] change --- .../com/alibaba/datax/core/EngineTest.java | 5 +- job/opentsdb2tdengine.json | 2 +- .../datax/plugin/writer/JniConnection.java | 30 +++++----- .../datax/plugin/writer/TDengineWriter.java | 59 +++++++++++++++---- .../plugin/writer/JniConnectionTest.java | 4 +- 5 files changed, 69 insertions(+), 31 deletions(-) diff --git a/core/src/test/java/com/alibaba/datax/core/EngineTest.java b/core/src/test/java/com/alibaba/datax/core/EngineTest.java index 3f36263b..47ce268e 100644 --- a/core/src/test/java/com/alibaba/datax/core/EngineTest.java +++ b/core/src/test/java/com/alibaba/datax/core/EngineTest.java @@ -1,9 +1,12 @@ package com.alibaba.datax.core; +import org.junit.Test; + public class EngineTest { - public static void main(String[] args) { + @Test + public void test() { System.out.println(System.getProperty("java.library.path")); // String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2stream.json"}; String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2tdengine.json"}; diff --git a/job/opentsdb2tdengine.json b/job/opentsdb2tdengine.json index cdf2277b..92c0f8e3 100644 --- a/job/opentsdb2tdengine.json +++ b/job/opentsdb2tdengine.json @@ -7,7 +7,7 @@ "parameter": { "endpoint": "http://192.168.1.180:4242", "column": [ - "weather.temperature" + "weather_temperature" ], "beginDateTime": "2021-01-01 00:00:00", "endDateTime": "2021-01-01 01:00:00" diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java index 5512aaf9..a8739c54 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -6,10 +6,10 @@ public class JniConnection { private static final long JNI_NULL_POINTER = 0L; private static final int JNI_SUCCESSFUL = 0; - private static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; - private static final String PROPERTY_KEY_LOCALE = "locale"; - private static final String PROPERTY_KEY_CHARSET = "charset"; - private static final String PROPERTY_KEY_TIME_ZONE = "timezone"; + public static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; + public static final String PROPERTY_KEY_LOCALE = "locale"; + public static final String PROPERTY_KEY_CHARSET = "charset"; + public static final String PROPERTY_KEY_TIME_ZONE = "timezone"; private long conn; @@ -17,7 +17,7 @@ public class JniConnection { System.loadLibrary("taos"); } - public JniConnection(Properties props) { + public JniConnection(Properties props) throws Exception { if (this.conn != JNI_NULL_POINTER) { close(); this.conn = JNI_NULL_POINTER; @@ -27,19 +27,19 @@ public class JniConnection { String locale = props.getProperty(PROPERTY_KEY_LOCALE); if (setOptions(0, locale) < 0) { - throw new RuntimeException("Failed to set locale: " + locale + ". System default will be used."); + throw new Exception("Failed to set locale: " + locale + ". System default will be used."); } String charset = props.getProperty(PROPERTY_KEY_CHARSET); if (setOptions(1, charset) < 0) { - throw new RuntimeException("Failed to set charset: " + charset + ". System default will be used."); + throw new Exception("Failed to set charset: " + charset + ". System default will be used."); } String timezone = props.getProperty(PROPERTY_KEY_TIME_ZONE); if (setOptions(2, timezone) < 0) { - throw new RuntimeException("Failed to set timezone: " + timezone + ". System default will be used."); + throw new Exception("Failed to set timezone: " + timezone + ". System default will be used."); } } - public void open(String host, int port, String dbname, String user, String password) { + public void open(String host, int port, String dbname, String user, String password) throws Exception { if (this.conn != JNI_NULL_POINTER) { close(); this.conn = JNI_NULL_POINTER; @@ -48,25 +48,25 @@ public class JniConnection { this.conn = connectImp(host, port, dbname, user, password); if (this.conn == JNI_NULL_POINTER) { String errMsg = getErrMsgImp(0); - throw new RuntimeException(errMsg); + throw new Exception(errMsg); } } - public void insertOpentsdbJson(String json) { + public void insertOpentsdbJson(String json) throws Exception { if (this.conn == JNI_NULL_POINTER) { - throw new RuntimeException("JNI connection is NULL"); + throw new Exception("JNI connection is NULL"); } long code = insertOpentsdbJson(json, this.conn); if (code != JNI_SUCCESSFUL) { String errMsg = getErrMsgByCode(code); - throw new RuntimeException(errMsg); + throw new Exception(errMsg); } } - public void close() { + public void close() throws Exception { int code = this.closeConnectionImp(this.conn); if (code != 0) { - throw new RuntimeException("JNI closeConnection failed"); + throw new Exception("JNI closeConnection failed"); } this.conn = JNI_NULL_POINTER; } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index ee080f54..28fa4ca5 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -7,12 +7,12 @@ import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.io.BufferedWriter; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Properties; public class TDengineWriter extends Writer { @@ -22,6 +22,7 @@ public class TDengineWriter extends Writer { private static final String DBNAME = "dbname"; private static final String USER = "user"; private static final String PASSWORD = "password"; + private static final String PEER_PLUGIN_NAME = "peerPluginName"; public static class Job extends Writer.Job { @@ -30,6 +31,7 @@ public class TDengineWriter extends Writer { @Override public void init() { this.originalConfig = super.getPluginJobConf(); + this.originalConfig.set(PEER_PLUGIN_NAME, getPeerPluginName()); } @Override @@ -49,14 +51,14 @@ public class TDengineWriter extends Writer { } public static class Task extends Writer.Task { + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private static final String NEWLINE_FLAG = System.getProperty("line.separator", "\n"); private Configuration writerSliceConfig; - private String peerPluginName; @Override public void init() { this.writerSliceConfig = getPluginJobConf(); - this.peerPluginName = getPeerPluginName(); } @Override @@ -67,22 +69,57 @@ public class TDengineWriter extends Writer { @Override public void startWrite(RecordReceiver lineReceiver) { + String host = this.writerSliceConfig.getString(HOST); int port = this.writerSliceConfig.getInt(PORT); String dbname = this.writerSliceConfig.getString(DBNAME); String user = this.writerSliceConfig.getString(USER); String password = this.writerSliceConfig.getString(PASSWORD); - try { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8)); + Properties properties = new Properties(); + String cfgdir = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_CONFIG_DIR); + if (cfgdir != null && !cfgdir.isEmpty()) { + properties.setProperty(JniConnection.PROPERTY_KEY_CONFIG_DIR, cfgdir); + } + String timezone = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_TIME_ZONE); + if (timezone != null && !timezone.isEmpty()) { + properties.setProperty(JniConnection.PROPERTY_KEY_TIME_ZONE, timezone); + } + String locale = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_LOCALE); + if (locale != null && !locale.isEmpty()) { + properties.setProperty(JniConnection.PROPERTY_KEY_LOCALE, locale); + } + String charset = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_CHARSET); + if (charset != null && !charset.isEmpty()) { + properties.setProperty(JniConnection.PROPERTY_KEY_CHARSET, charset); + } + String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); + if (peerPluginName.equals("opentsdbreader")) { + try { + JniConnection conn = new JniConnection(properties); + conn.open(host, port, dbname, user, password); + LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); + writeOpentsdb(lineReceiver, conn); + conn.close(); + LOG.info("TDengine connection closed"); + } catch (Exception e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + } + } + } + + private void writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn) { + try { Record record; while ((record = lineReceiver.getFromReader()) != null) { - writer.write(recordToString(record)); + String jsonData = recordToString(record); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); } - writer.flush(); - } catch (Exception e) { + LOG.error("TDengineWriter ERROR: " + e.getMessage()); throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); } } @@ -92,7 +129,6 @@ public class TDengineWriter extends Writer { if (0 == recordLength) { return NEWLINE_FLAG; } - Column column; StringBuilder sb = new StringBuilder(); for (int i = 0; i < recordLength; i++) { @@ -101,7 +137,6 @@ public class TDengineWriter extends Writer { } sb.setLength(sb.length() - 1); sb.append(NEWLINE_FLAG); - return sb.toString(); } } diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java index 603931ef..040cf34c 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java @@ -7,12 +7,12 @@ import java.util.Properties; public class JniConnectionTest { @Test - public void test() { + public void test() throws Exception { JniConnection connection = new JniConnection(new Properties()); connection.open("192.168.56.105", 6030, "test", "root", "taosdata"); - String json = "{\"metric\":\"weather.temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":123}}"; + String json = "{\"metric\":\"weather_temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":\"t123\"}}"; connection.insertOpentsdbJson(json); connection.close(); From 9121b7d3c59b0c079aabe69596ad9b01b9f3ed66 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 13 Oct 2021 17:12:02 +0800 Subject: [PATCH 060/251] change test cases --- {job => core/src/main/job}/opentsdb2stream.json | 0 {job => core/src/main/job}/opentsdb2tdengine.json | 0 core/src/test/java/com/alibaba/datax/core/EngineTest.java | 5 ++--- 3 files changed, 2 insertions(+), 3 deletions(-) rename {job => core/src/main/job}/opentsdb2stream.json (100%) rename {job => core/src/main/job}/opentsdb2tdengine.json (100%) diff --git a/job/opentsdb2stream.json b/core/src/main/job/opentsdb2stream.json similarity index 100% rename from job/opentsdb2stream.json rename to core/src/main/job/opentsdb2stream.json diff --git a/job/opentsdb2tdengine.json b/core/src/main/job/opentsdb2tdengine.json similarity index 100% rename from job/opentsdb2tdengine.json rename to core/src/main/job/opentsdb2tdengine.json diff --git a/core/src/test/java/com/alibaba/datax/core/EngineTest.java b/core/src/test/java/com/alibaba/datax/core/EngineTest.java index 47ce268e..bbc5bdc5 100644 --- a/core/src/test/java/com/alibaba/datax/core/EngineTest.java +++ b/core/src/test/java/com/alibaba/datax/core/EngineTest.java @@ -8,9 +8,8 @@ public class EngineTest { @Test public void test() { System.out.println(System.getProperty("java.library.path")); -// String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2stream.json"}; - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "/Users/yangzy/workspace/DataX/job/opentsdb2tdengine.json"}; - System.setProperty("datax.home", "/Users/yangzy/workspace/DataX/target/datax/datax"); + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/opentsdb2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); try { Engine.entry(params); } catch (Throwable e) { From c5d64c00a9c99812737698e0edf1fcbeddf0b134 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 13 Oct 2021 17:21:36 +0800 Subject: [PATCH 061/251] change --- core/src/main/job/opentsdb2tdengine.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/job/opentsdb2tdengine.json b/core/src/main/job/opentsdb2tdengine.json index 92c0f8e3..dd332202 100644 --- a/core/src/main/job/opentsdb2tdengine.json +++ b/core/src/main/job/opentsdb2tdengine.json @@ -18,7 +18,7 @@ "parameter": { "host": "192.168.56.105", "port": 6030, - "db": "test", + "dbname": "test", "user": "root", "password": "taosdata" } From a3aa8e31eb72f19c15f8f2e419a19eadbc4c73af Mon Sep 17 00:00:00 2001 From: hffariel Date: Thu, 14 Oct 2021 21:48:44 +0800 Subject: [PATCH 062/251] optimize columns with backquotes --- .../starrockswriter/manager/StarRocksStreamLoadVisitor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index 656f4020..847635c8 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public class StarRocksStreamLoadVisitor { @@ -137,7 +138,7 @@ public class StarRocksStreamLoadVisitor { HttpPut httpPut = new HttpPut(loadUrl); List cols = writerOptions.getColumns(); if (null != cols && !cols.isEmpty()) { - httpPut.setHeader("columns", String.join(",", cols)); + httpPut.setHeader("columns", String.join(",", cols.stream().map(f -> String.format("`%s`", f)).collect(Collectors.toList()))); } if (null != writerOptions.getLoadProps()) { for (Map.Entry entry : writerOptions.getLoadProps().entrySet()) { From 08cc6dbdca60d1f193614b5de9ecac95bc42828d Mon Sep 17 00:00:00 2001 From: wxpang <90431887+wxpang@users.noreply.github.com> Date: Fri, 15 Oct 2021 09:31:29 +0800 Subject: [PATCH 063/251] Update PostgresqlWriter.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加bigserial的类型转换 --- .../datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java b/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java index 22dc0c1e..2d38db35 100755 --- a/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java +++ b/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java @@ -67,6 +67,8 @@ public class PostgresqlWriter extends Writer { public String calcValueHolder(String columnType){ if("serial".equalsIgnoreCase(columnType)){ return "?::int"; + }else if("bigserial".equalsIgnoreCase(columnType)){ + return "?::int8"; }else if("bit".equalsIgnoreCase(columnType)){ return "?::bit varying"; } From 46f37648012855085db82dbc3f7d9c6a09478b8c Mon Sep 17 00:00:00 2001 From: hffariel Date: Fri, 15 Oct 2021 11:32:07 +0800 Subject: [PATCH 064/251] modify release version --- starrockswriter/pom.xml | 2 +- starrockswriter/src/main/assembly/package.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/starrockswriter/pom.xml b/starrockswriter/pom.xml index 9398b9ff..fcfeb5b3 100755 --- a/starrockswriter/pom.xml +++ b/starrockswriter/pom.xml @@ -8,7 +8,7 @@ starrockswriter starrockswriter - 1.1.0 + release jar diff --git a/starrockswriter/src/main/assembly/package.xml b/starrockswriter/src/main/assembly/package.xml index c63845b4..afb5cd5b 100755 --- a/starrockswriter/src/main/assembly/package.xml +++ b/starrockswriter/src/main/assembly/package.xml @@ -19,7 +19,7 @@ target/ - starrockswriter-1.1.0.jar + starrockswriter-release.jar plugin/writer/starrockswriter From bee91f54017a8970441643a358b0a27838cbb0e4 Mon Sep 17 00:00:00 2001 From: hffariel Date: Fri, 15 Oct 2021 11:40:41 +0800 Subject: [PATCH 065/251] a --- .github/workflows/release.yml | 1 + build.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 27435856..8db50270 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,6 +20,7 @@ jobs: fetch-depth: 0 - run: | git checkout main + rm -rf target mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true cd target/datax/datax/plugin/writer/ tar -czvf starrockswriter.tar.gz starrockswriter diff --git a/build.sh b/build.sh index 609aa2bb..d8574e17 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,6 @@ ShellDir="$( cd "$( dirname "$0" )" && pwd )" cd $ShellDir +rm -rf target mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true rm -f starrockswriter.tar.gz cd target/datax/datax/plugin/writer/ From fa4505775df1b03169ed024a5091e4777bc149d5 Mon Sep 17 00:00:00 2001 From: hffariel Date: Fri, 15 Oct 2021 13:09:05 +0800 Subject: [PATCH 066/251] fix release script --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8db50270..f26d8e32 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 - run: | - git checkout main + git checkout main && git pull origin main rm -rf target mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true cd target/datax/datax/plugin/writer/ From 0d5c8fc765b8a362f085e70826d7934447f6a8c9 Mon Sep 17 00:00:00 2001 From: kongxiaohan Date: Sat, 16 Oct 2021 18:10:51 +0800 Subject: [PATCH 067/251] modified a mistake description for rdbmsreader --- rdbmsreader/doc/rdbmsreader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rdbmsreader/doc/rdbmsreader.md b/rdbmsreader/doc/rdbmsreader.md index dd3039e9..fd8ae103 100644 --- a/rdbmsreader/doc/rdbmsreader.md +++ b/rdbmsreader/doc/rdbmsreader.md @@ -138,7 +138,7 @@ RDBMSReader插件实现了从RDBMS读取数据。在底层实现上,RDBMSReade **rdbmswriter如何增加新的数据库支持:** - - 进入rdbmsreader对应目录,这里${DATAX_HOME}为DataX主目录,即: ${DATAX_HOME}/plugin/reader/rdbmswriter + - 进入rdbmsreader对应目录,这里${DATAX_HOME}为DataX主目录,即: ${DATAX_HOME}/plugin/reader/rdbmsreader - 在rdbmsreader插件目录下有plugin.json配置文件,在此文件中注册您具体的数据库驱动,具体放在drivers数组中。rdbmsreader插件在任务执行时会动态选择合适的数据库驱动连接数据库。 From 5e54aee590f7ad5970b28c011d8c0e34d00c09ab Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 19 Oct 2021 15:40:11 +0800 Subject: [PATCH 068/251] tdenginewriter support batch write --- core/src/main/job/opentsdb2tdengine.json | 3 +- tdenginewriter/doc/tdenginewriter.md | 151 ++++++++++++++++++ .../datax/plugin/writer/JniConnection.java | 5 - .../com/alibaba/datax/plugin/writer/Key.java | 11 ++ .../datax/plugin/writer/TDengineWriter.java | 77 ++++----- 5 files changed, 205 insertions(+), 42 deletions(-) create mode 100644 tdenginewriter/doc/tdenginewriter.md create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java diff --git a/core/src/main/job/opentsdb2tdengine.json b/core/src/main/job/opentsdb2tdengine.json index dd332202..377b98c9 100644 --- a/core/src/main/job/opentsdb2tdengine.json +++ b/core/src/main/job/opentsdb2tdengine.json @@ -20,7 +20,8 @@ "port": 6030, "dbname": "test", "user": "root", - "password": "taosdata" + "password": "taosdata", + "batchSize": 1000 } } } diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md new file mode 100644 index 00000000..8e55b189 --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter.md @@ -0,0 +1,151 @@ +# DataX TDengineWriter + +## 1 快速介绍 + +TDengineWriter 插件实现了写入数据到 TDengine 的功能。 在底层实现上, TDengineWriter 通过 JNI的方式调用libtaos.so/tao.dll中的方法,连接 TDengine +数据库实例,并执行schemaless的写入。 TDengineWriter 面向ETL开发工程师,他们使用 TDengineWriter 从数仓导入数据到 TDengine。同时,TDengineWriter +亦可以作为数据迁移工具为DBA等用户提供服务。 + +## 2 实现原理 + +TDengineWriter 通过 DataX 框架获取 Reader +生成的协议数据,根据reader的类型解析数据,通过JNI方式调用libtaos.so(或taos.dll)中的方法,使用schemaless的方式写入到TDengine。 + +## 3 功能说明 + +### 3.1 配置样例 + +* 这里使用一份从OpenTSDB产生到 TDengine 导入的数据。 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather_temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.1.180", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* **host** + * 描述:TDengine实例的host。 + + * 必选:是
+ + * 默认值:无
+* **port** + * 描述:TDengine实例的port。 + * 必选:是
+ * 默认值:无
+* **dbname** + * 描述:目的数据库的名称。 + + * 必选:是
+ + * 默认值:无
+* **username** + * 描述:TDengine实例的用户名
+ * 必选:是
+ * 默认值:无
+* **password** + * 描述:TDengine实例的密码
+ * 必选:是
+ * 默认值:无
+ +### 3.3 类型转换 + +目前,由于opentsdbreader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: + +| OpenTSDB数据类型 | DataX 内部类型| TDengine 数据类型 | +| -------- | ----- | -------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String |binary | +| String(tag) | String |binary | + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| +|--------| --------|--------|--------|--------|--------|--------|--------| +|1| | | | | | | | +|4| | | | | | | | +|8| | | | | | | | +|16| | | | | | | | +|32| | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 +3. 16通道,4096批量提交时,出现 full gc 2次。 + +#### 4.2.4 性能测试小结 + +1. +2. + +## 5 约束限制 + +## FAQ \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java index a8739c54..b1670633 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -18,11 +18,6 @@ public class JniConnection { } public JniConnection(Properties props) throws Exception { - if (this.conn != JNI_NULL_POINTER) { - close(); - this.conn = JNI_NULL_POINTER; - } - initImp(props.getProperty(PROPERTY_KEY_CONFIG_DIR, null)); String locale = props.getProperty(PROPERTY_KEY_LOCALE); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java new file mode 100644 index 00000000..b240bce4 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java @@ -0,0 +1,11 @@ +package com.alibaba.datax.plugin.writer; + +public class Key { + public static final String HOST = "host"; + public static final String PORT = "port"; + public static final String DBNAME = "dbname"; + public static final String USER = "user"; + public static final String PASSWORD = "password"; + public static final String BATCH_SIZE = "batchSize"; + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index 28fa4ca5..60c76522 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -10,19 +10,12 @@ import com.alibaba.datax.common.util.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.Properties; +import java.util.*; public class TDengineWriter extends Writer { - private static final String HOST = "host"; - private static final String PORT = "port"; - private static final String DBNAME = "dbname"; - private static final String USER = "user"; - private static final String PASSWORD = "password"; private static final String PEER_PLUGIN_NAME = "peerPluginName"; + private static final String DEFAULT_BATCH_SIZE = "1"; public static class Job extends Writer.Job { @@ -45,7 +38,6 @@ public class TDengineWriter extends Writer { for (int i = 0; i < mandatoryNumber; i++) { writerSplitConfigs.add(this.originalConfig); } - return writerSplitConfigs; } } @@ -68,53 +60,66 @@ public class TDengineWriter extends Writer { @Override public void startWrite(RecordReceiver lineReceiver) { - - - String host = this.writerSliceConfig.getString(HOST); - int port = this.writerSliceConfig.getInt(PORT); - String dbname = this.writerSliceConfig.getString(DBNAME); - String user = this.writerSliceConfig.getString(USER); - String password = this.writerSliceConfig.getString(PASSWORD); - + Set keys = this.writerSliceConfig.getKeys(); Properties properties = new Properties(); - String cfgdir = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_CONFIG_DIR); - if (cfgdir != null && !cfgdir.isEmpty()) { - properties.setProperty(JniConnection.PROPERTY_KEY_CONFIG_DIR, cfgdir); - } - String timezone = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_TIME_ZONE); - if (timezone != null && !timezone.isEmpty()) { - properties.setProperty(JniConnection.PROPERTY_KEY_TIME_ZONE, timezone); - } - String locale = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_LOCALE); - if (locale != null && !locale.isEmpty()) { - properties.setProperty(JniConnection.PROPERTY_KEY_LOCALE, locale); - } - String charset = this.writerSliceConfig.getString(JniConnection.PROPERTY_KEY_CHARSET); - if (charset != null && !charset.isEmpty()) { - properties.setProperty(JniConnection.PROPERTY_KEY_CHARSET, charset); + for (String key : keys) { + String value = this.writerSliceConfig.getString(key); + properties.setProperty(key, value); } String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); if (peerPluginName.equals("opentsdbreader")) { + // opentsdb json protocol use JNI and schemaless API to write + + String host = properties.getProperty(Key.HOST); + int port = Integer.parseInt(properties.getProperty(Key.PORT)); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + try { JniConnection conn = new JniConnection(properties); conn.open(host, port, dbname, user, password); LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); - writeOpentsdb(lineReceiver, conn); + + int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); + writeOpentsdb(lineReceiver, conn, batchSize); conn.close(); LOG.info("TDengine connection closed"); } catch (Exception e) { LOG.error(e.getMessage()); e.printStackTrace(); } + } else { + // other } } - private void writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn) { + private void writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn, int batchSize) { try { Record record; + StringBuilder sb = new StringBuilder(); + long recordIndex = 1; while ((record = lineReceiver.getFromReader()) != null) { - String jsonData = recordToString(record); + if (batchSize == 1) { + String jsonData = recordToString(record); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + } else if (recordIndex % batchSize == 1) { + sb.append("[").append(recordToString(record)).append(","); + } else if (recordIndex % batchSize == 0) { + sb.append(recordToString(record)).append("]"); + String jsonData = sb.toString(); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + sb.delete(0, sb.length()); + } else { + sb.append(recordToString(record)).append(","); + } + recordIndex++; + } + if (sb.length() != 0 && sb.charAt(0) == '[') { + String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); LOG.debug(">>> " + jsonData); conn.insertOpentsdbJson(jsonData); } From ab526ca5c4d4c846277224cb122fec581d3f368c Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 19 Oct 2021 15:58:47 +0800 Subject: [PATCH 069/251] tdenginewriter --- .../datax/plugin/writer/TDengineWriter.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index 60c76522..9dc42d9d 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -45,7 +45,6 @@ public class TDengineWriter extends Writer { public static class Task extends Writer.Task { private static final Logger LOG = LoggerFactory.getLogger(Job.class); - private static final String NEWLINE_FLAG = System.getProperty("line.separator", "\n"); private Configuration writerSliceConfig; @Override @@ -70,25 +69,30 @@ public class TDengineWriter extends Writer { String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); if (peerPluginName.equals("opentsdbreader")) { // opentsdb json protocol use JNI and schemaless API to write - String host = properties.getProperty(Key.HOST); int port = Integer.parseInt(properties.getProperty(Key.PORT)); String dbname = properties.getProperty(Key.DBNAME); String user = properties.getProperty(Key.USER); String password = properties.getProperty(Key.PASSWORD); + JniConnection conn = null; try { - JniConnection conn = new JniConnection(properties); + conn = new JniConnection(properties); conn.open(host, port, dbname, user, password); LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); - int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); writeOpentsdb(lineReceiver, conn, batchSize); - conn.close(); - LOG.info("TDengine connection closed"); } catch (Exception e) { LOG.error(e.getMessage()); e.printStackTrace(); + } finally { + try { + if (conn != null) + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + LOG.info("TDengine connection closed"); } } else { // other @@ -132,7 +136,7 @@ public class TDengineWriter extends Writer { private String recordToString(Record record) { int recordLength = record.getColumnNumber(); if (0 == recordLength) { - return NEWLINE_FLAG; + return ""; } Column column; StringBuilder sb = new StringBuilder(); @@ -141,7 +145,6 @@ public class TDengineWriter extends Writer { sb.append(column.asString()).append("\t"); } sb.setLength(sb.length() - 1); - sb.append(NEWLINE_FLAG); return sb.toString(); } } From 7d9543105de02c68a26f088a13024994452c25ca Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 20 Oct 2021 14:21:50 +0800 Subject: [PATCH 070/251] data handle use stratgy pattern --- core/src/main/job/stream2tdengine.json | 56 +++++++++++ .../com/alibaba/datax/core/EngineTest.java | 3 +- .../datax/plugin/writer/DataHandler.java | 10 ++ .../plugin/writer/DataHandlerFactory.java | 10 ++ .../plugin/writer/DefaultDataHandler.java | 34 +++++++ .../plugin/writer/OpentsdbDataHandler.java | 98 +++++++++++++++++++ .../datax/plugin/writer/TDengineWriter.java | 91 ++--------------- 7 files changed, 218 insertions(+), 84 deletions(-) create mode 100644 core/src/main/job/stream2tdengine.json create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java diff --git a/core/src/main/job/stream2tdengine.json b/core/src/main/job/stream2tdengine.json new file mode 100644 index 00000000..6af68323 --- /dev/null +++ b/core/src/main/job/stream2tdengine.json @@ -0,0 +1,56 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "random": "2021-01-01 00:00:00, 2021-01-01 23:59:59", + "type": "date" + }, + { + "random": "0, 10000", + "type": "long" + }, + { + "random": "0, 10", + "type": "string" + }, + { + "random": "0, 5", + "type": "bool" + }, + { + "random": "0, 10", + "type": "double" + }, + { + "random": "0, 10", + "type": "bytes" + } + ], + "sliceRecordCount": 100 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.56.105", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000 + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/core/src/test/java/com/alibaba/datax/core/EngineTest.java b/core/src/test/java/com/alibaba/datax/core/EngineTest.java index bbc5bdc5..92c50a77 100644 --- a/core/src/test/java/com/alibaba/datax/core/EngineTest.java +++ b/core/src/test/java/com/alibaba/datax/core/EngineTest.java @@ -8,7 +8,8 @@ public class EngineTest { @Test public void test() { System.out.println(System.getProperty("java.library.path")); - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/opentsdb2tdengine.json"}; +// String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/opentsdb2tdengine.json"}; + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/stream2tdengine.json"}; System.setProperty("datax.home", "../target/datax/datax"); try { Engine.entry(params); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java new file mode 100644 index 00000000..94d1db30 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java @@ -0,0 +1,10 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.plugin.RecordReceiver; + +import java.util.Properties; + +public interface DataHandler { + + long handle(RecordReceiver lineReceiver, Properties properties); +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java new file mode 100644 index 00000000..a488e7d5 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java @@ -0,0 +1,10 @@ +package com.alibaba.datax.plugin.writer; + +public class DataHandlerFactory { + + public static DataHandler build(String peerPluginName) { + if (peerPluginName.equals("opentsdbreader")) + return new OpentsdbDataHandler(); + return new DefaultDataHandler(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java new file mode 100644 index 00000000..a1d52d75 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java @@ -0,0 +1,34 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.RecordReceiver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Properties; + +public class DefaultDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + + @Override + public long handle(RecordReceiver lineReceiver, Properties properties) { + long count = 0; + Record record; + while ((record = lineReceiver.getFromReader()) != null) { + + int recordLength = record.getColumnNumber(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + Column column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + LOG.debug(sb.toString()); + + count++; + } + return count; + } + +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java new file mode 100644 index 00000000..599e5f3e --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java @@ -0,0 +1,98 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Properties; + +public class OpentsdbDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(OpentsdbDataHandler.class); + private static final String DEFAULT_BATCH_SIZE = "1"; + + @Override + public long handle(RecordReceiver lineReceiver, Properties properties) { + // opentsdb json protocol use JNI and schemaless API to write + String host = properties.getProperty(Key.HOST); + int port = Integer.parseInt(properties.getProperty(Key.PORT)); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + + JniConnection conn = null; + long count = 0; + try { + conn = new JniConnection(properties); + conn.open(host, port, dbname, user, password); + LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); + int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); + count = writeOpentsdb(lineReceiver, conn, batchSize); + } catch (Exception e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + } finally { + try { + if (conn != null) + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + LOG.info("TDengine connection closed"); + } + + return count; + } + + private long writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn, int batchSize) { + long recordIndex = 1; + try { + Record record; + StringBuilder sb = new StringBuilder(); + while ((record = lineReceiver.getFromReader()) != null) { + if (batchSize == 1) { + String jsonData = recordToString(record); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + } else if (recordIndex % batchSize == 1) { + sb.append("[").append(recordToString(record)).append(","); + } else if (recordIndex % batchSize == 0) { + sb.append(recordToString(record)).append("]"); + String jsonData = sb.toString(); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + sb.delete(0, sb.length()); + } else { + sb.append(recordToString(record)).append(","); + } + recordIndex++; + } + if (sb.length() != 0 && sb.charAt(0) == '[') { + String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + } + } catch (Exception e) { + LOG.error("TDengineWriter ERROR: " + e.getMessage()); + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); + } + return recordIndex - 1; + } + + private String recordToString(Record record) { + int recordLength = record.getColumnNumber(); + if (0 == recordLength) { + return ""; + } + Column column; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + return sb.toString(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index 9dc42d9d..84600802 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -1,21 +1,20 @@ package com.alibaba.datax.plugin.writer; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; public class TDengineWriter extends Writer { private static final String PEER_PLUGIN_NAME = "peerPluginName"; - private static final String DEFAULT_BATCH_SIZE = "1"; public static class Job extends Writer.Job { @@ -67,85 +66,11 @@ public class TDengineWriter extends Writer { } String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); - if (peerPluginName.equals("opentsdbreader")) { - // opentsdb json protocol use JNI and schemaless API to write - String host = properties.getProperty(Key.HOST); - int port = Integer.parseInt(properties.getProperty(Key.PORT)); - String dbname = properties.getProperty(Key.DBNAME); - String user = properties.getProperty(Key.USER); - String password = properties.getProperty(Key.PASSWORD); - - JniConnection conn = null; - try { - conn = new JniConnection(properties); - conn.open(host, port, dbname, user, password); - LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); - int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); - writeOpentsdb(lineReceiver, conn, batchSize); - } catch (Exception e) { - LOG.error(e.getMessage()); - e.printStackTrace(); - } finally { - try { - if (conn != null) - conn.close(); - } catch (Exception e) { - e.printStackTrace(); - } - LOG.info("TDengine connection closed"); - } - } else { - // other - } + LOG.debug("start to handle record from: " + peerPluginName); + DataHandler handler = DataHandlerFactory.build(peerPluginName); + long records = handler.handle(lineReceiver, properties); + LOG.debug("handle data finished, records: " + records); } - private void writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn, int batchSize) { - try { - Record record; - StringBuilder sb = new StringBuilder(); - long recordIndex = 1; - while ((record = lineReceiver.getFromReader()) != null) { - if (batchSize == 1) { - String jsonData = recordToString(record); - LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); - } else if (recordIndex % batchSize == 1) { - sb.append("[").append(recordToString(record)).append(","); - } else if (recordIndex % batchSize == 0) { - sb.append(recordToString(record)).append("]"); - String jsonData = sb.toString(); - LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); - sb.delete(0, sb.length()); - } else { - sb.append(recordToString(record)).append(","); - } - recordIndex++; - } - if (sb.length() != 0 && sb.charAt(0) == '[') { - String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); - LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); - } - } catch (Exception e) { - LOG.error("TDengineWriter ERROR: " + e.getMessage()); - throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); - } - } - - private String recordToString(Record record) { - int recordLength = record.getColumnNumber(); - if (0 == recordLength) { - return ""; - } - Column column; - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < recordLength; i++) { - column = record.getColumn(i); - sb.append(column.asString()).append("\t"); - } - sb.setLength(sb.length() - 1); - return sb.toString(); - } } } From efa1de0513b1460795ec0905e3029ea53069756c Mon Sep 17 00:00:00 2001 From: Archie Date: Sat, 23 Oct 2021 19:20:21 +0800 Subject: [PATCH 071/251] word spelling mistake. :) --- core/src/main/java/com/alibaba/datax/core/Engine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/alibaba/datax/core/Engine.java b/core/src/main/java/com/alibaba/datax/core/Engine.java index f80d792f..be21512b 100755 --- a/core/src/main/java/com/alibaba/datax/core/Engine.java +++ b/core/src/main/java/com/alibaba/datax/core/Engine.java @@ -73,7 +73,7 @@ public class Engine { boolean traceEnable = allConf.getBool(CoreConstant.DATAX_CORE_CONTAINER_TRACE_ENABLE, true); boolean perfReportEnable = allConf.getBool(CoreConstant.DATAX_CORE_REPORT_DATAX_PERFLOG, true); - //standlone模式的datax shell任务不进行汇报 + //standalone模式的 datax shell任务不进行汇报 if(instanceId == -1){ perfReportEnable = false; } From cd6a2f73dae68b44724a422782d2c23f66c3ee67 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 26 Oct 2021 16:09:39 +0800 Subject: [PATCH 072/251] [TD-10725]: add tdenginereader --- core/src/main/job/mysql2tdengine.json | 46 ++++++ core/src/main/job/tdengine2tdengine.json | 38 +++++ package.xml | 41 +++-- pom.xml | 3 +- tdenginereader/doc/tdenginereader.md | 145 ++++++++++++++++++ tdenginereader/pom.xml | 90 +++++++++++ tdenginereader/src/main/assembly/package.xml | 34 ++++ .../datax/plugin/reader/TDengineReader.java | 47 ++++++ tdenginereader/src/main/resources/plugin.json | 9 ++ .../main/resources/plugin_job_template.json | 14 ++ tdenginewriter/pom.xml | 2 +- tdenginewriter/src/main/assembly/package.xml | 2 +- .../datax/plugin/writer/JniConnection.java | 18 +-- 13 files changed, 459 insertions(+), 30 deletions(-) create mode 100644 core/src/main/job/mysql2tdengine.json create mode 100644 core/src/main/job/tdengine2tdengine.json create mode 100644 tdenginereader/doc/tdenginereader.md create mode 100644 tdenginereader/pom.xml create mode 100755 tdenginereader/src/main/assembly/package.xml create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java create mode 100755 tdenginereader/src/main/resources/plugin.json create mode 100644 tdenginereader/src/main/resources/plugin_job_template.json diff --git a/core/src/main/job/mysql2tdengine.json b/core/src/main/job/mysql2tdengine.json new file mode 100644 index 00000000..530ee2b5 --- /dev/null +++ b/core/src/main/job/mysql2tdengine.json @@ -0,0 +1,46 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "root", + "column": [ + "id", + "name" + ], + "splitPk": "db_id", + "connection": [ + { + "table": [ + "test" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/database" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.56.105", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000 + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/core/src/main/job/tdengine2tdengine.json b/core/src/main/job/tdengine2tdengine.json new file mode 100644 index 00000000..750ae202 --- /dev/null +++ b/core/src/main/job/tdengine2tdengine.json @@ -0,0 +1,38 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "host": "192.168.1.82", + "port": 6030, + "db": "test", + "user": "root", + "password": "taosdata", + "sql": "select * from weather", + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-02 00:00:00", + "splitInterval": "1h" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.56.105", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000 + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/package.xml b/package.xml index a93e945c..1b291a99 100755 --- a/package.xml +++ b/package.xml @@ -103,13 +103,13 @@ datax - - otsstreamreader/target/datax/ - - **/*.* - - datax - + + otsstreamreader/target/datax/ + + **/*.* + + datax + txtfilereader/target/datax/ @@ -138,7 +138,7 @@ datax - + ftpreader/target/datax/ **/*.* @@ -180,6 +180,13 @@ datax + + tdenginereader/target/datax/ + + **/*.* + + datax + @@ -238,13 +245,6 @@ datax - - tdenginewriter/target/datax/ - - **/*.* - - datax - otswriter/target/datax/ @@ -259,7 +259,7 @@ datax - + oraclewriter/target/datax/ **/*.* @@ -273,7 +273,7 @@ datax - + postgresqlwriter/target/datax/ **/*.* @@ -399,5 +399,12 @@ datax + + tdenginewriter/target/datax/ + + **/*.* + + datax + diff --git a/pom.xml b/pom.xml index cb635ad3..2358e212 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ transformer - + mysqlreader @@ -109,6 +109,7 @@ tdenginewriter + tdenginereader diff --git a/tdenginereader/doc/tdenginereader.md b/tdenginereader/doc/tdenginereader.md new file mode 100644 index 00000000..284b8e6d --- /dev/null +++ b/tdenginereader/doc/tdenginereader.md @@ -0,0 +1,145 @@ +# DataX TDengineReader + +## 1 快速介绍 + +TDengineReader 插件实现了 TDengine 读取数据的功能。 + +## 2 实现原理 + +TDengineReader 通过TDengine的JDBC driver查询获取数据。 + +## 3 功能说明 + +### 3.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "host": "192.168.1.82", + "port": 6030, + "db": "test", + "user": "root", + "password": "taosdata", + "sql": "select * from weather", + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-02 00:00:00", + "splitInterval": "1h" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* **host** + * 描述:TDengine实例的host。 + * 必选:是
+ * 默认值:无
+* **port** + * 描述:TDengine实例的port。 + * 必选:是
+ * 默认值:无
+* **dbname** + * 描述:目的数据库的名称。 + * 必选:是
+ * 默认值:无
+* **username** + * 描述:TDengine实例的用户名
+ * 必选:是
+ * 默认值:无
+* **password** + * 描述:TDengine实例的密码
+ * 必选:是
+ * 默认值:无
+* **sql** + * 描述:用来筛选迁移数据的sql
+ * 必选:是
+ * 默认值:无
+* **beginDateTime** + * 描述:TDengine实例的密码
+ * 必选:是
+ * 默认值:无
+* **endDateTime** + * 描述:
+ * 必选:是
+ * 默认值:无
+* **splitInterval** + * 描述:按照splitInterval来划分task, 每splitInterval创建一个task
+ * 必选:否
+ * 默认值:1h
+ +### 3.3 类型转换 + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| +|--------| --------|--------|--------|--------|--------|--------|--------| +|1| | | | | | | | +|4| | | | | | | | +|8| | | | | | | | +|16| | | | | | | | +|32| | | | | | | | + +说明: +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 + +#### 4.2.4 性能测试小结 + +1. +2. + +## 5 约束限制 + +## FAQ \ No newline at end of file diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml new file mode 100644 index 00000000..66c64eaf --- /dev/null +++ b/tdenginereader/pom.xml @@ -0,0 +1,90 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + tdenginereader + + + 8 + 8 + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + junit + junit + ${junit-version} + test + + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginereader/src/main/assembly/package.xml b/tdenginereader/src/main/assembly/package.xml new file mode 100755 index 00000000..b52f20fb --- /dev/null +++ b/tdenginereader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/reader/tdenginereader + + + target/ + + tdenginereader-0.0.1-SNAPSHOT.jar + + plugin/reader/tdenginereader + + + + + + false + plugin/reader/tdenginereader/libs + runtime + + + diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java new file mode 100644 index 00000000..cec88eda --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -0,0 +1,47 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; + +import java.util.List; + +public class TDengineReader extends Reader { + + public static class Job extends Reader.Job { + + @Override + public void init() { + + } + + @Override + public void destroy() { + + } + + @Override + public List split(int adviceNumber) { + return null; + } + } + + public static class Task extends Reader.Task { + + @Override + public void init() { + + } + + @Override + public void destroy() { + + } + + @Override + public void startRead(RecordSender recordSender) { + + } + } + +} diff --git a/tdenginereader/src/main/resources/plugin.json b/tdenginereader/src/main/resources/plugin.json new file mode 100755 index 00000000..dc91982c --- /dev/null +++ b/tdenginereader/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginereader", + "class": "com.alibaba.datax.plugin.reader.TDengineReader", + "description": { + "useScene": "data migration from tdengine", + "mechanism": "use JNI to read data from tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginereader/src/main/resources/plugin_job_template.json b/tdenginereader/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..3e09dffc --- /dev/null +++ b/tdenginereader/src/main/resources/plugin_job_template.json @@ -0,0 +1,14 @@ +{ + "name": "tdenginereader", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "db": "test", + "user": "root", + "password": "taosdata", + "sql": "select * from weather", + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-02 00:00:00", + "splitInterval": "1h" + } +} \ No newline at end of file diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 2c294b8f..d658d4a2 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -11,7 +11,7 @@ com.alibaba.datax.tdenginewriter tdenginewriter - 1.0.0 + 0.0.1-SNAPSHOT 8 diff --git a/tdenginewriter/src/main/assembly/package.xml b/tdenginewriter/src/main/assembly/package.xml index f7a7d0bf..d3b75ea2 100755 --- a/tdenginewriter/src/main/assembly/package.xml +++ b/tdenginewriter/src/main/assembly/package.xml @@ -18,7 +18,7 @@ target/ - tdenginewriter-1.0.0.jar + tdenginewriter-0.0.1-SNAPSHOT.jar plugin/writer/tdenginewriter diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java index b1670633..3ce786e5 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java @@ -51,11 +51,15 @@ public class JniConnection { if (this.conn == JNI_NULL_POINTER) { throw new Exception("JNI connection is NULL"); } - long code = insertOpentsdbJson(json, this.conn); - if (code != JNI_SUCCESSFUL) { - String errMsg = getErrMsgByCode(code); + + long result = insertOpentsdbJson(json, this.conn); + int errCode = getErrCodeImp(this.conn, result); + if (errCode != JNI_SUCCESSFUL) { + String errMsg = getErrMsgImp(result); + freeResultSetImp(this.conn, result); throw new Exception(errMsg); } + freeResultSetImp(this.conn, result); } public void close() throws Exception { @@ -70,19 +74,13 @@ public class JniConnection { private static native int setOptions(int optionIndex, String optionValue); - private static native String getTsCharset(); - private native long connectImp(String host, int port, String dbName, String user, String password); - private native long executeQueryImp(byte[] sqlBytes, long connection); - private native int getErrCodeImp(long connection, long pSql); private native String getErrMsgImp(long pSql); - private native String getErrMsgByCode(long code); - - private native int getAffectedRowsImp(long connection, long pSql); + private native void freeResultSetImp(long connection, long pSql); private native int closeConnectionImp(long connection); From 072b6b4ed41721abd6c4d79c98ab8008eef158d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E4=B8=AA=E4=BA=BA=E5=90=83=E7=81=AB=E9=94=85?= <40656096+OverYoung@users.noreply.github.com> Date: Tue, 2 Nov 2021 20:18:18 +0800 Subject: [PATCH 073/251] =?UTF-8?q?=E4=B8=8D=E5=BD=B1=E5=93=8D=E9=98=85?= =?UTF-8?q?=E8=AF=BB=EF=BC=8C=E5=B0=B1=E6=98=AF=E8=BF=99=E4=B8=AA=E5=AD=97?= =?UTF-8?q?=E6=89=93=E9=94=99=E4=BA=86=E7=9C=8B=E7=9D=80=E9=9A=BE=E5=8F=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysqlreader/doc/mysqlreader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysqlreader/doc/mysqlreader.md b/mysqlreader/doc/mysqlreader.md index 3ae52afb..bae4bce0 100644 --- a/mysqlreader/doc/mysqlreader.md +++ b/mysqlreader/doc/mysqlreader.md @@ -165,7 +165,7 @@ MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReade 支持常量配置,用户需要按照Mysql SQL语法格式: ["id", "\`table\`", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"] - id为普通列名,\`table\`为包含保留在的列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。 + id为普通列名,\`table\`为包含保留字的列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。 * 必选:是
From 490cba2c0bec5bc2e49c321a6f2a0e1ca9fba679 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Sat, 6 Nov 2021 23:17:30 +0300 Subject: [PATCH 074/251] Remove wrong link There is no OCSReader in the project. Wrong link has been removed from table. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37a21022..fe5d122c 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | 阿里云数仓数据存储 | ODPS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/odpsreader/doc/odpsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/odpswriter/doc/odpswriter.md)| | | ADS | | √ |[写](https://github.com/alibaba/DataX/blob/master/adswriter/doc/adswriter.md)| | | OSS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ossreader/doc/ossreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/osswriter/doc/osswriter.md)| -| | OCS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ocsreader/doc/ocsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/ocswriter/doc/ocswriter.md)| +| | OCS | | √ |[写](https://github.com/alibaba/DataX/blob/master/ocswriter/doc/ocswriter.md)| | NoSQL数据存储 | OTS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/otsreader/doc/otsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/otswriter/doc/otswriter.md)| | | Hbase0.94 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase094xreader/doc/hbase094xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase094xwriter/doc/hbase094xwriter.md)| | | Hbase1.1 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase11xreader/doc/hbase11xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase11xwriter/doc/hbase11xwriter.md)| From e60948b604f8887addc806160eb89984bd477333 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 11 Nov 2021 15:24:09 +0800 Subject: [PATCH 075/251] add option authDB to mongodb reader doc --- mongodbreader/doc/mongodbreader.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mongodbreader/doc/mongodbreader.md b/mongodbreader/doc/mongodbreader.md index b61493e6..99d25731 100644 --- a/mongodbreader/doc/mongodbreader.md +++ b/mongodbreader/doc/mongodbreader.md @@ -127,6 +127,7 @@ MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的J * address: MongoDB的数据地址信息,因为MonogDB可能是个集群,则ip端口信息需要以Json数组的形式给出。【必填】 * userName:MongoDB的用户名。【选填】 * userPassword: MongoDB的密码。【选填】 +* authDb: MongoDB认证数据库【选填】 * collectionName: MonogoDB的集合名。【必填】 * column:MongoDB的文档列名。【必填】 * name:Column的名字。【必填】 From 3de5a8f71517268afe77415f71f6b5511d81a8b6 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 11 Nov 2021 17:38:14 +0800 Subject: [PATCH 076/251] add test job configure --- core/src/main/job/mongodb2tdengine.json | 75 +++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 core/src/main/job/mongodb2tdengine.json diff --git a/core/src/main/job/mongodb2tdengine.json b/core/src/main/job/mongodb2tdengine.json new file mode 100644 index 00000000..0667bddd --- /dev/null +++ b/core/src/main/job/mongodb2tdengine.json @@ -0,0 +1,75 @@ +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "123.56.104.14:27017" + ], + "userName": "admin678", + "mechanism": "SCRAM-SHA-1", + "userPassword": "huwG86123", + "authDb": "admin", + "dbName": "test", + "collectionName": "cu_market_data", + "column": [ + { + "name": "instrumentID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "123.56.104.14", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "measurement": "market_snapshot", + "tag_set": { + "product": "cu", + "instrumentID": 0 + }, + "field_set": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestamp": 1 + } + } + } + ] + } +} \ No newline at end of file From 906cc24ba16a8410cf935a2931b5a313c4446045 Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 12 Nov 2021 15:48:24 +0800 Subject: [PATCH 077/251] [TD-10787]: migrate mysql data to tdengine --- core/src/main/job/mysql2tdengine.json | 12 +-- core/src/main/job/opentsdb2stream.json | 31 -------- .../com/alibaba/datax/core/EngineTest.java | 2 +- tdenginewriter/pom.xml | 6 ++ .../datax/plugin/writer/CommonUtil.java | 20 +++++ .../datax/plugin/writer/DataHandler.java | 5 +- .../plugin/writer/DataHandlerFactory.java | 2 + .../plugin/writer/DefaultDataHandler.java | 5 +- .../datax/plugin/writer/MysqlDataHandler.java | 73 +++++++++++++++++++ .../plugin/writer/OpentsdbDataHandler.java | 4 +- .../datax/plugin/writer/TDengineWriter.java | 20 ++--- 11 files changed, 125 insertions(+), 55 deletions(-) delete mode 100644 core/src/main/job/opentsdb2stream.json create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/CommonUtil.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/MysqlDataHandler.java diff --git a/core/src/main/job/mysql2tdengine.json b/core/src/main/job/mysql2tdengine.json index 530ee2b5..7978fbf5 100644 --- a/core/src/main/job/mysql2tdengine.json +++ b/core/src/main/job/mysql2tdengine.json @@ -6,19 +6,18 @@ "name": "mysqlreader", "parameter": { "username": "root", - "password": "root", + "password": "123456", "column": [ - "id", - "name" + "*" ], - "splitPk": "db_id", + "splitPk": "f1", "connection": [ { "table": [ - "test" + "weather" ], "jdbcUrl": [ - "jdbc:mysql://127.0.0.1:3306/database" + "jdbc:mysql://192.168.56.105:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" ] } ] @@ -32,6 +31,7 @@ "dbname": "test", "user": "root", "password": "taosdata", + "table": "weather", "batchSize": 1000 } } diff --git a/core/src/main/job/opentsdb2stream.json b/core/src/main/job/opentsdb2stream.json deleted file mode 100644 index 1ea43204..00000000 --- a/core/src/main/job/opentsdb2stream.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "job": { - "content": [ - { - "reader": { - "name": "opentsdbreader", - "parameter": { - "endpoint": "http://192.168.1.180:4242", - "column": [ - "weather.temperature" - ], - "beginDateTime": "2021-01-01 00:00:00", - "endDateTime": "2021-01-01 01:00:00" - } - }, - "writer": { - "name": "streamwriter", - "parameter": { - "encoding": "UTF-8", - "print": true - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} \ No newline at end of file diff --git a/core/src/test/java/com/alibaba/datax/core/EngineTest.java b/core/src/test/java/com/alibaba/datax/core/EngineTest.java index 92c50a77..fe4dff8b 100644 --- a/core/src/test/java/com/alibaba/datax/core/EngineTest.java +++ b/core/src/test/java/com/alibaba/datax/core/EngineTest.java @@ -9,7 +9,7 @@ public class EngineTest { public void test() { System.out.println(System.getProperty("java.library.path")); // String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/opentsdb2tdengine.json"}; - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/stream2tdengine.json"}; + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/mysql2tdengine.json"}; System.setProperty("datax.home", "../target/datax/datax"); try { Engine.entry(params); diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index d658d4a2..d8df0c52 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -31,6 +31,12 @@ + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + + junit junit diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/CommonUtil.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/CommonUtil.java new file mode 100644 index 00000000..573b00f7 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/CommonUtil.java @@ -0,0 +1,20 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.util.Configuration; + +import java.util.Properties; +import java.util.Set; + +public class CommonUtil { + + public static Properties toProperties(Configuration configuration) { + Set keys = configuration.getKeys(); + Properties properties = new Properties(); + for (String key : keys) { + String value = configuration.getString(key); + if (value != null) + properties.setProperty(key, value); + } + return properties; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java index 94d1db30..e7a1328b 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java @@ -1,10 +1,9 @@ package com.alibaba.datax.plugin.writer; import com.alibaba.datax.common.plugin.RecordReceiver; - -import java.util.Properties; +import com.alibaba.datax.common.util.Configuration; public interface DataHandler { - long handle(RecordReceiver lineReceiver, Properties properties); + long handle(RecordReceiver lineReceiver, Configuration properties); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java index a488e7d5..26b3e475 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java @@ -5,6 +5,8 @@ public class DataHandlerFactory { public static DataHandler build(String peerPluginName) { if (peerPluginName.equals("opentsdbreader")) return new OpentsdbDataHandler(); + if (peerPluginName.equals("mysqlreader")) + return new MysqlDataHandler(); return new DefaultDataHandler(); } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java index a1d52d75..54d32d7b 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java @@ -3,16 +3,15 @@ package com.alibaba.datax.plugin.writer; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.util.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Properties; - public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); @Override - public long handle(RecordReceiver lineReceiver, Properties properties) { + public long handle(RecordReceiver lineReceiver, Configuration configuration) { long count = 0; Record record; while ((record = lineReceiver.getFromReader()) != null) { diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/MysqlDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/MysqlDataHandler.java new file mode 100644 index 00000000..fd52b774 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/MysqlDataHandler.java @@ -0,0 +1,73 @@ +package com.alibaba.datax.plugin.writer; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.util.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +public class MysqlDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(MysqlDataHandler.class); + Connection conn; + + @Override + public long handle(RecordReceiver lineReceiver, Configuration configuration) { + Properties properties = CommonUtil.toProperties(configuration); + + long count = 0; + try { + conn = getConnection(properties); + + Record record; + while ((record = lineReceiver.getFromReader()) != null) { + + int recordLength = record.getColumnNumber(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + Column column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + LOG.debug(sb.toString()); + + count++; + } + + + } finally { + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + return count; + } + + private Connection getConnection(Properties properties) { + String host = properties.getProperty(Key.HOST); + int port = Integer.parseInt(properties.getProperty(Key.PORT)); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + String url = "jdbc:TAOS://" + host + ":" + port + "/" + dbname + "?user=" + user + "&password=" + password; + Connection connection = null; + try { + connection = DriverManager.getConnection(url, properties); + LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); + } catch (SQLException e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + } + return connection; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java index 599e5f3e..2096909b 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java @@ -4,6 +4,7 @@ import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.util.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,8 +15,9 @@ public class OpentsdbDataHandler implements DataHandler { private static final String DEFAULT_BATCH_SIZE = "1"; @Override - public long handle(RecordReceiver lineReceiver, Properties properties) { + public long handle(RecordReceiver lineReceiver, Configuration configuration) { // opentsdb json protocol use JNI and schemaless API to write + Properties properties = CommonUtil.toProperties(configuration); String host = properties.getProperty(Key.HOST); int port = Integer.parseInt(properties.getProperty(Key.PORT)); String dbname = properties.getProperty(Key.DBNAME); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java index 84600802..73087acb 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java @@ -9,13 +9,19 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -import java.util.Properties; -import java.util.Set; public class TDengineWriter extends Writer { private static final String PEER_PLUGIN_NAME = "peerPluginName"; + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + public static class Job extends Writer.Job { private Configuration originalConfig; @@ -49,6 +55,7 @@ public class TDengineWriter extends Writer { @Override public void init() { this.writerSliceConfig = getPluginJobConf(); + } @Override @@ -58,17 +65,10 @@ public class TDengineWriter extends Writer { @Override public void startWrite(RecordReceiver lineReceiver) { - Set keys = this.writerSliceConfig.getKeys(); - Properties properties = new Properties(); - for (String key : keys) { - String value = this.writerSliceConfig.getString(key); - properties.setProperty(key, value); - } - String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); LOG.debug("start to handle record from: " + peerPluginName); DataHandler handler = DataHandlerFactory.build(peerPluginName); - long records = handler.handle(lineReceiver, properties); + long records = handler.handle(lineReceiver, writerSliceConfig); LOG.debug("handle data finished, records: " + records); } From bf01999222ff86d0275c1f7112db9846e814b729 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 18 Nov 2021 10:28:20 +0800 Subject: [PATCH 078/251] mongodb2tdengine support --- core/src/main/job/mongodb2tdengine.json | 11 +- tdenginewriter/doc/tdenginewriter.md | 260 ++++++++++++++---- tdenginewriter/pom.xml | 11 +- .../plugin/writer/DefaultDataHandler.java | 34 --- .../{ => tdenginewriter}/DataHandler.java | 2 +- .../DataHandlerFactory.java | 2 +- .../tdenginewriter/DefaultDataHandler.java | 101 +++++++ .../tdenginewriter/JDBCBatchWriter.java | 149 ++++++++++ .../{ => tdenginewriter}/JniConnection.java | 2 +- .../writer/{ => tdenginewriter}/Key.java | 7 +- .../OpentsdbDataHandler.java | 2 +- .../writer/tdenginewriter/SchemaManager.java | 255 +++++++++++++++++ .../{ => tdenginewriter}/TDengineWriter.java | 10 +- .../TDengineWriterErrorCode.java | 5 +- ...gin_writer_tdenginewriter_JniConnection.h} | 0 tdenginewriter/src/main/resources/plugin.json | 4 +- .../JniConnectionTest.java | 2 +- .../tdenginewriter/TDengineWriterTest.java | 21 ++ 18 files changed, 775 insertions(+), 103 deletions(-) delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/DataHandler.java (77%) rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/DataHandlerFactory.java (81%) create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/JniConnection.java (98%) rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/Key.java (52%) rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/OpentsdbDataHandler.java (98%) create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/TDengineWriter.java (84%) rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/TDengineWriterErrorCode.java (75%) rename tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/{com_alibaba_datax_plugin_writer_JniConnection.h => tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h} (100%) rename tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/{ => tdenginewriter}/JniConnectionTest.java (90%) create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java diff --git a/core/src/main/job/mongodb2tdengine.json b/core/src/main/job/mongodb2tdengine.json index 0667bddd..4cfc987e 100644 --- a/core/src/main/job/mongodb2tdengine.json +++ b/core/src/main/job/mongodb2tdengine.json @@ -55,18 +55,21 @@ "dbname": "test", "user": "root", "password": "taosdata", - "measurement": "market_snapshot", - "tag_set": { + "stable": "market_snapshot", + "batchSize": 35, + "tagColumn": { "product": "cu", "instrumentID": 0 }, - "field_set": { + "fieldColumn": { "lastPrice": 2, "askPrice1": 3, "bidPrice1": 4, "volume": 5 }, - "timestamp": 1 + "timestampColumn": { + "tradeTime": 1 + } } } } diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 8e55b189..c9c222a2 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -2,20 +2,21 @@ ## 1 快速介绍 -TDengineWriter 插件实现了写入数据到 TDengine 的功能。 在底层实现上, TDengineWriter 通过 JNI的方式调用libtaos.so/tao.dll中的方法,连接 TDengine -数据库实例,并执行schemaless的写入。 TDengineWriter 面向ETL开发工程师,他们使用 TDengineWriter 从数仓导入数据到 TDengine。同时,TDengineWriter -亦可以作为数据迁移工具为DBA等用户提供服务。 +TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 ## 2 实现原理 -TDengineWriter 通过 DataX 框架获取 Reader -生成的协议数据,根据reader的类型解析数据,通过JNI方式调用libtaos.so(或taos.dll)中的方法,使用schemaless的方式写入到TDengine。 +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: + +1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 + +2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 + +这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 ## 3 功能说明 - -### 3.1 配置样例 - -* 这里使用一份从OpenTSDB产生到 TDengine 导入的数据。 +### 3.1 从OpenTSDB到TDengine +#### 3.1.1 配置样例 ```json { @@ -54,46 +55,189 @@ TDengineWriter 通过 DataX 框架获取 Reader } ``` -### 3.2 参数说明 +#### 3.1.2 参数说明 -* **host** - * 描述:TDengine实例的host。 +| 参数 | 描述 | 是否必选 | 默认值 | +| --------- | -------------------- | -------- | -------- | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1 | - * 必选:是
- * 默认值:无
-* **port** - * 描述:TDengine实例的port。 - * 必选:是
- * 默认值:无
-* **dbname** - * 描述:目的数据库的名称。 +#### 3.1.3 类型转换 - * 必选:是
+目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: - * 默认值:无
-* **username** - * 描述:TDengine实例的用户名
- * 必选:是
- * 默认值:无
-* **password** - * 描述:TDengine实例的密码
- * 必选:是
- * 默认值:无
- -### 3.3 类型转换 - -目前,由于opentsdbreader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: - -| OpenTSDB数据类型 | DataX 内部类型| TDengine 数据类型 | -| -------- | ----- | -------- | +| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | | timestamp | Date | timestamp | | Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | +| Float(value) | Double | double | +| String(value) | String | binary | | Integer(tag) | String | binary | -| Float(tag) | String |binary | -| String(tag) | String |binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | + +### 3.2 从MongoDB到TDengine + +#### 3.2.1 配置样例 +```json +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "127.0.0.1:27017" + ], + "userName": "user", + "mechanism": "SCRAM-SHA-1", + "userPassword": "password", + "authDb": "admin", + "dbName": "test", + "collectionName": "stock", + "column": [ + { + "name": "stockID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "localhost", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "stable": "stock", + "tagColumn": { + "industry": "energy", + "stockID": 0 + }, + "fieldColumn": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestampColumn": { + "tradeTime": 1 + } + } + } + } + ] + } +} +``` + +**注:本配置的writer部分同样适用于关系型数据库** + + +#### 3.2.2 参数说明 +| 参数 | 描述 | 是否必选 | 默认值 | 备注 | +| --------------- | -------------------- | ---------------- | -------- | ------------------ | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1000 | +| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | +| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | +| fieldColumn | 字段列的列名和位置 | 否 | 无 | | +| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | + +#### 3.3.3 自动建表规则 +##### 3.3.3.1 超级表创建规则 + +如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
+数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: + +```sql +CREATE STABLE IF NOT EXISTS market_snapshot ( + tadetime TIMESTAMP, + lastprice DOUBLE, + askprice1 DOUBLE, + bidprice1 DOUBLE, + volume INT +) +TAGS( + industry NCHAR(64), + stockID NCHAR(64 +); +``` + +##### 3.3.3.2 子表创建规则 + +子表结果与超表相同,子表表名生成规则: +1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 +2. 计算该字符串的 MD5 散列值 "md5_val"。 +3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 + +#### 3.3.4 用户提前建表 + +如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 +此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +``` + Field | Type | Length | Note | +================================================================================= + ts | TIMESTAMP | 8 | | + current | DOUBLE | 8 | | + location | BINARY | 10 | TAG | +``` +那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 + +#### 3.3.5 注意事项 + +1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 +2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 +3. 插件优先使用配置文件中指定的表结构。 + +#### 3.3.6 类型转换 + +| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| int, Long | Long | BIGINT | +| double | Double | DOUBLE | +| string, array | String | NCHAR(64) | +| date | Date | TIMESTAMP | +| boolean | Boolean | BOOL | +| bytes | Bytes | BINARY | + ## 4 性能报告 @@ -127,13 +271,13 @@ TDengineWriter 通过 DataX 框架获取 Reader #### 4.2.1 单表测试报告 -| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| -|--------| --------|--------|--------|--------|--------|--------|--------| -|1| | | | | | | | -|4| | | | | | | | -|8| | | | | | | | -|16| | | | | | | | -|32| | | | | | | | +| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | +| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | +| 1 | | | | | | | | +| 4 | | | | | | | | +| 8 | | | | | | | | +| 16 | | | | | | | | +| 32 | | | | | | | | 说明: @@ -143,9 +287,23 @@ TDengineWriter 通过 DataX 框架获取 Reader #### 4.2.4 性能测试小结 -1. -2. ## 5 约束限制 -## FAQ \ No newline at end of file +## FAQ + +### 如何选取要同步的数据的范围? + +数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 + +### 如何一次导入多张源表? + +如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 + +### 1张源表导入之后对应TDengine中多少张表? + +这是又tagColumn决定的,如果所有tag列的值都相同,目标表也只有一个。源表有多少不同的tag组合,目标超表就会有多少子表。 + +### 源表和目标表的字段顺序一致吗? + +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 \ No newline at end of file diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index d658d4a2..8eb94b33 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -19,6 +19,11 @@
+ + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + com.alibaba.datax datax-common @@ -37,7 +42,11 @@ ${junit-version} test - + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java deleted file mode 100644 index a1d52d75..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DefaultDataHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.alibaba.datax.plugin.writer; - -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.plugin.RecordReceiver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Properties; - -public class DefaultDataHandler implements DataHandler { - private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); - - @Override - public long handle(RecordReceiver lineReceiver, Properties properties) { - long count = 0; - Record record; - while ((record = lineReceiver.getFromReader()) != null) { - - int recordLength = record.getColumnNumber(); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < recordLength; i++) { - Column column = record.getColumn(i); - sb.append(column.asString()).append("\t"); - } - sb.setLength(sb.length() - 1); - LOG.debug(sb.toString()); - - count++; - } - return count; - } - -} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java similarity index 77% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java index 94d1db30..686ac27b 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.plugin.RecordReceiver; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java similarity index 81% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java index a488e7d5..1f740d7e 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/DataHandlerFactory.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; public class DataHandlerFactory { diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java new file mode 100644 index 00000000..733f49c5 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -0,0 +1,101 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.taosdata.jdbc.TSDBPreparedStatement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +/** + * 默认DataHandler + */ +public class DefaultDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + @Override + public long handle(RecordReceiver lineReceiver, Properties properties) { + SchemaManager schemaManager = new SchemaManager(properties); + if (!schemaManager.configValid()) { + return 0; + } + + try { + Connection conn = getTaosConnection(properties); + if (conn == null) { + return 0; + } + if (schemaManager.shouldGuessSchema()) { + LOG.info("无法从配置文件获取表结构信息,尝试从数据库获取"); + boolean success = schemaManager.getFromDB(conn); + if (!success) { + return 0; + } + } else { + + } + int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, "1000")); + return write(lineReceiver, conn, batchSize, schemaManager); + } catch (Exception e) { + LOG.error("write failed " + e.getMessage()); + e.printStackTrace(); + } + return 0; + } + + + private Connection getTaosConnection(Properties properties) throws SQLException { + // 检查必要参数 + String host = properties.getProperty(Key.HOST); + String port = properties.getProperty(Key.PORT); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + if (host == null || port == null || dbname == null || user == null || password == null) { + String keys = String.join(" ", Key.HOST, Key.PORT, Key.DBNAME, Key.USER, Key.PASSWORD); + LOG.error("Required options missing, please check: " + keys); + return null; + } + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", host, port, dbname, user, password); + LOG.info("TDengine connection established, host:{} port:{} dbname:{} user:{}", host, port, dbname, user); + return DriverManager.getConnection(jdbcUrl); + } + + /** + * 使用SQL批量写入
+ * + * @return 成功写入记录数 + * @throws SQLException + */ + private long write(RecordReceiver lineReceiver, Connection conn, int batchSize, SchemaManager scm) throws SQLException { + Record record = lineReceiver.getFromReader(); + if (record == null) { + return 0; + } + if (scm.shouldCreateTable()) { + scm.createSTable(conn, record); + } + String pq = String.format("INSERT INTO ? USING %s TAGS(%s) (%s) values (%s)", scm.getStable(), scm.getTagValuesPlaceHolder(), scm.getJoinedFieldNames(), scm.getFieldValuesPlaceHolder()); + LOG.info("Prepared SQL: {}", pq); + try (TSDBPreparedStatement stmt = (TSDBPreparedStatement) conn.prepareStatement(pq)) { + JDBCBatchWriter batchWriter = new JDBCBatchWriter(stmt, scm, batchSize); + do { + batchWriter.append(record); + } while ((record = lineReceiver.getFromReader()) != null); + batchWriter.flush(); + return batchWriter.getCount(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java new file mode 100644 index 00000000..17023d03 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -0,0 +1,149 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.taosdata.jdbc.TSDBPreparedStatement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 使用JDBC原生写入接口批量写入。
+ * 有两个限制条件导致批量写入的代码逻辑过于复杂,以至于需要开发新的类来封装。
+ * 1. 用户必须提前把需要批量写入的数据搜集到ArrayList中 + * 2. 每批写入的表名必须相同。 + * 这个类的实现逻辑是: + * 1. 先把属于同一子表的Record缓存起来 + * 2. 缓存的数量达到batchSize阈值,自动执行一次批量写入 + * 3. 最后一批数据需要用户手动flush才能写入 + */ +public class JDBCBatchWriter { + public static final Logger LOG = LoggerFactory.getLogger(JDBCBatchWriter.class); + + private TSDBPreparedStatement stmt; + private SchemaManager scm; + private int batchSize; + // 缓存Record, key为tableName + Map> buf = new HashMap<>(); + // 缓存表的标签值, key为tableName + Map tableTagValues = new HashMap<>(); + private long sucCount = 0; + private final int tsColIndex; + private List fieldList; + private Map fieldIndexMap; + + public JDBCBatchWriter(TSDBPreparedStatement stmt, SchemaManager scm, int batchSize) { + this.stmt = stmt; + this.scm = scm; + this.batchSize = batchSize; + this.tsColIndex = scm.getTsColIndex(); + this.fieldList = scm.getFieldList(); + this.fieldIndexMap = scm.getFieldIndexMap(); + } + + + public void append(Record record) throws SQLException { + String[] tagValues = scm.getTagValuesFromRecord(record); + String tableName = scm.computeTableName(tagValues); + if (buf.containsKey(tableName)) { + List lis = buf.get(tableName); + lis.add(record); + if (lis.size() == batchSize) { + executeBatch(tableName); + lis.clear(); + } + } else { + List lis = new ArrayList<>(batchSize); + lis.add(record); + buf.put(tableName, lis); + tableTagValues.put(tableName, tagValues); + } + } + + /** + * 执行单表批量写入 + * + * @param tableName + * @throws SQLException + */ + private void executeBatch(String tableName) throws SQLException { + // 表名 + stmt.setTableName(tableName); + List records = buf.get(tableName); + // 标签 + String[] tagValues = tableTagValues.get(tableName); + LOG.debug("executeBatch {}", String.join(",", tagValues)); + for (int i = 0; i < tagValues.length; ++i) { + stmt.setTagNString(i, tagValues[i]); + } + // 时间戳 + ArrayList tsList = records.stream().map(r -> r.getColumn(tsColIndex).asDate().getTime()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setTimestamp(0, tsList); + // 字段 + Record record = records.get(0); + for (int i = 0; i < fieldList.size(); ) { + String fieldName = fieldList.get(i); + int index = fieldIndexMap.get(fieldName); + Column column = record.getColumn(index); + switch (column.getType()) { + case LONG: + ArrayList lisLong = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setLong(++i, lisLong); + break; + case DOUBLE: + ArrayList lisDouble = records.stream().map(r -> r.getColumn(index).asDouble()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setDouble(++i, lisDouble); + break; + case STRING: + ArrayList lisString = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setNString(++i, lisString, 64); + break; + case DATE: + ArrayList lisTs = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setTimestamp(++i, lisTs); + break; + case BOOL: + ArrayList lisBool = records.stream().map(r -> r.getColumn(index).asBoolean()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setBoolean(++i, lisBool); + break; + case BYTES: + ArrayList lisBytes = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setString(++i, lisBytes, 64); + break; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, column.getType().toString()); + } + } + // 执行 + stmt.columnDataAddBatch(); + stmt.columnDataExecuteBatch(); + // 更新计数器 + sucCount += records.size(); + } + + /** + * 把缓存的Record全部写入 + */ + public void flush() throws SQLException { + for (String tabName : buf.keySet()) { + if (buf.get(tabName).size() > 0) { + executeBatch(tabName); + } + } + stmt.columnDataCloseBatch(); + } + + /** + * @return 成功写入的数据量 + */ + public long getCount() { + return sucCount; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java similarity index 98% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java index 3ce786e5..0aabe32a 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/JniConnection.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import java.util.Properties; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java similarity index 52% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index b240bce4..090a7999 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; public class Key { public static final String HOST = "host"; @@ -7,5 +7,8 @@ public class Key { public static final String USER = "user"; public static final String PASSWORD = "password"; public static final String BATCH_SIZE = "batchSize"; - + public static final String STABLE = "stable"; + public static final String TAG_COLUMN = "tagColumn"; + public static final String FIELD_COLUMN = "fieldColumn"; + public static final String TIMESTAMP_COLUMN = "timestampColumn"; } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java similarity index 98% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java index 599e5f3e..52f1aa7a 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/OpentsdbDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java new file mode 100644 index 00000000..b3d7b7e3 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -0,0 +1,255 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import org.apache.commons.codec.digest.DigestUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.*; +import java.util.stream.Collectors; + +public class SchemaManager { + private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); + + private String stable; // 目标超表名 + private Map fixedTagValue = new HashMap<>(); // 固定标签值 标签名 -> 标签值 + private Map tagIndexMap = new HashMap<>(); // 动态标签值 标签名 -> 列索引 + private Map fieldIndexMap = new HashMap<>(); // 字段名 -> 字段索引 + private String tsColName; // 时间戳列名 + private int tsColIndex = -1; // 时间戳列索引 + private List fieldList = new ArrayList<>(); + private List tagList = new ArrayList<>(); + private boolean canInferSchemaFromConfig = false; + + + public SchemaManager() { + } + + public SchemaManager(Properties properties) { + getFromConfig(properties); + } + + private String mapDataxType(Column.Type type) { + switch (type) { + case LONG: + return "BIGINT"; + case DOUBLE: + return "DOUBLE"; + case STRING: + return "NCHAR(64)"; + case DATE: + return "TIMESTAMP"; + case BOOL: + return "BOOL"; + case BYTES: + return "BINARY"; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, type.toString()); + } + } + + public void setStable(String stable) { + stable = stable; + } + + public String getStable() { + return stable; + } + + private void getFromConfig(Properties properties) { + stable = properties.getProperty(Key.STABLE); + if (stable == null) { + LOG.error("配置错误: no stable"); + return; + } + for (Object key : properties.keySet()) { + String k = (String) key; + String v = properties.getProperty(k); + + String[] ps = k.split("\\."); + if (ps.length == 1) { + continue; + } + if (k.startsWith(Key.TAG_COLUMN)) { + String tagName = ps[1]; + try { + Integer tagIndex = Integer.parseInt(v); + this.tagIndexMap.put(tagName, tagIndex); + tagList.add(tagName); + } catch (NumberFormatException e) { + fixedTagValue.put(tagName, v); + tagList.add(tagName); + } + } else if (k.startsWith(Key.FIELD_COLUMN)) { + String fieldName = ps[1]; + Integer fileIndex = Integer.parseInt(v); + fieldIndexMap.put(fieldName, fileIndex); + } else if (k.startsWith(Key.TIMESTAMP_COLUMN)) { + tsColName = ps[1]; + tsColIndex = Integer.parseInt(v); + } + } + List sortedFieldName = fieldIndexMap.entrySet().stream().sorted((x, y) -> x.getValue().compareTo(y.getValue())).map(e -> e.getKey()).collect(Collectors.toList()); + fieldList.addAll(sortedFieldName); // 排序的目的是保证自动建表时列的顺序和输入数据的列的顺序保持一致 + canInferSchemaFromConfig = tsColIndex > -1 && !(fixedTagValue.isEmpty() && tagIndexMap.isEmpty()) && !fieldIndexMap.isEmpty(); + LOG.info("配置文件解析结果:fixedTags=[{}] ,tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", fixedTagValue.keySet()), String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + } + + public boolean shouldGuessSchema() { + return !canInferSchemaFromConfig; + } + + public boolean shouldCreateTable() { + return canInferSchemaFromConfig; + } + + public boolean configValid() { + boolean valid = (tagList.size() > 0 && fieldList.size() > 0 && tsColIndex > -1) || (tagList.size() == 0 && fieldList.size() == 0 && tsColIndex == -1); + if (!valid) { + LOG.error("配置错误. tag_columns,field_columns,timestamp_column必须同时存在或同时省略,当前解析结果: tag_columns: {}, field_columns:{}, timestamp_column:{} tsColIndex:{}", + (fixedTagValue.size() + tagIndexMap.size()), fieldIndexMap.size(), tsColName, tsColIndex); + } + return valid; + } + + /** + * 通过执行`describe dbname.stable`命令,获取表的schema.
+ * describe命名返回有4列内容,分布是:Field,Type,Length,Note
+ * + * @return 成功返回true,如果超表不存在或其他错误则返回false + */ + public boolean getFromDB(Connection conn) { + try { + List stables = getSTables(conn); + if (!stables.contains(stable)) { + LOG.error("超级表{}不存在,无法从数据库获取表结构信息.", stable); + return false; + } + } catch (SQLException e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + return false; + } + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("describe " + stable); + int colIndex = 0; + while (rs.next()) { + String name = rs.getString(1); + String type = rs.getString(2); + String note = rs.getString(4); + if ("TIMESTAMP".equals(type)) { + tsColName = name; + tsColIndex = colIndex; + } else if ("TAG".equals(note)) { + tagIndexMap.put(name, colIndex); + tagList.add(name); + } else { + fieldIndexMap.put(name, colIndex); + fieldList.add(name); + } + colIndex++; + } + LOG.info("从数据库获取的表结构概要:tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + return true; + } catch (SQLException e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + return false; + } + } + + public static List getSTables(Connection conn) throws SQLException { + List stables = new ArrayList<>(); + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("show stables"); + while (rs.next()) { + String name = rs.getString(1); + stables.add(name); + } + } + return stables; + } + + public void createSTable(Connection conn, Record record) throws SQLException { + StringBuilder sb = new StringBuilder(); + sb.append("CREATE STABLE IF NOT EXISTS ").append(stable).append("("); + sb.append(tsColName).append(" ").append("TIMESTAMP,"); + for (String fieldName : fieldList) { + sb.append(fieldName).append(' '); + Column col = record.getColumn(fieldIndexMap.get(fieldName)); + String tdType = mapDataxType(col.getType()); + sb.append(tdType).append(','); + } + sb.deleteCharAt(sb.length() - 1); + sb.append(") TAGS("); + for (String tagName : tagList) { + sb.append(tagName).append(" NCHAR(64),"); + } + sb.deleteCharAt(sb.length() - 1); + sb.append(")"); + String q = sb.toString(); + LOG.info("自动创建超级表:" + q); + try (Statement stmt = conn.createStatement()) { + stmt.execute(q); + } + } + + public String[] getTagValuesFromRecord(Record record) { + String[] tagValues = new String[tagList.size()]; + for (int i = 0; i < tagList.size(); ++i) { + if (fixedTagValue.containsKey(tagList.get(i))) { + tagValues[i] = fixedTagValue.get(tagList.get(i)); + } else { + int tagIndex = tagIndexMap.get(tagList.get(i)); + tagValues[i] = record.getColumn(tagIndex).asString(); + } + } + return tagValues; + } + + public Map getFieldIndexMap() { + return fieldIndexMap; + } + + public List getFieldList() { + return fieldList; + } + + public String getJoinedFieldNames() { + return tsColName + ", " + String.join(", ", fieldList); + } + + public int getTsColIndex() { + return tsColIndex; + } + + public String getTagValuesPlaceHolder() { + return tagList.stream().map(x -> "?").collect(Collectors.joining(",")); + } + + public String getFieldValuesPlaceHolder() { + return "?, " + fieldList.stream().map(x -> "?").collect(Collectors.joining(", ")); + } + + /** + * 计算子表表名 + *
    + *
  1. 将标签的value 组合成为如下的字符串: tag_value1!tag_value2!tag_value3。
  2. + *
  3. 计算该字符串的 MD5 散列值 "md5_val"。
  4. + *
  5. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。
  6. + *
+ * + * @param tagValues + * @return + */ + public String computeTableName(String[] tagValues) { + String s = String.join("!", tagValues); + return "t_" + DigestUtils.md5Hex(s); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java similarity index 84% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java index 84600802..70ea5737 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.plugin.RecordReceiver; @@ -64,7 +64,13 @@ public class TDengineWriter extends Writer { String value = this.writerSliceConfig.getString(key); properties.setProperty(key, value); } - + if (!keys.contains(Key.USER)) { + properties.setProperty(Key.USER, "root"); + } + if (!keys.contains(Key.PASSWORD)) { + properties.setProperty(Key.PASSWORD, "taosdata"); + } + LOG.debug("========================properties==========================\n" + properties.toString()); String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); LOG.debug("start to handle record from: " + peerPluginName); DataHandler handler = DataHandlerFactory.build(peerPluginName); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java similarity index 75% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java index 02e87079..994f1e89 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/TDengineWriterErrorCode.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -1,9 +1,10 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.spi.ErrorCode; public enum TDengineWriterErrorCode implements ErrorCode { - RUNTIME_EXCEPTION("TDengineWriter-00", "运行时异常"); + RUNTIME_EXCEPTION("TDengineWriter-00", "运行时异常"), + TYPE_ERROR("TDengineWriter-00", "Datax类型无法正确映射到TDengine类型"); private final String code; private final String description; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h similarity index 100% rename from tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/com_alibaba_datax_plugin_writer_JniConnection.h rename to tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h diff --git a/tdenginewriter/src/main/resources/plugin.json b/tdenginewriter/src/main/resources/plugin.json index 6c900a15..e54f65ff 100755 --- a/tdenginewriter/src/main/resources/plugin.json +++ b/tdenginewriter/src/main/resources/plugin.json @@ -1,9 +1,9 @@ { "name": "tdenginewriter", - "class": "com.alibaba.datax.plugin.writer.TDengineWriter", + "class": "com.alibaba.datax.plugin.writer.tdenginewriter.TDengineWriter", "description": { "useScene": "data migration to tdengine", - "mechanism": "use JNI to write data to tdengine." + "mechanism": "use JNI or taos-jdbc to write data to tdengine." }, "developer": "zyyang-taosdata" } \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java similarity index 90% rename from tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java rename to tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java index 040cf34c..09c3df26 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/JniConnectionTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java @@ -1,4 +1,4 @@ -package com.alibaba.datax.plugin.writer; +package com.alibaba.datax.plugin.writer.tdenginewriter; import org.junit.Test; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java new file mode 100644 index 00000000..43928db9 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java @@ -0,0 +1,21 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class TDengineWriterTest { + + + @Test + public void testGetSchema() throws ClassNotFoundException, SQLException { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); + Connection conn = DriverManager.getConnection(jdbcUrl); + SchemaManager schemaManager = new SchemaManager(); + schemaManager.setStable("test1"); + schemaManager.getFromDB(conn); + } +} From ca1851fb995a3200bd4c186539ff1930b7162e8d Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 18 Nov 2021 18:06:10 +0800 Subject: [PATCH 079/251] mongodb2tdengine test and refine --- core/src/main/job/mongodb2tdengine.json | 4 +- tdenginewriter/doc/tdenginewriter.md | 11 +- .../writer/tdenginewriter/DataHandler.java | 3 +- .../tdenginewriter/DefaultDataHandler.java | 17 +-- .../tdenginewriter/JDBCBatchWriter.java | 100 ++++++++++++++++-- .../tdenginewriter/OpentsdbDataHandler.java | 3 +- .../writer/tdenginewriter/SchemaManager.java | 25 ++++- .../writer/tdenginewriter/TDengineWriter.java | 2 +- .../tdenginewriter/TDengineWriterTest.java | 10 ++ 9 files changed, 150 insertions(+), 25 deletions(-) diff --git a/core/src/main/job/mongodb2tdengine.json b/core/src/main/job/mongodb2tdengine.json index 4cfc987e..45e5a640 100644 --- a/core/src/main/job/mongodb2tdengine.json +++ b/core/src/main/job/mongodb2tdengine.json @@ -11,7 +11,7 @@ "name": "mongodbreader", "parameter": { "address": [ - "123.56.104.14:27017" + "127.0.0.1:27017" ], "userName": "admin678", "mechanism": "SCRAM-SHA-1", @@ -50,7 +50,7 @@ "writer": { "name": "tdenginewriter", "parameter": { - "host": "123.56.104.14", + "host": "127.0.0.1", "port": 6030, "dbname": "test", "user": "root", diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index c9c222a2..9ab64a2d 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -290,6 +290,9 @@ TAGS( ## 5 约束限制 +1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 +2. 标签列不能包含null值,如果包含会被过滤掉。 + ## FAQ ### 如何选取要同步的数据的范围? @@ -300,10 +303,14 @@ TAGS( 如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 -### 1张源表导入之后对应TDengine中多少张表? +### 一张源表导入之后对应TDengine中多少张表? 这是又tagColumn决定的,如果所有tag列的值都相同,目标表也只有一个。源表有多少不同的tag组合,目标超表就会有多少子表。 ### 源表和目标表的字段顺序一致吗? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 \ No newline at end of file +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 + +### 插件如何确定各列的数据类型? + +抽样收到的第一批数据自动推断各列的类型。schema是从数据来的,因此要保障“好的”数据占大多数。 \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java index 686ac27b..421c2fe4 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -1,10 +1,11 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; import java.util.Properties; public interface DataHandler { - long handle(RecordReceiver lineReceiver, Properties properties); + long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 733f49c5..9250910a 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -2,6 +2,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.taosdata.jdbc.TSDBPreparedStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +17,6 @@ import java.util.Properties; */ public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); - static { try { Class.forName("com.taosdata.jdbc.TSDBDriver"); @@ -26,7 +26,7 @@ public class DefaultDataHandler implements DataHandler { } @Override - public long handle(RecordReceiver lineReceiver, Properties properties) { + public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { SchemaManager schemaManager = new SchemaManager(properties); if (!schemaManager.configValid()) { return 0; @@ -47,7 +47,11 @@ public class DefaultDataHandler implements DataHandler { } int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, "1000")); - return write(lineReceiver, conn, batchSize, schemaManager); + if (batchSize < 5) { + LOG.error("batchSize太小,会增加自动类型推断错误的概率,建议改大后重试"); + return 0; + } + return write(lineReceiver, conn, batchSize, schemaManager, collector); } catch (Exception e) { LOG.error("write failed " + e.getMessage()); e.printStackTrace(); @@ -79,18 +83,15 @@ public class DefaultDataHandler implements DataHandler { * @return 成功写入记录数 * @throws SQLException */ - private long write(RecordReceiver lineReceiver, Connection conn, int batchSize, SchemaManager scm) throws SQLException { + private long write(RecordReceiver lineReceiver, Connection conn, int batchSize, SchemaManager scm, TaskPluginCollector collector) throws SQLException { Record record = lineReceiver.getFromReader(); if (record == null) { return 0; } - if (scm.shouldCreateTable()) { - scm.createSTable(conn, record); - } String pq = String.format("INSERT INTO ? USING %s TAGS(%s) (%s) values (%s)", scm.getStable(), scm.getTagValuesPlaceHolder(), scm.getJoinedFieldNames(), scm.getFieldValuesPlaceHolder()); LOG.info("Prepared SQL: {}", pq); try (TSDBPreparedStatement stmt = (TSDBPreparedStatement) conn.prepareStatement(pq)) { - JDBCBatchWriter batchWriter = new JDBCBatchWriter(stmt, scm, batchSize); + JDBCBatchWriter batchWriter = new JDBCBatchWriter(conn, stmt, scm, batchSize, collector); do { batchWriter.append(record); } while ((record = lineReceiver.getFromReader()) != null); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java index 17023d03..21974e93 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -3,10 +3,13 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.AbstractTaskPlugin; +import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.taosdata.jdbc.TSDBPreparedStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; @@ -26,10 +29,12 @@ import java.util.stream.Collectors; */ public class JDBCBatchWriter { public static final Logger LOG = LoggerFactory.getLogger(JDBCBatchWriter.class); - private TSDBPreparedStatement stmt; private SchemaManager scm; + private Connection conn; private int batchSize; + private TaskPluginCollector collector; + // 缓存Record, key为tableName Map> buf = new HashMap<>(); // 缓存表的标签值, key为tableName @@ -37,25 +42,57 @@ public class JDBCBatchWriter { private long sucCount = 0; private final int tsColIndex; private List fieldList; + // 每个record至少应该包含的列数,用于检测数据 + private int minColNum = 0; private Map fieldIndexMap; + private List fieldTypes = null; - public JDBCBatchWriter(TSDBPreparedStatement stmt, SchemaManager scm, int batchSize) { + public JDBCBatchWriter(Connection conn, TSDBPreparedStatement stmt, SchemaManager scm, int batchSize, TaskPluginCollector collector) { + this.conn = conn; this.stmt = stmt; this.scm = scm; this.batchSize = batchSize; + this.collector = collector; this.tsColIndex = scm.getTsColIndex(); this.fieldList = scm.getFieldList(); this.fieldIndexMap = scm.getFieldIndexMap(); + this.minColNum = 1 + fieldList.size() + scm.getDynamicTagCount(); + } + public void initFiledTypesAndTargetTable(List records) throws SQLException { + if (fieldTypes != null) { + return; + } + guessFieldTypes(records); + if (scm.shouldCreateTable()) { + scm.createSTable(conn, fieldTypes); + } + } public void append(Record record) throws SQLException { + int columnNum = record.getColumnNumber(); + if (columnNum < minColNum) { + collector.collectDirtyRecord(record, "实际列数小于期望列数"); + return; + } String[] tagValues = scm.getTagValuesFromRecord(record); + if (tagValues == null) { + collector.collectDirtyRecord(record, "标签列包含null"); + return; + } + if (!scm.hasTimestamp(record)) { + collector.collectDirtyRecord(record, "时间戳列为null或类型错误"); + return; + } String tableName = scm.computeTableName(tagValues); if (buf.containsKey(tableName)) { List lis = buf.get(tableName); lis.add(record); if (lis.size() == batchSize) { + if (fieldTypes == null) { + initFiledTypesAndTargetTable(lis); + } executeBatch(tableName); lis.clear(); } @@ -67,6 +104,49 @@ public class JDBCBatchWriter { } } + /** + * 只有String类型比较特别,测试发现值为null的列会转成String类型。所以Column的类型为String并不代表这一列的类型真的是String。 + * + * @param records + */ + private void guessFieldTypes(List records) { + fieldTypes = new ArrayList<>(fieldList.size()); + for (int i = 0; i < fieldList.size(); ++i) { + int colIndex = fieldIndexMap.get(fieldList.get(i)); + boolean ok = false; + for (int j = 0; j < records.size() && !ok; ++j) { + Column column = records.get(j).getColumn(colIndex); + Column.Type type = column.getType(); + switch (type) { + case LONG: + case DOUBLE: + case DATE: + case BOOL: + case BYTES: + if (column.getRawData() != null) { + fieldTypes.add(type); + ok = true; + } + break; + case STRING: + // 只有非null且非空的String列,才会被真的当作String类型。 + String value = column.asString(); + if (value != null && !"".equals(value)) { + fieldTypes.add(type); + ok = true; + } + break; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); + } + } + if (!ok) { + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, String.format("根据采样的%d条数据,无法推断第%d列的数据类型", records.size(), i + 1)); + } + } + LOG.info("Field Types: {}", fieldTypes); + } + /** * 执行单表批量写入 * @@ -87,12 +167,10 @@ public class JDBCBatchWriter { ArrayList tsList = records.stream().map(r -> r.getColumn(tsColIndex).asDate().getTime()).collect(Collectors.toCollection(ArrayList::new)); stmt.setTimestamp(0, tsList); // 字段 - Record record = records.get(0); for (int i = 0; i < fieldList.size(); ) { String fieldName = fieldList.get(i); int index = fieldIndexMap.get(fieldName); - Column column = record.getColumn(index); - switch (column.getType()) { + switch (fieldTypes.get(i)) { case LONG: ArrayList lisLong = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); stmt.setLong(++i, lisLong); @@ -118,7 +196,7 @@ public class JDBCBatchWriter { stmt.setString(++i, lisBytes, 64); break; default: - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, column.getType().toString()); + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); } } // 执行 @@ -132,6 +210,16 @@ public class JDBCBatchWriter { * 把缓存的Record全部写入 */ public void flush() throws SQLException { + if (fieldTypes == null) { + List records = new ArrayList<>(); + for (List lis : buf.values()) { + records.addAll(lis); + if (records.size() > 100) { + break; + } + } + initFiledTypesAndTargetTable(records); + } for (String tabName : buf.keySet()) { if (buf.get(tabName).size() > 0) { executeBatch(tabName); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java index 52f1aa7a..e1b8f5dd 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java @@ -4,6 +4,7 @@ import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +15,7 @@ public class OpentsdbDataHandler implements DataHandler { private static final String DEFAULT_BATCH_SIZE = "1"; @Override - public long handle(RecordReceiver lineReceiver, Properties properties) { + public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { // opentsdb json protocol use JNI and schemaless API to write String host = properties.getProperty(Key.HOST); int port = Integer.parseInt(properties.getProperty(Key.PORT)); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index b3d7b7e3..21b8ef01 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -176,14 +176,15 @@ public class SchemaManager { return stables; } - public void createSTable(Connection conn, Record record) throws SQLException { + public void createSTable(Connection conn, List fieldTypes) throws SQLException { StringBuilder sb = new StringBuilder(); sb.append("CREATE STABLE IF NOT EXISTS ").append(stable).append("("); sb.append(tsColName).append(" ").append("TIMESTAMP,"); - for (String fieldName : fieldList) { + for (int i = 0; i < fieldList.size(); ++i) { + String fieldName = fieldList.get(i); + Column.Type dxType = fieldTypes.get(i); sb.append(fieldName).append(' '); - Column col = record.getColumn(fieldIndexMap.get(fieldName)); - String tdType = mapDataxType(col.getType()); + String tdType = mapDataxType(dxType); sb.append(tdType).append(','); } sb.deleteCharAt(sb.length() - 1); @@ -209,10 +210,22 @@ public class SchemaManager { int tagIndex = tagIndexMap.get(tagList.get(i)); tagValues[i] = record.getColumn(tagIndex).asString(); } + if (tagValues[i] == null) { + return null; + } } return tagValues; } + public boolean hasTimestamp(Record record) { + Column column = record.getColumn(tsColIndex); + if (column.getType() == Column.Type.DATE && column.asDate() != null) { + return true; + } else { + return false; + } + } + public Map getFieldIndexMap() { return fieldIndexMap; } @@ -252,4 +265,8 @@ public class SchemaManager { String s = String.join("!", tagValues); return "t_" + DigestUtils.md5Hex(s); } + + public int getDynamicTagCount() { + return tagIndexMap.size(); + } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java index 70ea5737..cd223792 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -74,7 +74,7 @@ public class TDengineWriter extends Writer { String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); LOG.debug("start to handle record from: " + peerPluginName); DataHandler handler = DataHandlerFactory.build(peerPluginName); - long records = handler.handle(lineReceiver, properties); + long records = handler.handle(lineReceiver, properties, getTaskPluginCollector()); LOG.debug("handle data finished, records: " + records); } diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java index 43928db9..62bf7040 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.sql.Statement; public class TDengineWriterTest { @@ -18,4 +19,13 @@ public class TDengineWriterTest { schemaManager.setStable("test1"); schemaManager.getFromDB(conn); } + + @Test + public void dropTestTable() throws ClassNotFoundException, SQLException { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); + Connection conn = DriverManager.getConnection(jdbcUrl); + Statement stmt = conn.createStatement(); + stmt.execute("drop table market_snapshot"); + } } From 75d4f7e101bc17bf0427acc7efcdafb4648642ff Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 18 Nov 2021 19:08:19 +0800 Subject: [PATCH 080/251] mongodb2tdengine check records count before flush --- .../datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java index 21974e93..3b1f860b 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -218,7 +218,11 @@ public class JDBCBatchWriter { break; } } - initFiledTypesAndTargetTable(records); + if (records.size() > 0) { + initFiledTypesAndTargetTable(records); + } else { + return; + } } for (String tabName : buf.keySet()) { if (buf.get(tabName).size() > 0) { From 485d2d881593aaadc0ad39c95aa215e88d2f38db Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 18 Nov 2021 20:18:40 +0800 Subject: [PATCH 081/251] mongodb2tdengine typo --- tdenginewriter/doc/tdenginewriter.md | 2 +- .../datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java | 1 - .../datax/plugin/writer/tdenginewriter/SchemaManager.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 9ab64a2d..715080c1 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -197,7 +197,7 @@ CREATE STABLE IF NOT EXISTS market_snapshot ( ) TAGS( industry NCHAR(64), - stockID NCHAR(64 + stockID NCHAR(64) ); ``` diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java index 3b1f860b..279e6ed3 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -3,7 +3,6 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.AbstractTaskPlugin; import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.taosdata.jdbc.TSDBPreparedStatement; import org.slf4j.Logger; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index 21b8ef01..22c8a44f 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -48,7 +48,7 @@ public class SchemaManager { case BOOL: return "BOOL"; case BYTES: - return "BINARY"; + return "BINARY(64)"; default: throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, type.toString()); } From be78295e116f6b2c98e65bb76c3d5cf2b71f2578 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 18 Nov 2021 22:57:53 +0800 Subject: [PATCH 082/251] mongodb2tdengine typo --- tdenginewriter/doc/tdenginewriter.md | 4 ++-- .../datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 715080c1..432b1fb2 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -305,7 +305,7 @@ TAGS( ### 一张源表导入之后对应TDengine中多少张表? -这是又tagColumn决定的,如果所有tag列的值都相同,目标表也只有一个。源表有多少不同的tag组合,目标超表就会有多少子表。 +这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超表就有多少子表。 ### 源表和目标表的字段顺序一致吗? @@ -313,4 +313,4 @@ TDengine要求每个表第一列是时间戳列,后边是普通字段,最后 ### 插件如何确定各列的数据类型? -抽样收到的第一批数据自动推断各列的类型。schema是从数据来的,因此要保障“好的”数据占大多数。 \ No newline at end of file +根据收到的第一批数据自动推断各列的类型。 \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java index 279e6ed3..20065a70 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -41,7 +41,7 @@ public class JDBCBatchWriter { private long sucCount = 0; private final int tsColIndex; private List fieldList; - // 每个record至少应该包含的列数,用于检测数据 + // 每个record至少应该包含的列数,用于校验数据 private int minColNum = 0; private Map fieldIndexMap; private List fieldTypes = null; From e5c3fed1a939e8006911a423f7559ff5b7428a1c Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 19 Nov 2021 14:20:37 +0800 Subject: [PATCH 083/251] i18n support for some import log messages --- .../tdenginewriter/DefaultDataHandler.java | 7 ++++-- .../tdenginewriter/JDBCBatchWriter.java | 12 ++++++--- .../plugin/writer/tdenginewriter/Msg.java | 20 +++++++++++++++ .../writer/tdenginewriter/SchemaManager.java | 13 +++++----- .../resources/tdenginewritermsg.properties | 6 +++++ .../tdenginewritermsg_en_US.properties | 6 +++++ .../tdenginewritermsg_zh_CN.properties | 6 +++++ .../writer/tdenginewriter/MessageTest.java | 25 +++++++++++++++++++ 8 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg.properties create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 9250910a..91c2b7e3 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -17,6 +17,7 @@ import java.util.Properties; */ public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + static { try { Class.forName("com.taosdata.jdbc.TSDBDriver"); @@ -38,7 +39,8 @@ public class DefaultDataHandler implements DataHandler { return 0; } if (schemaManager.shouldGuessSchema()) { - LOG.info("无法从配置文件获取表结构信息,尝试从数据库获取"); + // 无法从配置文件获取表结构信息,尝试从数据库获取 + LOG.info(Msg.get("try_get_schema_from_db")); boolean success = schemaManager.getFromDB(conn); if (!success) { return 0; @@ -48,7 +50,8 @@ public class DefaultDataHandler implements DataHandler { } int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, "1000")); if (batchSize < 5) { - LOG.error("batchSize太小,会增加自动类型推断错误的概率,建议改大后重试"); + // batchSize太小,会增加自动类型推断错误的概率,建议改大后重试 + LOG.error(Msg.get("batch_size_too_small")); return 0; } return write(lineReceiver, conn, batchSize, schemaManager, collector); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java index 20065a70..53ab9bb9 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -72,16 +72,19 @@ public class JDBCBatchWriter { public void append(Record record) throws SQLException { int columnNum = record.getColumnNumber(); if (columnNum < minColNum) { - collector.collectDirtyRecord(record, "实际列数小于期望列数"); + // 实际列数小于期望列数 + collector.collectDirtyRecord(record, Msg.get("column_number_error")); return; } String[] tagValues = scm.getTagValuesFromRecord(record); if (tagValues == null) { - collector.collectDirtyRecord(record, "标签列包含null"); + // 标签列包含null + collector.collectDirtyRecord(record, Msg.get("tag_value_error")); return; } if (!scm.hasTimestamp(record)) { - collector.collectDirtyRecord(record, "时间戳列为null或类型错误"); + // 时间戳列为null或类型错误 + collector.collectDirtyRecord(record, Msg.get("ts_value_error")); return; } String tableName = scm.computeTableName(tagValues); @@ -140,7 +143,8 @@ public class JDBCBatchWriter { } } if (!ok) { - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, String.format("根据采样的%d条数据,无法推断第%d列的数据类型", records.size(), i + 1)); + // 根据采样的%d条数据,无法推断第%d列的数据类型 + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, String.format(Msg.get("infer_column_type_error"), records.size(), i + 1)); } } LOG.info("Field Types: {}", fieldTypes); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java new file mode 100644 index 00000000..89730d35 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java @@ -0,0 +1,20 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import java.util.Locale; +import java.util.ResourceBundle; + +/** + * i18n message util + */ +public class Msg { + private static ResourceBundle bundle; + + static { + bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); + } + + public static String get(String key) { + return bundle.getString(key); + } + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index 22c8a44f..d67a6585 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -65,7 +65,7 @@ public class SchemaManager { private void getFromConfig(Properties properties) { stable = properties.getProperty(Key.STABLE); if (stable == null) { - LOG.error("配置错误: no stable"); + LOG.error("Config error: no stable"); return; } for (Object key : properties.keySet()) { @@ -98,7 +98,7 @@ public class SchemaManager { List sortedFieldName = fieldIndexMap.entrySet().stream().sorted((x, y) -> x.getValue().compareTo(y.getValue())).map(e -> e.getKey()).collect(Collectors.toList()); fieldList.addAll(sortedFieldName); // 排序的目的是保证自动建表时列的顺序和输入数据的列的顺序保持一致 canInferSchemaFromConfig = tsColIndex > -1 && !(fixedTagValue.isEmpty() && tagIndexMap.isEmpty()) && !fieldIndexMap.isEmpty(); - LOG.info("配置文件解析结果:fixedTags=[{}] ,tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", fixedTagValue.keySet()), String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + LOG.info("Config file parsed result:fixedTags=[{}] ,tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", fixedTagValue.keySet()), String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); } public boolean shouldGuessSchema() { @@ -112,8 +112,7 @@ public class SchemaManager { public boolean configValid() { boolean valid = (tagList.size() > 0 && fieldList.size() > 0 && tsColIndex > -1) || (tagList.size() == 0 && fieldList.size() == 0 && tsColIndex == -1); if (!valid) { - LOG.error("配置错误. tag_columns,field_columns,timestamp_column必须同时存在或同时省略,当前解析结果: tag_columns: {}, field_columns:{}, timestamp_column:{} tsColIndex:{}", - (fixedTagValue.size() + tagIndexMap.size()), fieldIndexMap.size(), tsColName, tsColIndex); + LOG.error("Config error: tagColumn, fieldColumn and timestampColumn must be present together or absent together."); } return valid; } @@ -128,7 +127,7 @@ public class SchemaManager { try { List stables = getSTables(conn); if (!stables.contains(stable)) { - LOG.error("超级表{}不存在,无法从数据库获取表结构信息.", stable); + LOG.error("super table {} not exist, fail to get schema from database.", stable); return false; } } catch (SQLException e) { @@ -155,7 +154,7 @@ public class SchemaManager { } colIndex++; } - LOG.info("从数据库获取的表结构概要:tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + LOG.info("table info:tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); return true; } catch (SQLException e) { LOG.error(e.getMessage()); @@ -195,7 +194,7 @@ public class SchemaManager { sb.deleteCharAt(sb.length() - 1); sb.append(")"); String q = sb.toString(); - LOG.info("自动创建超级表:" + q); + LOG.info("run sql:" + q); try (Statement stmt = conn.createStatement()) { stmt.execute(q); } diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg.properties b/tdenginewriter/src/main/resources/tdenginewritermsg.properties new file mode 100644 index 00000000..4aaa220b --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +batch_size_too_small='batchSize' is too small, please increase it and try again +column_number_error=number of columns is less than expected +tag_value_error=tag columns include 'null' value +ts_value_error=timestamp column type error or null +infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties new file mode 100644 index 00000000..4aaa220b --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +batch_size_too_small='batchSize' is too small, please increase it and try again +column_number_error=number of columns is less than expected +tag_value_error=tag columns include 'null' value +ts_value_error=timestamp column type error or null +infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties new file mode 100644 index 00000000..4b9552fd --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6587\u4ef6\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u5c1d\u8bd5\u4ece\u6570\u636e\u5e93\u83b7\u53d6 +batch_size_too_small=batchSize\u592a\u5c0f\uff0c\u4f1a\u589e\u52a0\u81ea\u52a8\u7c7b\u578b\u63a8\u65ad\u9519\u8bef\u7684\u6982\u7387\uff0c\u5efa\u8bae\u6539\u5927\u540e\u91cd\u8bd5 +column_number_error=\u5b9e\u9645\u5217\u6570\u5c0f\u4e8e\u671f\u671b\u5217\u6570 +tag_value_error=\u6807\u7b7e\u5217\u5305\u542bnull +ts_value_error=\u65f6\u95f4\u6233\u5217\u4e3anull\u6216\u7c7b\u578b\u9519\u8bef +infer_column_type_error=\u6839\u636e\u91c7\u6837\u7684%d\u6761\u6570\u636e\uff0c\u65e0\u6cd5\u63a8\u65ad\u7b2c%d\u5217\u7684\u6570\u636e\u7c7b\u578b diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java new file mode 100644 index 00000000..b1b7ddd8 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java @@ -0,0 +1,25 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.Test; + +import java.util.Locale; +import java.util.ResourceBundle; + +import org.junit.Assert; + +public class MessageTest { + @Test + public void testChineseMessage() { + Locale local = new Locale("zh", "CN"); + ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", local); + String msg = bundle.getString("try_get_schema_fromdb"); + Assert.assertEquals("无法从配置文件获取表结构信息,尝试从数据库获取", msg); + } + + @Test + public void testDefaultMessage() { + ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); + String msg = bundle.getString("try_get_schema_fromdb"); + System.out.println(msg); + } +} From b47cdaf217dafa3ff84b8a289b13fc5e190901b5 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 19 Nov 2021 14:23:24 +0800 Subject: [PATCH 084/251] use plain user name in demo config file --- core/src/main/job/mongodb2tdengine.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/job/mongodb2tdengine.json b/core/src/main/job/mongodb2tdengine.json index 45e5a640..49e04c11 100644 --- a/core/src/main/job/mongodb2tdengine.json +++ b/core/src/main/job/mongodb2tdengine.json @@ -13,9 +13,9 @@ "address": [ "127.0.0.1:27017" ], - "userName": "admin678", + "userName": "mongouser", "mechanism": "SCRAM-SHA-1", - "userPassword": "huwG86123", + "userPassword": "mongopass", "authDb": "admin", "dbName": "test", "collectionName": "cu_market_data", From 17c39b11bac472f6a0bac1495a92aed45c602766 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 19 Nov 2021 16:38:55 +0800 Subject: [PATCH 085/251] migrate datax.py to python3, and compatible with python2 --- core/src/main/bin/datax.py | 114 +++++++++++++++++++++---------------- userGuid.md | 2 +- 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/core/src/main/bin/datax.py b/core/src/main/bin/datax.py index 1099ed3a..4811ae8d 100755 --- a/core/src/main/bin/datax.py +++ b/core/src/main/bin/datax.py @@ -1,23 +1,26 @@ #!/usr/bin/env python # -*- coding:utf-8 -*- -import sys -import os -import signal -import subprocess -import time -import re -import socket -import json -from optparse import OptionParser -from optparse import OptionGroup -from string import Template import codecs +import json +import os import platform +import re +import signal +import socket +import subprocess +import sys +import time +from optparse import OptionGroup +from optparse import OptionParser +from string import Template + +ispy2 = sys.version_info.major == 2 def isWindows(): return platform.system() == 'Windows' + DATAX_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DATAX_VERSION = 'DATAX-OPENSOURCE-3.0' @@ -52,13 +55,19 @@ def getLocalIp(): def suicide(signum, e): global child_process - print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + if ispy2: + print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + else: + print("[Error] DataX receive unexpected signal %d, starts to suicide." % (signum), sys.stderr) if child_process: child_process.send_signal(signal.SIGQUIT) time.sleep(1) child_process.kill() - print >> sys.stderr, "DataX Process was killed ! you did ?" + if ispy2: + print >> sys.stderr, "DataX Process was killed ! you did ?" + else: + print("DataX Process was killed ! you did ?", sys.stderr) sys.exit(RET_STATE["KILL"]) @@ -92,10 +101,10 @@ def getOptionParser(): 'if you have mutiple parameters: -p"-DtableName=your-table-name -DcolumnName=your-column-name".' 'Note: you should config in you job tableName with ${tableName}.') prodEnvOptionGroup.add_option("-r", "--reader", metavar="", - action="store", dest="reader",type="string", + action="store", dest="reader", type="string", help='View job config[reader] template, eg: mysqlreader,streamreader') prodEnvOptionGroup.add_option("-w", "--writer", metavar="", - action="store", dest="writer",type="string", + action="store", dest="writer", type="string", help='View job config[writer] template, eg: mysqlwriter,streamwriter') parser.add_option_group(prodEnvOptionGroup) @@ -108,45 +117,50 @@ def getOptionParser(): parser.add_option_group(devEnvOptionGroup) return parser + def generateJobConfigTemplate(reader, writer): - readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % (reader,reader,reader) - writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % (writer,writer,writer) - print readerRef - print writerRef + readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % ( + reader, reader, reader) + writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % ( + writer, writer, writer) + print(readerRef) + print(writerRef) jobGuid = 'Please save the following configuration as a json file and use\n python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json \nto run the job.\n' - print jobGuid - jobTemplate={ - "job": { - "setting": { - "speed": { - "channel": "" - } - }, - "content": [ - { - "reader": {}, - "writer": {} - } - ] - } + print(jobGuid) + jobTemplate = { + "job": { + "setting": { + "speed": { + "channel": "" + } + }, + "content": [ + { + "reader": {}, + "writer": {} + } + ] + } } - readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME,reader) - writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME,writer) + readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME, reader) + writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME, writer) try: - readerPar = readPluginTemplate(readerTemplatePath); - except Exception, e: - print "Read reader[%s] template error: can\'t find file %s" % (reader,readerTemplatePath) + readerPar = readPluginTemplate(readerTemplatePath) + except: + print("Read reader[%s] template error: can\'t find file %s" % (reader, readerTemplatePath)) try: - writerPar = readPluginTemplate(writerTemplatePath); - except Exception, e: - print "Read writer[%s] template error: : can\'t find file %s" % (writer,writerTemplatePath) - jobTemplate['job']['content'][0]['reader'] = readerPar; - jobTemplate['job']['content'][0]['writer'] = writerPar; - print json.dumps(jobTemplate, indent=4, sort_keys=True) + writerPar = readPluginTemplate(writerTemplatePath) + except: + print("Read writer[%s] template error: : can\'t find file %s" % (writer, writerTemplatePath)) + jobTemplate['job']['content'][0]['reader'] = readerPar + jobTemplate['job']['content'][0]['writer'] = writerPar + print(json.dumps(jobTemplate, indent=4, sort_keys=True)) + def readPluginTemplate(plugin): with open(plugin, 'r') as f: - return json.load(f) + return json.load(f) + def isUrl(path): if not path: @@ -168,7 +182,7 @@ def buildStartCommand(options, args): if options.remoteDebug: tempJVMCommand = tempJVMCommand + " " + REMOTE_DEBUG_CONFIG - print 'local ip: ', getLocalIp() + print('local ip: ', getLocalIp()) if options.loglevel: tempJVMCommand = tempJVMCommand + " " + ("-Dloglevel=%s" % (options.loglevel)) @@ -198,11 +212,11 @@ def buildStartCommand(options, args): def printCopyright(): - print ''' + print(''' DataX (%s), From Alibaba ! Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved. -''' % DATAX_VERSION +''' % DATAX_VERSION) sys.stdout.flush() @@ -211,7 +225,7 @@ if __name__ == "__main__": parser = getOptionParser() options, args = parser.parse_args(sys.argv[1:]) if options.reader is not None and options.writer is not None: - generateJobConfigTemplate(options.reader,options.writer) + generateJobConfigTemplate(options.reader, options.writer) sys.exit(RET_STATE['OK']) if len(args) != 1: parser.print_help() diff --git a/userGuid.md b/userGuid.md index 153c8111..16771a5e 100644 --- a/userGuid.md +++ b/userGuid.md @@ -10,7 +10,7 @@ DataX本身作为数据同步框架,将不同数据源的同步抽象为从源 - Linux - [JDK(1.8以上,推荐1.8) ](http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html) -- [Python(推荐Python2.6.X) ](https://www.python.org/downloads/) +- [Python(2或3都可以) ](https://www.python.org/downloads/) - [Apache Maven 3.x](https://maven.apache.org/download.cgi) (Compile DataX) # Quick Start From 24952af5c3a3b9cfa5be4ac5b3bb2860bab6a868 Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 08:56:57 +0800 Subject: [PATCH 086/251] create test case --- .../datax/core/TestMysql2TDengine.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java new file mode 100644 index 00000000..aeb05071 --- /dev/null +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -0,0 +1,20 @@ +package com.alibaba.datax.core; + + +import org.junit.Test; + +public class TestMysql2TDengine { + + @Test + public void test() { + System.out.println(System.getProperty("java.library.path")); + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/main/job/mysql2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file From 93a3369eb6346607ad1fdca7055f6e72645b96f3 Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 17:34:44 +0800 Subject: [PATCH 087/251] prepare test data and add test case --- core/pom.xml | 12 +++ core/src/main/job/mysql2tdengine.json | 24 +++-- .../datax/core/TestMysql2TDengine.java | 99 ++++++++++++++++++- 3 files changed, 128 insertions(+), 7 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 174a18d3..3981cfcc 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -97,6 +97,18 @@ groovy-all 2.1.9 + + mysql + mysql-connector-java + ${mysql.driver.version} + test + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + test +
diff --git a/core/src/main/job/mysql2tdengine.json b/core/src/main/job/mysql2tdengine.json index 7978fbf5..c936aa36 100644 --- a/core/src/main/job/mysql2tdengine.json +++ b/core/src/main/job/mysql2tdengine.json @@ -6,18 +6,18 @@ "name": "mysqlreader", "parameter": { "username": "root", - "password": "123456", + "password": "passw0rd", "column": [ "*" ], - "splitPk": "f1", + "splitPk": "station", "connection": [ { "table": [ "weather" ], "jdbcUrl": [ - "jdbc:mysql://192.168.56.105:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" ] } ] @@ -26,13 +26,25 @@ "writer": { "name": "tdenginewriter", "parameter": { - "host": "192.168.56.105", + "host": "127.0.0.1", "port": 6030, "dbname": "test", "user": "root", "password": "taosdata", - "table": "weather", - "batchSize": 1000 + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } } } } diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java index aeb05071..6edc185c 100644 --- a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -1,10 +1,105 @@ package com.alibaba.datax.core; - +import org.junit.After; +import org.junit.Before; import org.junit.Test; +import java.sql.*; +import java.util.*; +import java.util.Date; + +/** + * 测试从mysql到TD + */ public class TestMysql2TDengine { + @Test + public void genTestData() throws ClassNotFoundException, SQLException { + Class.forName("com.mysql.jdbc.Driver"); + + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + PreparedStatement pstmt = null; + + try { + conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql?" + + "user=root&password=passw0rd"); + stmt = conn.createStatement(); + stmt.execute("create database if not exists test"); + stmt.execute("use test"); + stmt.execute("drop table weather"); + stmt.execute("CREATE TABLE IF NOT EXISTS weather(station varchar(100), latitude DOUBLE, longtitude DOUBLE, `date` DATETIME, tmax INT, tmin INT)"); + pstmt = conn.prepareStatement("insert into weather(station, latitude, longtitude, `date`, tmax, tmin) values (?, ?, ?, ?, ?, ?)"); + genRandomData(pstmt); + } finally { + if (rs != null) { + try { + rs.close(); + } catch (SQLException sqlEx) { + } // ignore + + rs = null; + } + + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException sqlEx) { + } // ignore + + stmt = null; + } + + if (pstmt != null) { + pstmt.close(); + } + } + + } + + private void genRandomData(PreparedStatement psmt) throws SQLException { + Random random = new Random(); + Calendar calendar = Calendar.getInstance(); + calendar.set(1990, 0, 1, 1, 0, 0); + List stations = Arrays.asList("STA", "STB", "STC"); + for (int i = 0; i < (10 * 100 * 24); i++) { + for (int j = 0; j < 3; j++) { + psmt.setString(1, stations.get(j)); + psmt.setDouble(2, random.nextDouble() * 1000); + psmt.setDouble(3, random.nextDouble() * 1000); + psmt.setTimestamp(4, new java.sql.Timestamp(calendar.getTime().getTime())); + psmt.setInt(5, random.nextInt(100)); + psmt.setInt(6, random.nextInt(100)); + psmt.addBatch(); + } + calendar.add(Calendar.MINUTE, 60); + if (i % 1000 == 0) { + psmt.executeBatch(); + } + } + psmt.executeBatch(); + } + + @Test + public void prepareTDengine() throws ClassNotFoundException, SQLException { + Class.forName("com.mysql.jdbc.Driver"); + + Connection conn = null; + Statement stmt = null; + + try { + conn = DriverManager.getConnection("jdbc:TAOS://127.0.0.1:6030/log?user=root&password=taosdata"); + stmt = conn.createStatement(); + stmt.execute("create database if not exists test"); + stmt.execute("drop stable if exists test.weather"); + } finally { + if (stmt != null) { + stmt.close(); + } + } + } + @Test public void test() { System.out.println(System.getProperty("java.library.path")); @@ -17,4 +112,6 @@ public class TestMysql2TDengine { } } + + } \ No newline at end of file From 9b2d33b6e1761385d4bb8528409a64e7102bd9aa Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 18:48:04 +0800 Subject: [PATCH 088/251] test case bug fix --- .../com/alibaba/datax/core/TestMysql2TDengine.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java index 6edc185c..026b1db2 100644 --- a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -1,12 +1,12 @@ package com.alibaba.datax.core; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import java.sql.*; -import java.util.*; -import java.util.Date; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; /** * 测试从mysql到TD @@ -78,6 +78,7 @@ public class TestMysql2TDengine { psmt.executeBatch(); } } + // 有部分重复数据,不影响测试 psmt.executeBatch(); } @@ -91,7 +92,8 @@ public class TestMysql2TDengine { try { conn = DriverManager.getConnection("jdbc:TAOS://127.0.0.1:6030/log?user=root&password=taosdata"); stmt = conn.createStatement(); - stmt.execute("create database if not exists test"); + stmt.execute("drop database if exists test"); + stmt.execute("create database if not exists test keep 36500"); stmt.execute("drop stable if exists test.weather"); } finally { if (stmt != null) { From 5cc0fa3b1709441c42ac3e29bb09df39fe09b21b Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 18:48:31 +0800 Subject: [PATCH 089/251] add mysql config demo to doc --- tdenginewriter/doc/tdenginewriter.md | 96 ++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 7 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 432b1fb2..062fac2c 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -181,8 +181,8 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | fieldColumn | 字段列的列名和位置 | 否 | 无 | | | timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | -#### 3.3.3 自动建表规则 -##### 3.3.3.1 超级表创建规则 +#### 3.2.3 自动建表规则 +##### 3.2.3.1 超级表创建规则 如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: @@ -201,14 +201,14 @@ TAGS( ); ``` -##### 3.3.3.2 子表创建规则 +##### 3.2.3.2 子表创建规则 子表结果与超表相同,子表表名生成规则: 1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 2. 计算该字符串的 MD5 散列值 "md5_val"。 3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 -#### 3.3.4 用户提前建表 +#### 3.2.4 用户提前建表 如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: @@ -221,13 +221,13 @@ TAGS( ``` 那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 -#### 3.3.5 注意事项 +#### 3.2.5 注意事项 1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 3. 插件优先使用配置文件中指定的表结构。 -#### 3.3.6 类型转换 +#### 3.2.6 类型转换 | MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | | ---------------- | -------------- | ----------------- | @@ -238,6 +238,84 @@ TAGS( | boolean | Boolean | BOOL | | bytes | Bytes | BINARY | +### 3.3 从关系型数据库到TDengine +writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 + +#### 3.3.1 MySQL中表结构 +```sql +CREATE TABLE IF NOT EXISTS weather( + station varchar(100), + latitude DOUBLE, + longtitude DOUBLE, + `date` DATE, + TMAX int, + TMIN int +) +``` + +#### 3.3.2 配置文件示例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "passw0rd", + "column": [ + "*" + ], + "splitPk": "station", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + ## 4 性能报告 @@ -313,4 +391,8 @@ TDengine要求每个表第一列是时间戳列,后边是普通字段,最后 ### 插件如何确定各列的数据类型? -根据收到的第一批数据自动推断各列的类型。 \ No newline at end of file +根据收到的第一批数据自动推断各列的类型。 + +### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? + +因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file From 1bc24bfbd04229853e0de46a66bd4cfb7e96be14 Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 18:55:29 +0800 Subject: [PATCH 090/251] update global readme add TDengine --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 37a21022..9d18a0a9 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,8 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | | FTP | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ftpreader/doc/ftpreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/ftpwriter/doc/ftpwriter.md)| | | HDFS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hdfsreader/doc/hdfsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md)| | | Elasticsearch | | √ |[写](https://github.com/alibaba/DataX/blob/master/elasticsearchwriter/doc/elasticsearchwriter.md)| -| 时间序列数据库 | OpenTSDB | √ | |[读](https://github.com/alibaba/DataX/blob/master/opentsdbreader/doc/opentsdbreader.md)| +| 时间序列数据库 | TDengine | √ | √ |[读](https://github.com/taosdata/DataX/blob/master/tdenginereader/doc/tdenginereader.md) 、[写](https://github.com/taosdata/DataX/blob/master/tdenginewriter/doc/tdenginewriter.md)| +| | OpenTSDB | √ | |[读](https://github.com/alibaba/DataX/blob/master/opentsdbreader/doc/opentsdbreader.md)| | | TSDB | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/tsdbreader/doc/tsdbreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/tsdbwriter/doc/tsdbhttpwriter.md)| # 阿里云DataWorks数据集成 From f8aa7e90943f52b7a3c94d0ae0badb7f135105fe Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 23 Nov 2021 19:11:27 +0800 Subject: [PATCH 091/251] typo --- .../test/java/com/alibaba/datax/core/TestMysql2TDengine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java index 026b1db2..c86f1776 100644 --- a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -9,7 +9,7 @@ import java.util.List; import java.util.Random; /** - * 测试从mysql到TD + * 测试从mysql到TDengine */ public class TestMysql2TDengine { From a52b1909ca77e24490d7e4588b964bfbeee5cfce Mon Sep 17 00:00:00 2001 From: dingbo Date: Wed, 24 Nov 2021 07:58:25 +0800 Subject: [PATCH 092/251] no need to load driver class explicitly --- .../datax/core/TestMysql2TDengine.java | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java index c86f1776..cab0629f 100644 --- a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -14,12 +14,9 @@ import java.util.Random; public class TestMysql2TDengine { @Test - public void genTestData() throws ClassNotFoundException, SQLException { - Class.forName("com.mysql.jdbc.Driver"); - - Connection conn = null; + public void genTestData() throws SQLException { + Connection conn; Statement stmt = null; - ResultSet rs = null; PreparedStatement pstmt = null; try { @@ -33,15 +30,6 @@ public class TestMysql2TDengine { pstmt = conn.prepareStatement("insert into weather(station, latitude, longtitude, `date`, tmax, tmin) values (?, ?, ?, ?, ?, ?)"); genRandomData(pstmt); } finally { - if (rs != null) { - try { - rs.close(); - } catch (SQLException sqlEx) { - } // ignore - - rs = null; - } - if (stmt != null) { try { stmt.close(); @@ -53,6 +41,7 @@ public class TestMysql2TDengine { if (pstmt != null) { pstmt.close(); + pstmt = null; } } @@ -83,10 +72,8 @@ public class TestMysql2TDengine { } @Test - public void prepareTDengine() throws ClassNotFoundException, SQLException { - Class.forName("com.mysql.jdbc.Driver"); - - Connection conn = null; + public void prepareTDengine() throws SQLException { + Connection conn; Statement stmt = null; try { @@ -115,5 +102,4 @@ public class TestMysql2TDengine { } - } \ No newline at end of file From 64ba5e91a58b2525e072e43e07663f661e1dd92d Mon Sep 17 00:00:00 2001 From: dingbo Date: Wed, 24 Nov 2021 09:20:49 +0800 Subject: [PATCH 093/251] remove comment --- .../src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java index cab0629f..4aaad646 100644 --- a/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java +++ b/core/src/test/java/com/alibaba/datax/core/TestMysql2TDengine.java @@ -67,7 +67,6 @@ public class TestMysql2TDengine { psmt.executeBatch(); } } - // 有部分重复数据,不影响测试 psmt.executeBatch(); } From c2027ed102085f6e789f77ef1342a7df1dc750f4 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 19 Nov 2021 16:38:55 +0800 Subject: [PATCH 094/251] migrate datax.py to python3, and compatible with python2 --- core/src/main/bin/datax.py | 114 +++++++++++++++++++++---------------- userGuid.md | 2 +- 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/core/src/main/bin/datax.py b/core/src/main/bin/datax.py index 1099ed3a..4811ae8d 100755 --- a/core/src/main/bin/datax.py +++ b/core/src/main/bin/datax.py @@ -1,23 +1,26 @@ #!/usr/bin/env python # -*- coding:utf-8 -*- -import sys -import os -import signal -import subprocess -import time -import re -import socket -import json -from optparse import OptionParser -from optparse import OptionGroup -from string import Template import codecs +import json +import os import platform +import re +import signal +import socket +import subprocess +import sys +import time +from optparse import OptionGroup +from optparse import OptionParser +from string import Template + +ispy2 = sys.version_info.major == 2 def isWindows(): return platform.system() == 'Windows' + DATAX_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DATAX_VERSION = 'DATAX-OPENSOURCE-3.0' @@ -52,13 +55,19 @@ def getLocalIp(): def suicide(signum, e): global child_process - print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + if ispy2: + print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + else: + print("[Error] DataX receive unexpected signal %d, starts to suicide." % (signum), sys.stderr) if child_process: child_process.send_signal(signal.SIGQUIT) time.sleep(1) child_process.kill() - print >> sys.stderr, "DataX Process was killed ! you did ?" + if ispy2: + print >> sys.stderr, "DataX Process was killed ! you did ?" + else: + print("DataX Process was killed ! you did ?", sys.stderr) sys.exit(RET_STATE["KILL"]) @@ -92,10 +101,10 @@ def getOptionParser(): 'if you have mutiple parameters: -p"-DtableName=your-table-name -DcolumnName=your-column-name".' 'Note: you should config in you job tableName with ${tableName}.') prodEnvOptionGroup.add_option("-r", "--reader", metavar="", - action="store", dest="reader",type="string", + action="store", dest="reader", type="string", help='View job config[reader] template, eg: mysqlreader,streamreader') prodEnvOptionGroup.add_option("-w", "--writer", metavar="", - action="store", dest="writer",type="string", + action="store", dest="writer", type="string", help='View job config[writer] template, eg: mysqlwriter,streamwriter') parser.add_option_group(prodEnvOptionGroup) @@ -108,45 +117,50 @@ def getOptionParser(): parser.add_option_group(devEnvOptionGroup) return parser + def generateJobConfigTemplate(reader, writer): - readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % (reader,reader,reader) - writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % (writer,writer,writer) - print readerRef - print writerRef + readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % ( + reader, reader, reader) + writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % ( + writer, writer, writer) + print(readerRef) + print(writerRef) jobGuid = 'Please save the following configuration as a json file and use\n python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json \nto run the job.\n' - print jobGuid - jobTemplate={ - "job": { - "setting": { - "speed": { - "channel": "" - } - }, - "content": [ - { - "reader": {}, - "writer": {} - } - ] - } + print(jobGuid) + jobTemplate = { + "job": { + "setting": { + "speed": { + "channel": "" + } + }, + "content": [ + { + "reader": {}, + "writer": {} + } + ] + } } - readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME,reader) - writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME,writer) + readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME, reader) + writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME, writer) try: - readerPar = readPluginTemplate(readerTemplatePath); - except Exception, e: - print "Read reader[%s] template error: can\'t find file %s" % (reader,readerTemplatePath) + readerPar = readPluginTemplate(readerTemplatePath) + except: + print("Read reader[%s] template error: can\'t find file %s" % (reader, readerTemplatePath)) try: - writerPar = readPluginTemplate(writerTemplatePath); - except Exception, e: - print "Read writer[%s] template error: : can\'t find file %s" % (writer,writerTemplatePath) - jobTemplate['job']['content'][0]['reader'] = readerPar; - jobTemplate['job']['content'][0]['writer'] = writerPar; - print json.dumps(jobTemplate, indent=4, sort_keys=True) + writerPar = readPluginTemplate(writerTemplatePath) + except: + print("Read writer[%s] template error: : can\'t find file %s" % (writer, writerTemplatePath)) + jobTemplate['job']['content'][0]['reader'] = readerPar + jobTemplate['job']['content'][0]['writer'] = writerPar + print(json.dumps(jobTemplate, indent=4, sort_keys=True)) + def readPluginTemplate(plugin): with open(plugin, 'r') as f: - return json.load(f) + return json.load(f) + def isUrl(path): if not path: @@ -168,7 +182,7 @@ def buildStartCommand(options, args): if options.remoteDebug: tempJVMCommand = tempJVMCommand + " " + REMOTE_DEBUG_CONFIG - print 'local ip: ', getLocalIp() + print('local ip: ', getLocalIp()) if options.loglevel: tempJVMCommand = tempJVMCommand + " " + ("-Dloglevel=%s" % (options.loglevel)) @@ -198,11 +212,11 @@ def buildStartCommand(options, args): def printCopyright(): - print ''' + print(''' DataX (%s), From Alibaba ! Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved. -''' % DATAX_VERSION +''' % DATAX_VERSION) sys.stdout.flush() @@ -211,7 +225,7 @@ if __name__ == "__main__": parser = getOptionParser() options, args = parser.parse_args(sys.argv[1:]) if options.reader is not None and options.writer is not None: - generateJobConfigTemplate(options.reader,options.writer) + generateJobConfigTemplate(options.reader, options.writer) sys.exit(RET_STATE['OK']) if len(args) != 1: parser.print_help() diff --git a/userGuid.md b/userGuid.md index 153c8111..16771a5e 100644 --- a/userGuid.md +++ b/userGuid.md @@ -10,7 +10,7 @@ DataX本身作为数据同步框架,将不同数据源的同步抽象为从源 - Linux - [JDK(1.8以上,推荐1.8) ](http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html) -- [Python(推荐Python2.6.X) ](https://www.python.org/downloads/) +- [Python(2或3都可以) ](https://www.python.org/downloads/) - [Apache Maven 3.x](https://maven.apache.org/download.cgi) (Compile DataX) # Quick Start From 9587f9b93be0833b35d512649fced60c9593c4a2 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 11 Nov 2021 15:24:09 +0800 Subject: [PATCH 095/251] add option authDB to mongodb reader doc --- mongodbreader/doc/mongodbreader.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mongodbreader/doc/mongodbreader.md b/mongodbreader/doc/mongodbreader.md index b61493e6..99d25731 100644 --- a/mongodbreader/doc/mongodbreader.md +++ b/mongodbreader/doc/mongodbreader.md @@ -127,6 +127,7 @@ MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的J * address: MongoDB的数据地址信息,因为MonogDB可能是个集群,则ip端口信息需要以Json数组的形式给出。【必填】 * userName:MongoDB的用户名。【选填】 * userPassword: MongoDB的密码。【选填】 +* authDb: MongoDB认证数据库【选填】 * collectionName: MonogoDB的集合名。【必填】 * column:MongoDB的文档列名。【必填】 * name:Column的名字。【必填】 From ef6c53e7e22c74efc2b03dd1babad21bef501e18 Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 29 Nov 2021 13:15:49 +0800 Subject: [PATCH 096/251] add tdengine weriter --- tdenginewriter/doc/tdenginewriter.md | 398 ++++++++++++++++++ tdenginewriter/pom.xml | 107 +++++ tdenginewriter/src/main/assembly/package.xml | 34 ++ .../writer/tdenginewriter/DataHandler.java | 12 + .../tdenginewriter/DataHandlerFactory.java | 10 + .../tdenginewriter/DefaultDataHandler.java | 105 +++++ .../tdenginewriter/JDBCBatchWriter.java | 244 +++++++++++ .../writer/tdenginewriter/JniConnection.java | 89 ++++ .../plugin/writer/tdenginewriter/Key.java | 14 + .../plugin/writer/tdenginewriter/Msg.java | 20 + .../tdenginewriter/OpentsdbDataHandler.java | 99 +++++ .../writer/tdenginewriter/SchemaManager.java | 271 ++++++++++++ .../writer/tdenginewriter/TDengineWriter.java | 91 ++++ .../TDengineWriterErrorCode.java | 32 ++ ...ugin_writer_tdenginewriter_JniConnection.h | 105 +++++ tdenginewriter/src/main/resources/plugin.json | 9 + .../main/resources/plugin_job_template.json | 10 + .../resources/tdenginewritermsg.properties | 6 + .../tdenginewritermsg_en_US.properties | 6 + .../tdenginewritermsg_zh_CN.properties | 6 + .../tdenginewriter/JniConnectionTest.java | 21 + .../writer/tdenginewriter/MessageTest.java | 25 ++ .../tdenginewriter/TDengineWriterTest.java | 31 ++ 23 files changed, 1745 insertions(+) create mode 100644 tdenginewriter/doc/tdenginewriter.md create mode 100644 tdenginewriter/pom.xml create mode 100644 tdenginewriter/src/main/assembly/package.xml create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h create mode 100644 tdenginewriter/src/main/resources/plugin.json create mode 100644 tdenginewriter/src/main/resources/plugin_job_template.json create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg.properties create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties create mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md new file mode 100644 index 00000000..062fac2c --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter.md @@ -0,0 +1,398 @@ +# DataX TDengineWriter + +## 1 快速介绍 + +TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 + +## 2 实现原理 + +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: + +1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 + +2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 + +这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 + +## 3 功能说明 +### 3.1 从OpenTSDB到TDengine +#### 3.1.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather_temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.1.180", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +#### 3.1.2 参数说明 + +| 参数 | 描述 | 是否必选 | 默认值 | +| --------- | -------------------- | -------- | -------- | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1 | + + +#### 3.1.3 类型转换 + +目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: + +| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | + +### 3.2 从MongoDB到TDengine + +#### 3.2.1 配置样例 +```json +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "127.0.0.1:27017" + ], + "userName": "user", + "mechanism": "SCRAM-SHA-1", + "userPassword": "password", + "authDb": "admin", + "dbName": "test", + "collectionName": "stock", + "column": [ + { + "name": "stockID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "localhost", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "stable": "stock", + "tagColumn": { + "industry": "energy", + "stockID": 0 + }, + "fieldColumn": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestampColumn": { + "tradeTime": 1 + } + } + } + } + ] + } +} +``` + +**注:本配置的writer部分同样适用于关系型数据库** + + +#### 3.2.2 参数说明 +| 参数 | 描述 | 是否必选 | 默认值 | 备注 | +| --------------- | -------------------- | ---------------- | -------- | ------------------ | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1000 | +| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | +| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | +| fieldColumn | 字段列的列名和位置 | 否 | 无 | | +| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | + +#### 3.2.3 自动建表规则 +##### 3.2.3.1 超级表创建规则 + +如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
+数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: + +```sql +CREATE STABLE IF NOT EXISTS market_snapshot ( + tadetime TIMESTAMP, + lastprice DOUBLE, + askprice1 DOUBLE, + bidprice1 DOUBLE, + volume INT +) +TAGS( + industry NCHAR(64), + stockID NCHAR(64) +); +``` + +##### 3.2.3.2 子表创建规则 + +子表结果与超表相同,子表表名生成规则: +1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 +2. 计算该字符串的 MD5 散列值 "md5_val"。 +3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 + +#### 3.2.4 用户提前建表 + +如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 +此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +``` + Field | Type | Length | Note | +================================================================================= + ts | TIMESTAMP | 8 | | + current | DOUBLE | 8 | | + location | BINARY | 10 | TAG | +``` +那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 + +#### 3.2.5 注意事项 + +1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 +2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 +3. 插件优先使用配置文件中指定的表结构。 + +#### 3.2.6 类型转换 + +| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| int, Long | Long | BIGINT | +| double | Double | DOUBLE | +| string, array | String | NCHAR(64) | +| date | Date | TIMESTAMP | +| boolean | Boolean | BOOL | +| bytes | Bytes | BINARY | + +### 3.3 从关系型数据库到TDengine +writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 + +#### 3.3.1 MySQL中表结构 +```sql +CREATE TABLE IF NOT EXISTS weather( + station varchar(100), + latitude DOUBLE, + longtitude DOUBLE, + `date` DATE, + TMAX int, + TMIN int +) +``` + +#### 3.3.2 配置文件示例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "passw0rd", + "column": [ + "*" + ], + "splitPk": "station", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | +| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | +| 1 | | | | | | | | +| 4 | | | | | | | | +| 8 | | | | | | | | +| 16 | | | | | | | | +| 32 | | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 +3. 16通道,4096批量提交时,出现 full gc 2次。 + +#### 4.2.4 性能测试小结 + + +## 5 约束限制 + +1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 +2. 标签列不能包含null值,如果包含会被过滤掉。 + +## FAQ + +### 如何选取要同步的数据的范围? + +数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 + +### 如何一次导入多张源表? + +如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 + +### 一张源表导入之后对应TDengine中多少张表? + +这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超表就有多少子表。 + +### 源表和目标表的字段顺序一致吗? + +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 + +### 插件如何确定各列的数据类型? + +根据收到的第一批数据自动推断各列的类型。 + +### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? + +因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml new file mode 100644 index 00000000..054f2ef8 --- /dev/null +++ b/tdenginewriter/pom.xml @@ -0,0 +1,107 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + com.alibaba.datax.tdenginewriter + tdenginewriter + 0.0.1-SNAPSHOT + + + 8 + 8 + + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + + + + junit + junit + ${junit-version} + test + + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginewriter/src/main/assembly/package.xml b/tdenginewriter/src/main/assembly/package.xml new file mode 100644 index 00000000..d3b75ea2 --- /dev/null +++ b/tdenginewriter/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/tdenginewriter + + + target/ + + tdenginewriter-0.0.1-SNAPSHOT.jar + + plugin/writer/tdenginewriter + + + + + + false + plugin/writer/tdenginewriter/libs + runtime + + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java new file mode 100644 index 00000000..dcc3ca8c --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -0,0 +1,12 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.plugin.RecordReceiver; + +import com.alibaba.datax.common.plugin.TaskPluginCollector; + +import java.util.Properties; + +public interface DataHandler { + + long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector); +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java new file mode 100644 index 00000000..1f740d7e --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java @@ -0,0 +1,10 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class DataHandlerFactory { + + public static DataHandler build(String peerPluginName) { + if (peerPluginName.equals("opentsdbreader")) + return new OpentsdbDataHandler(); + return new DefaultDataHandler(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java new file mode 100644 index 00000000..91c2b7e3 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -0,0 +1,105 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.taosdata.jdbc.TSDBPreparedStatement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +/** + * 默认DataHandler + */ +public class DefaultDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + @Override + public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { + SchemaManager schemaManager = new SchemaManager(properties); + if (!schemaManager.configValid()) { + return 0; + } + + try { + Connection conn = getTaosConnection(properties); + if (conn == null) { + return 0; + } + if (schemaManager.shouldGuessSchema()) { + // 无法从配置文件获取表结构信息,尝试从数据库获取 + LOG.info(Msg.get("try_get_schema_from_db")); + boolean success = schemaManager.getFromDB(conn); + if (!success) { + return 0; + } + } else { + + } + int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, "1000")); + if (batchSize < 5) { + // batchSize太小,会增加自动类型推断错误的概率,建议改大后重试 + LOG.error(Msg.get("batch_size_too_small")); + return 0; + } + return write(lineReceiver, conn, batchSize, schemaManager, collector); + } catch (Exception e) { + LOG.error("write failed " + e.getMessage()); + e.printStackTrace(); + } + return 0; + } + + + private Connection getTaosConnection(Properties properties) throws SQLException { + // 检查必要参数 + String host = properties.getProperty(Key.HOST); + String port = properties.getProperty(Key.PORT); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + if (host == null || port == null || dbname == null || user == null || password == null) { + String keys = String.join(" ", Key.HOST, Key.PORT, Key.DBNAME, Key.USER, Key.PASSWORD); + LOG.error("Required options missing, please check: " + keys); + return null; + } + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", host, port, dbname, user, password); + LOG.info("TDengine connection established, host:{} port:{} dbname:{} user:{}", host, port, dbname, user); + return DriverManager.getConnection(jdbcUrl); + } + + /** + * 使用SQL批量写入
+ * + * @return 成功写入记录数 + * @throws SQLException + */ + private long write(RecordReceiver lineReceiver, Connection conn, int batchSize, SchemaManager scm, TaskPluginCollector collector) throws SQLException { + Record record = lineReceiver.getFromReader(); + if (record == null) { + return 0; + } + String pq = String.format("INSERT INTO ? USING %s TAGS(%s) (%s) values (%s)", scm.getStable(), scm.getTagValuesPlaceHolder(), scm.getJoinedFieldNames(), scm.getFieldValuesPlaceHolder()); + LOG.info("Prepared SQL: {}", pq); + try (TSDBPreparedStatement stmt = (TSDBPreparedStatement) conn.prepareStatement(pq)) { + JDBCBatchWriter batchWriter = new JDBCBatchWriter(conn, stmt, scm, batchSize, collector); + do { + batchWriter.append(record); + } while ((record = lineReceiver.getFromReader()) != null); + batchWriter.flush(); + return batchWriter.getCount(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java new file mode 100644 index 00000000..53ab9bb9 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java @@ -0,0 +1,244 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.taosdata.jdbc.TSDBPreparedStatement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 使用JDBC原生写入接口批量写入。
+ * 有两个限制条件导致批量写入的代码逻辑过于复杂,以至于需要开发新的类来封装。
+ * 1. 用户必须提前把需要批量写入的数据搜集到ArrayList中 + * 2. 每批写入的表名必须相同。 + * 这个类的实现逻辑是: + * 1. 先把属于同一子表的Record缓存起来 + * 2. 缓存的数量达到batchSize阈值,自动执行一次批量写入 + * 3. 最后一批数据需要用户手动flush才能写入 + */ +public class JDBCBatchWriter { + public static final Logger LOG = LoggerFactory.getLogger(JDBCBatchWriter.class); + private TSDBPreparedStatement stmt; + private SchemaManager scm; + private Connection conn; + private int batchSize; + private TaskPluginCollector collector; + + // 缓存Record, key为tableName + Map> buf = new HashMap<>(); + // 缓存表的标签值, key为tableName + Map tableTagValues = new HashMap<>(); + private long sucCount = 0; + private final int tsColIndex; + private List fieldList; + // 每个record至少应该包含的列数,用于校验数据 + private int minColNum = 0; + private Map fieldIndexMap; + private List fieldTypes = null; + + public JDBCBatchWriter(Connection conn, TSDBPreparedStatement stmt, SchemaManager scm, int batchSize, TaskPluginCollector collector) { + this.conn = conn; + this.stmt = stmt; + this.scm = scm; + this.batchSize = batchSize; + this.collector = collector; + this.tsColIndex = scm.getTsColIndex(); + this.fieldList = scm.getFieldList(); + this.fieldIndexMap = scm.getFieldIndexMap(); + this.minColNum = 1 + fieldList.size() + scm.getDynamicTagCount(); + + } + + public void initFiledTypesAndTargetTable(List records) throws SQLException { + if (fieldTypes != null) { + return; + } + guessFieldTypes(records); + if (scm.shouldCreateTable()) { + scm.createSTable(conn, fieldTypes); + } + } + + public void append(Record record) throws SQLException { + int columnNum = record.getColumnNumber(); + if (columnNum < minColNum) { + // 实际列数小于期望列数 + collector.collectDirtyRecord(record, Msg.get("column_number_error")); + return; + } + String[] tagValues = scm.getTagValuesFromRecord(record); + if (tagValues == null) { + // 标签列包含null + collector.collectDirtyRecord(record, Msg.get("tag_value_error")); + return; + } + if (!scm.hasTimestamp(record)) { + // 时间戳列为null或类型错误 + collector.collectDirtyRecord(record, Msg.get("ts_value_error")); + return; + } + String tableName = scm.computeTableName(tagValues); + if (buf.containsKey(tableName)) { + List lis = buf.get(tableName); + lis.add(record); + if (lis.size() == batchSize) { + if (fieldTypes == null) { + initFiledTypesAndTargetTable(lis); + } + executeBatch(tableName); + lis.clear(); + } + } else { + List lis = new ArrayList<>(batchSize); + lis.add(record); + buf.put(tableName, lis); + tableTagValues.put(tableName, tagValues); + } + } + + /** + * 只有String类型比较特别,测试发现值为null的列会转成String类型。所以Column的类型为String并不代表这一列的类型真的是String。 + * + * @param records + */ + private void guessFieldTypes(List records) { + fieldTypes = new ArrayList<>(fieldList.size()); + for (int i = 0; i < fieldList.size(); ++i) { + int colIndex = fieldIndexMap.get(fieldList.get(i)); + boolean ok = false; + for (int j = 0; j < records.size() && !ok; ++j) { + Column column = records.get(j).getColumn(colIndex); + Column.Type type = column.getType(); + switch (type) { + case LONG: + case DOUBLE: + case DATE: + case BOOL: + case BYTES: + if (column.getRawData() != null) { + fieldTypes.add(type); + ok = true; + } + break; + case STRING: + // 只有非null且非空的String列,才会被真的当作String类型。 + String value = column.asString(); + if (value != null && !"".equals(value)) { + fieldTypes.add(type); + ok = true; + } + break; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); + } + } + if (!ok) { + // 根据采样的%d条数据,无法推断第%d列的数据类型 + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, String.format(Msg.get("infer_column_type_error"), records.size(), i + 1)); + } + } + LOG.info("Field Types: {}", fieldTypes); + } + + /** + * 执行单表批量写入 + * + * @param tableName + * @throws SQLException + */ + private void executeBatch(String tableName) throws SQLException { + // 表名 + stmt.setTableName(tableName); + List records = buf.get(tableName); + // 标签 + String[] tagValues = tableTagValues.get(tableName); + LOG.debug("executeBatch {}", String.join(",", tagValues)); + for (int i = 0; i < tagValues.length; ++i) { + stmt.setTagNString(i, tagValues[i]); + } + // 时间戳 + ArrayList tsList = records.stream().map(r -> r.getColumn(tsColIndex).asDate().getTime()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setTimestamp(0, tsList); + // 字段 + for (int i = 0; i < fieldList.size(); ) { + String fieldName = fieldList.get(i); + int index = fieldIndexMap.get(fieldName); + switch (fieldTypes.get(i)) { + case LONG: + ArrayList lisLong = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setLong(++i, lisLong); + break; + case DOUBLE: + ArrayList lisDouble = records.stream().map(r -> r.getColumn(index).asDouble()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setDouble(++i, lisDouble); + break; + case STRING: + ArrayList lisString = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setNString(++i, lisString, 64); + break; + case DATE: + ArrayList lisTs = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setTimestamp(++i, lisTs); + break; + case BOOL: + ArrayList lisBool = records.stream().map(r -> r.getColumn(index).asBoolean()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setBoolean(++i, lisBool); + break; + case BYTES: + ArrayList lisBytes = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); + stmt.setString(++i, lisBytes, 64); + break; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); + } + } + // 执行 + stmt.columnDataAddBatch(); + stmt.columnDataExecuteBatch(); + // 更新计数器 + sucCount += records.size(); + } + + /** + * 把缓存的Record全部写入 + */ + public void flush() throws SQLException { + if (fieldTypes == null) { + List records = new ArrayList<>(); + for (List lis : buf.values()) { + records.addAll(lis); + if (records.size() > 100) { + break; + } + } + if (records.size() > 0) { + initFiledTypesAndTargetTable(records); + } else { + return; + } + } + for (String tabName : buf.keySet()) { + if (buf.get(tabName).size() > 0) { + executeBatch(tabName); + } + } + stmt.columnDataCloseBatch(); + } + + /** + * @return 成功写入的数据量 + */ + public long getCount() { + return sucCount; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java new file mode 100644 index 00000000..0aabe32a --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java @@ -0,0 +1,89 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import java.util.Properties; + +public class JniConnection { + + private static final long JNI_NULL_POINTER = 0L; + private static final int JNI_SUCCESSFUL = 0; + public static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; + public static final String PROPERTY_KEY_LOCALE = "locale"; + public static final String PROPERTY_KEY_CHARSET = "charset"; + public static final String PROPERTY_KEY_TIME_ZONE = "timezone"; + + private long conn; + + static { + System.loadLibrary("taos"); + } + + public JniConnection(Properties props) throws Exception { + initImp(props.getProperty(PROPERTY_KEY_CONFIG_DIR, null)); + + String locale = props.getProperty(PROPERTY_KEY_LOCALE); + if (setOptions(0, locale) < 0) { + throw new Exception("Failed to set locale: " + locale + ". System default will be used."); + } + String charset = props.getProperty(PROPERTY_KEY_CHARSET); + if (setOptions(1, charset) < 0) { + throw new Exception("Failed to set charset: " + charset + ". System default will be used."); + } + String timezone = props.getProperty(PROPERTY_KEY_TIME_ZONE); + if (setOptions(2, timezone) < 0) { + throw new Exception("Failed to set timezone: " + timezone + ". System default will be used."); + } + } + + public void open(String host, int port, String dbname, String user, String password) throws Exception { + if (this.conn != JNI_NULL_POINTER) { + close(); + this.conn = JNI_NULL_POINTER; + } + + this.conn = connectImp(host, port, dbname, user, password); + if (this.conn == JNI_NULL_POINTER) { + String errMsg = getErrMsgImp(0); + throw new Exception(errMsg); + } + } + + public void insertOpentsdbJson(String json) throws Exception { + if (this.conn == JNI_NULL_POINTER) { + throw new Exception("JNI connection is NULL"); + } + + long result = insertOpentsdbJson(json, this.conn); + int errCode = getErrCodeImp(this.conn, result); + if (errCode != JNI_SUCCESSFUL) { + String errMsg = getErrMsgImp(result); + freeResultSetImp(this.conn, result); + throw new Exception(errMsg); + } + freeResultSetImp(this.conn, result); + } + + public void close() throws Exception { + int code = this.closeConnectionImp(this.conn); + if (code != 0) { + throw new Exception("JNI closeConnection failed"); + } + this.conn = JNI_NULL_POINTER; + } + + private static native void initImp(String configDir); + + private static native int setOptions(int optionIndex, String optionValue); + + private native long connectImp(String host, int port, String dbName, String user, String password); + + private native int getErrCodeImp(long connection, long pSql); + + private native String getErrMsgImp(long pSql); + + private native void freeResultSetImp(long connection, long pSql); + + private native int closeConnectionImp(long connection); + + private native long insertOpentsdbJson(String json, long pSql); + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java new file mode 100644 index 00000000..090a7999 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -0,0 +1,14 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class Key { + public static final String HOST = "host"; + public static final String PORT = "port"; + public static final String DBNAME = "dbname"; + public static final String USER = "user"; + public static final String PASSWORD = "password"; + public static final String BATCH_SIZE = "batchSize"; + public static final String STABLE = "stable"; + public static final String TAG_COLUMN = "tagColumn"; + public static final String FIELD_COLUMN = "fieldColumn"; + public static final String TIMESTAMP_COLUMN = "timestampColumn"; +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java new file mode 100644 index 00000000..89730d35 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java @@ -0,0 +1,20 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import java.util.Locale; +import java.util.ResourceBundle; + +/** + * i18n message util + */ +public class Msg { + private static ResourceBundle bundle; + + static { + bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); + } + + public static String get(String key) { + return bundle.getString(key); + } + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java new file mode 100644 index 00000000..e1b8f5dd --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java @@ -0,0 +1,99 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Properties; + +public class OpentsdbDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(OpentsdbDataHandler.class); + private static final String DEFAULT_BATCH_SIZE = "1"; + + @Override + public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { + // opentsdb json protocol use JNI and schemaless API to write + String host = properties.getProperty(Key.HOST); + int port = Integer.parseInt(properties.getProperty(Key.PORT)); + String dbname = properties.getProperty(Key.DBNAME); + String user = properties.getProperty(Key.USER); + String password = properties.getProperty(Key.PASSWORD); + + JniConnection conn = null; + long count = 0; + try { + conn = new JniConnection(properties); + conn.open(host, port, dbname, user, password); + LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); + int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); + count = writeOpentsdb(lineReceiver, conn, batchSize); + } catch (Exception e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + } finally { + try { + if (conn != null) + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + LOG.info("TDengine connection closed"); + } + + return count; + } + + private long writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn, int batchSize) { + long recordIndex = 1; + try { + Record record; + StringBuilder sb = new StringBuilder(); + while ((record = lineReceiver.getFromReader()) != null) { + if (batchSize == 1) { + String jsonData = recordToString(record); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + } else if (recordIndex % batchSize == 1) { + sb.append("[").append(recordToString(record)).append(","); + } else if (recordIndex % batchSize == 0) { + sb.append(recordToString(record)).append("]"); + String jsonData = sb.toString(); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + sb.delete(0, sb.length()); + } else { + sb.append(recordToString(record)).append(","); + } + recordIndex++; + } + if (sb.length() != 0 && sb.charAt(0) == '[') { + String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); + LOG.debug(">>> " + jsonData); + conn.insertOpentsdbJson(jsonData); + } + } catch (Exception e) { + LOG.error("TDengineWriter ERROR: " + e.getMessage()); + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); + } + return recordIndex - 1; + } + + private String recordToString(Record record) { + int recordLength = record.getColumnNumber(); + if (0 == recordLength) { + return ""; + } + Column column; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + return sb.toString(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java new file mode 100644 index 00000000..d67a6585 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -0,0 +1,271 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import org.apache.commons.codec.digest.DigestUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.*; +import java.util.stream.Collectors; + +public class SchemaManager { + private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); + + private String stable; // 目标超表名 + private Map fixedTagValue = new HashMap<>(); // 固定标签值 标签名 -> 标签值 + private Map tagIndexMap = new HashMap<>(); // 动态标签值 标签名 -> 列索引 + private Map fieldIndexMap = new HashMap<>(); // 字段名 -> 字段索引 + private String tsColName; // 时间戳列名 + private int tsColIndex = -1; // 时间戳列索引 + private List fieldList = new ArrayList<>(); + private List tagList = new ArrayList<>(); + private boolean canInferSchemaFromConfig = false; + + + public SchemaManager() { + } + + public SchemaManager(Properties properties) { + getFromConfig(properties); + } + + private String mapDataxType(Column.Type type) { + switch (type) { + case LONG: + return "BIGINT"; + case DOUBLE: + return "DOUBLE"; + case STRING: + return "NCHAR(64)"; + case DATE: + return "TIMESTAMP"; + case BOOL: + return "BOOL"; + case BYTES: + return "BINARY(64)"; + default: + throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, type.toString()); + } + } + + public void setStable(String stable) { + stable = stable; + } + + public String getStable() { + return stable; + } + + private void getFromConfig(Properties properties) { + stable = properties.getProperty(Key.STABLE); + if (stable == null) { + LOG.error("Config error: no stable"); + return; + } + for (Object key : properties.keySet()) { + String k = (String) key; + String v = properties.getProperty(k); + + String[] ps = k.split("\\."); + if (ps.length == 1) { + continue; + } + if (k.startsWith(Key.TAG_COLUMN)) { + String tagName = ps[1]; + try { + Integer tagIndex = Integer.parseInt(v); + this.tagIndexMap.put(tagName, tagIndex); + tagList.add(tagName); + } catch (NumberFormatException e) { + fixedTagValue.put(tagName, v); + tagList.add(tagName); + } + } else if (k.startsWith(Key.FIELD_COLUMN)) { + String fieldName = ps[1]; + Integer fileIndex = Integer.parseInt(v); + fieldIndexMap.put(fieldName, fileIndex); + } else if (k.startsWith(Key.TIMESTAMP_COLUMN)) { + tsColName = ps[1]; + tsColIndex = Integer.parseInt(v); + } + } + List sortedFieldName = fieldIndexMap.entrySet().stream().sorted((x, y) -> x.getValue().compareTo(y.getValue())).map(e -> e.getKey()).collect(Collectors.toList()); + fieldList.addAll(sortedFieldName); // 排序的目的是保证自动建表时列的顺序和输入数据的列的顺序保持一致 + canInferSchemaFromConfig = tsColIndex > -1 && !(fixedTagValue.isEmpty() && tagIndexMap.isEmpty()) && !fieldIndexMap.isEmpty(); + LOG.info("Config file parsed result:fixedTags=[{}] ,tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", fixedTagValue.keySet()), String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + } + + public boolean shouldGuessSchema() { + return !canInferSchemaFromConfig; + } + + public boolean shouldCreateTable() { + return canInferSchemaFromConfig; + } + + public boolean configValid() { + boolean valid = (tagList.size() > 0 && fieldList.size() > 0 && tsColIndex > -1) || (tagList.size() == 0 && fieldList.size() == 0 && tsColIndex == -1); + if (!valid) { + LOG.error("Config error: tagColumn, fieldColumn and timestampColumn must be present together or absent together."); + } + return valid; + } + + /** + * 通过执行`describe dbname.stable`命令,获取表的schema.
+ * describe命名返回有4列内容,分布是:Field,Type,Length,Note
+ * + * @return 成功返回true,如果超表不存在或其他错误则返回false + */ + public boolean getFromDB(Connection conn) { + try { + List stables = getSTables(conn); + if (!stables.contains(stable)) { + LOG.error("super table {} not exist, fail to get schema from database.", stable); + return false; + } + } catch (SQLException e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + return false; + } + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("describe " + stable); + int colIndex = 0; + while (rs.next()) { + String name = rs.getString(1); + String type = rs.getString(2); + String note = rs.getString(4); + if ("TIMESTAMP".equals(type)) { + tsColName = name; + tsColIndex = colIndex; + } else if ("TAG".equals(note)) { + tagIndexMap.put(name, colIndex); + tagList.add(name); + } else { + fieldIndexMap.put(name, colIndex); + fieldList.add(name); + } + colIndex++; + } + LOG.info("table info:tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); + return true; + } catch (SQLException e) { + LOG.error(e.getMessage()); + e.printStackTrace(); + return false; + } + } + + public static List getSTables(Connection conn) throws SQLException { + List stables = new ArrayList<>(); + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("show stables"); + while (rs.next()) { + String name = rs.getString(1); + stables.add(name); + } + } + return stables; + } + + public void createSTable(Connection conn, List fieldTypes) throws SQLException { + StringBuilder sb = new StringBuilder(); + sb.append("CREATE STABLE IF NOT EXISTS ").append(stable).append("("); + sb.append(tsColName).append(" ").append("TIMESTAMP,"); + for (int i = 0; i < fieldList.size(); ++i) { + String fieldName = fieldList.get(i); + Column.Type dxType = fieldTypes.get(i); + sb.append(fieldName).append(' '); + String tdType = mapDataxType(dxType); + sb.append(tdType).append(','); + } + sb.deleteCharAt(sb.length() - 1); + sb.append(") TAGS("); + for (String tagName : tagList) { + sb.append(tagName).append(" NCHAR(64),"); + } + sb.deleteCharAt(sb.length() - 1); + sb.append(")"); + String q = sb.toString(); + LOG.info("run sql:" + q); + try (Statement stmt = conn.createStatement()) { + stmt.execute(q); + } + } + + public String[] getTagValuesFromRecord(Record record) { + String[] tagValues = new String[tagList.size()]; + for (int i = 0; i < tagList.size(); ++i) { + if (fixedTagValue.containsKey(tagList.get(i))) { + tagValues[i] = fixedTagValue.get(tagList.get(i)); + } else { + int tagIndex = tagIndexMap.get(tagList.get(i)); + tagValues[i] = record.getColumn(tagIndex).asString(); + } + if (tagValues[i] == null) { + return null; + } + } + return tagValues; + } + + public boolean hasTimestamp(Record record) { + Column column = record.getColumn(tsColIndex); + if (column.getType() == Column.Type.DATE && column.asDate() != null) { + return true; + } else { + return false; + } + } + + public Map getFieldIndexMap() { + return fieldIndexMap; + } + + public List getFieldList() { + return fieldList; + } + + public String getJoinedFieldNames() { + return tsColName + ", " + String.join(", ", fieldList); + } + + public int getTsColIndex() { + return tsColIndex; + } + + public String getTagValuesPlaceHolder() { + return tagList.stream().map(x -> "?").collect(Collectors.joining(",")); + } + + public String getFieldValuesPlaceHolder() { + return "?, " + fieldList.stream().map(x -> "?").collect(Collectors.joining(", ")); + } + + /** + * 计算子表表名 + *
    + *
  1. 将标签的value 组合成为如下的字符串: tag_value1!tag_value2!tag_value3。
  2. + *
  3. 计算该字符串的 MD5 散列值 "md5_val"。
  4. + *
  5. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。
  6. + *
+ * + * @param tagValues + * @return + */ + public String computeTableName(String[] tagValues) { + String s = String.join("!", tagValues); + return "t_" + DigestUtils.md5Hex(s); + } + + public int getDynamicTagCount() { + return tagIndexMap.size(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java new file mode 100644 index 00000000..79e5238c --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -0,0 +1,91 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + + +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.Set; + +public class TDengineWriter extends Writer { + + private static final String PEER_PLUGIN_NAME = "peerPluginName"; + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static class Job extends Writer.Job { + + private Configuration originalConfig; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + this.originalConfig.set(PEER_PLUGIN_NAME, getPeerPluginName()); + } + + @Override + public void destroy() { + + } + + @Override + public List split(int mandatoryNumber) { + List writerSplitConfigs = new ArrayList<>(); + for (int i = 0; i < mandatoryNumber; i++) { + writerSplitConfigs.add(this.originalConfig); + } + return writerSplitConfigs; + } + } + + public static class Task extends Writer.Task { + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + + private Configuration writerSliceConfig; + + @Override + public void init() { + this.writerSliceConfig = getPluginJobConf(); + + } + + @Override + public void destroy() { + + } + + @Override + public void startWrite(RecordReceiver lineReceiver) { + Set keys = this.writerSliceConfig.getKeys(); + Properties properties = new Properties(); + for (String key : keys) { + String value = this.writerSliceConfig.getString(key); + properties.setProperty(key, value); + } + if (!keys.contains(Key.USER)) { + properties.setProperty(Key.USER, "root"); + } + if (!keys.contains(Key.PASSWORD)) { + properties.setProperty(Key.PASSWORD, "taosdata"); + } + LOG.debug("========================properties==========================\n" + properties); + String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); + LOG.debug("start to handle record from: " + peerPluginName); + DataHandler handler = DataHandlerFactory.build(peerPluginName); + long records = handler.handle(lineReceiver, properties, getTaskPluginCollector()); + LOG.debug("handle data finished, records: " + records); + } + + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java new file mode 100644 index 00000000..994f1e89 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -0,0 +1,32 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineWriterErrorCode implements ErrorCode { + RUNTIME_EXCEPTION("TDengineWriter-00", "运行时异常"), + TYPE_ERROR("TDengineWriter-00", "Datax类型无法正确映射到TDengine类型"); + + private final String code; + private final String description; + + private TDengineWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h new file mode 100644 index 00000000..4bdf3639 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h @@ -0,0 +1,105 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_alibaba_datax_plugin_writer_JniConnection */ + +#ifndef _Included_com_alibaba_datax_plugin_writer_JniConnection +#define _Included_com_alibaba_datax_plugin_writer_JniConnection +#ifdef __cplusplus +extern "C" { +#endif +#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER +#define com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER 0LL +#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL +#define com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL 0L +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: initImp + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_initImp + (JNIEnv *, jclass, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: setOptions + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_setOptions + (JNIEnv *, jclass, jint, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getTsCharset + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getTsCharset + (JNIEnv *, jclass); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: connectImp + * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_connectImp + (JNIEnv *, jobject, jstring, jint, jstring, jstring, jstring); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: executeQueryImp + * Signature: ([BJ)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_executeQueryImp + (JNIEnv *, jobject, jbyteArray, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrCodeImp + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrCodeImp + (JNIEnv *, jobject, jlong, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrMsgImp + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgImp + (JNIEnv *, jobject, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getErrMsgByCode + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgByCode + (JNIEnv *, jobject, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: getAffectedRowsImp + * Signature: (JJ)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getAffectedRowsImp + (JNIEnv *, jobject, jlong, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: closeConnectionImp + * Signature: (J)I + */ +JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_closeConnectionImp + (JNIEnv *, jobject, jlong); + +/* + * Class: com_alibaba_datax_plugin_writer_JniConnection + * Method: insertOpentsdbJson + * Signature: (Ljava/lang/String;J)J + */ +JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_insertOpentsdbJson + (JNIEnv *, jobject, jstring, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/tdenginewriter/src/main/resources/plugin.json b/tdenginewriter/src/main/resources/plugin.json new file mode 100644 index 00000000..e54f65ff --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginewriter", + "class": "com.alibaba.datax.plugin.writer.tdenginewriter.TDengineWriter", + "description": { + "useScene": "data migration to tdengine", + "mechanism": "use JNI or taos-jdbc to write data to tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..5482b26e --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,10 @@ +{ + "name": "tdenginewriter", + "parameter": { + "host": "", + "port": 6030, + "db": "", + "user": "", + "password": "" + } +} \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg.properties b/tdenginewriter/src/main/resources/tdenginewritermsg.properties new file mode 100644 index 00000000..4aaa220b --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +batch_size_too_small='batchSize' is too small, please increase it and try again +column_number_error=number of columns is less than expected +tag_value_error=tag columns include 'null' value +ts_value_error=timestamp column type error or null +infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties new file mode 100644 index 00000000..4aaa220b --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +batch_size_too_small='batchSize' is too small, please increase it and try again +column_number_error=number of columns is less than expected +tag_value_error=tag columns include 'null' value +ts_value_error=timestamp column type error or null +infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties new file mode 100644 index 00000000..4b9552fd --- /dev/null +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties @@ -0,0 +1,6 @@ +try_get_schema_fromdb=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6587\u4ef6\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u5c1d\u8bd5\u4ece\u6570\u636e\u5e93\u83b7\u53d6 +batch_size_too_small=batchSize\u592a\u5c0f\uff0c\u4f1a\u589e\u52a0\u81ea\u52a8\u7c7b\u578b\u63a8\u65ad\u9519\u8bef\u7684\u6982\u7387\uff0c\u5efa\u8bae\u6539\u5927\u540e\u91cd\u8bd5 +column_number_error=\u5b9e\u9645\u5217\u6570\u5c0f\u4e8e\u671f\u671b\u5217\u6570 +tag_value_error=\u6807\u7b7e\u5217\u5305\u542bnull +ts_value_error=\u65f6\u95f4\u6233\u5217\u4e3anull\u6216\u7c7b\u578b\u9519\u8bef +infer_column_type_error=\u6839\u636e\u91c7\u6837\u7684%d\u6761\u6570\u636e\uff0c\u65e0\u6cd5\u63a8\u65ad\u7b2c%d\u5217\u7684\u6570\u636e\u7c7b\u578b diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java new file mode 100644 index 00000000..09c3df26 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java @@ -0,0 +1,21 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.Test; + +import java.util.Properties; + +public class JniConnectionTest { + + @Test + public void test() throws Exception { + JniConnection connection = new JniConnection(new Properties()); + + connection.open("192.168.56.105", 6030, "test", "root", "taosdata"); + + String json = "{\"metric\":\"weather_temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":\"t123\"}}"; + connection.insertOpentsdbJson(json); + + connection.close(); + } + +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java new file mode 100644 index 00000000..b1b7ddd8 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java @@ -0,0 +1,25 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.Test; + +import java.util.Locale; +import java.util.ResourceBundle; + +import org.junit.Assert; + +public class MessageTest { + @Test + public void testChineseMessage() { + Locale local = new Locale("zh", "CN"); + ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", local); + String msg = bundle.getString("try_get_schema_fromdb"); + Assert.assertEquals("无法从配置文件获取表结构信息,尝试从数据库获取", msg); + } + + @Test + public void testDefaultMessage() { + ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); + String msg = bundle.getString("try_get_schema_fromdb"); + System.out.println(msg); + } +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java new file mode 100644 index 00000000..62bf7040 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java @@ -0,0 +1,31 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class TDengineWriterTest { + + + @Test + public void testGetSchema() throws ClassNotFoundException, SQLException { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); + Connection conn = DriverManager.getConnection(jdbcUrl); + SchemaManager schemaManager = new SchemaManager(); + schemaManager.setStable("test1"); + schemaManager.getFromDB(conn); + } + + @Test + public void dropTestTable() throws ClassNotFoundException, SQLException { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); + Connection conn = DriverManager.getConnection(jdbcUrl); + Statement stmt = conn.createStatement(); + stmt.execute("drop table market_snapshot"); + } +} From 72c72612fdacf731f662024f780febc547f1b384 Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 29 Nov 2021 13:37:47 +0800 Subject: [PATCH 097/251] fix job template error --- .../main/resources/plugin_job_template.json | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json index 5482b26e..39c9c969 100644 --- a/tdenginewriter/src/main/resources/plugin_job_template.json +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -1,10 +1,24 @@ { "name": "tdenginewriter", "parameter": { - "host": "", + "host": "127.0.0.1", "port": 6030, - "db": "", - "user": "", - "password": "" + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } } } \ No newline at end of file From 4ba65407140f9d5e086c2a80708c667d7dc09532 Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 29 Nov 2021 13:37:47 +0800 Subject: [PATCH 098/251] fix job template error --- .../main/resources/plugin_job_template.json | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json index 5482b26e..39c9c969 100644 --- a/tdenginewriter/src/main/resources/plugin_job_template.json +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -1,10 +1,24 @@ { "name": "tdenginewriter", "parameter": { - "host": "", + "host": "127.0.0.1", "port": 6030, - "db": "", - "user": "", - "password": "" + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } } } \ No newline at end of file From 400b34e8cd34542703ce18efd7b2a8de219f1a9a Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 29 Nov 2021 14:42:01 +0800 Subject: [PATCH 099/251] add pom module tdengine writer --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 3bd75a31..1a9da81b 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,7 @@ mysqlwriter + tdenginewriter drdswriter odpswriter txtfilewriter From 30fa8f12843e478b70bd8ab64f9f4581b07d89f9 Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 29 Nov 2021 21:08:56 +0800 Subject: [PATCH 100/251] add English doc and fix bugs of Chinese doc --- tdenginewriter/doc/tdenginewriter-EN.md | 349 ++++++++++++++++++++++++ tdenginewriter/doc/tdenginewriter.md | 7 +- 2 files changed, 353 insertions(+), 3 deletions(-) create mode 100644 tdenginewriter/doc/tdenginewriter-EN.md diff --git a/tdenginewriter/doc/tdenginewriter-EN.md b/tdenginewriter/doc/tdenginewriter-EN.md new file mode 100644 index 00000000..eda88a9f --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter-EN.md @@ -0,0 +1,349 @@ +# DataX TDengineWriter + +[简体中文](./tdenginewriter.md) | English + +## 1 Quick Introduction + +TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. + +## 2 Implementation + +TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: + +1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). +2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. + +## 3 Features Introduction +### 3.1 From OpenTSDB to TDengine +#### 3.1.1 Sample Setting + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather_temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.1.180", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +#### 3.1.2 Configuration + +| Parameter | Description | Required | Default | +| --------- | ------------------------------ | -------- | -------- | +| host | host of TDengine | Yes | | +| port | port of TDengine | Yes | | +| user | use name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbname | name of target database | No | | +| batchSize | batch size of insert operation | No | 1 | + + +#### 3.1.3 Type Convert + +| OpenTSDB Type | DataX Type | TDengine Type | +| ---------------- | ---------- | ------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | + +### 3.2 From MongoDB to TDengine + +#### 3.2.1 Sample Setting +```json +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "127.0.0.1:27017" + ], + "userName": "user", + "mechanism": "SCRAM-SHA-1", + "userPassword": "password", + "authDb": "admin", + "dbName": "test", + "collectionName": "stock", + "column": [ + { + "name": "stockID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "localhost", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "stable": "stock", + "tagColumn": { + "industry": "energy", + "stockID": 0 + }, + "fieldColumn": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestampColumn": { + "tradeTime": 1 + } + } + } + } + ] + } +} +``` + +**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** + + +#### 3.2.2 Configuration + +| Parameter | Description | Required | Default | Remark | +| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | +| host | host ofTDengine | Yes | | +| port | port of TDengine | Yes | | +| user | user name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbname | name of target database | Yes | | +| batchSize | batch size of insert operation | No | 1000 | +| stable | name of target super table | Yes(except for OpenTSDB) | | +| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | +| fieldColumn | name and position of data columns in the record from reader | No | | | +| timestampColumn | name and position of timestamp column in the record from reader | No | | | + +#### 3.2.3 Auto table creating +##### 3.2.3.1 Rules + +If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. +The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: + +```sql +CREATE STABLE IF NOT EXISTS market_snapshot ( + tadetime TIMESTAMP, + lastprice DOUBLE, + askprice1 DOUBLE, + bidprice1 DOUBLE, + volume INT +) +TAGS( + industry NCHAR(64), + stockID NCHAR(64) +); +``` + +##### 3.2.3.2 Sub-table Creating Rules + +The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: +1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. +2. compute md5 hash hex of above string, named `md5val` +3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. + +#### 3.2.4 Use Pre-created Table + +If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. +The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: +``` + Field | Type | Length | Note | +================================================================================= + ts | TIMESTAMP | 8 | | + current | DOUBLE | 8 | | + location | BINARY | 10 | TAG | +``` +Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. + +#### 3.2.5 Remarks + +1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. +2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. + +#### 3.2.6 Type Convert + +| MongoDB Type | DataX Type | TDengine Type | +| ---------------- | -------------- | ----------------- | +| int, Long | Long | BIGINT | +| double | Double | DOUBLE | +| string, array | String | NCHAR(64) | +| date | Date | TIMESTAMP | +| boolean | Boolean | BOOL | +| bytes | Bytes | BINARY | + +### 3.3 From Relational Database to TDengine + +Take MySQl as example. + +#### 3.3.1 Table Structure in MySQL +```sql +CREATE TABLE IF NOT EXISTS weather( + station varchar(100), + latitude DOUBLE, + longtitude DOUBLE, + `date` DATE, + TMAX int, + TMIN int +) +``` + +#### 3.3.2 Sample Setting + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "passw0rd", + "column": [ + "*" + ], + "splitPk": "station", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + + +## 4 Performance Test + +## 5 Restriction + +1. NCHAR type has fixed length 64 when auto creating stable. +2. Rows have null tag values will be dropped. + +## FAQ + +### How to filter on source table? + +It depends on reader plugin. For different reader plugins, the way may be different. + +### How to import multiple source tables at once? + +It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. + +### How many sub-tables will be produced? + +The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. + +### Do columns in source table and columns in target table must be in the same order? + +No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. + +### How dose the plugin infer the data type of incoming data? + +By the first batch of records it received. + +### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. + +Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 062fac2c..e318ef7f 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -1,5 +1,7 @@ # DataX TDengineWriter +简体中文| [English](./tdenginewriter-EN.md) + ## 1 快速介绍 TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 @@ -203,7 +205,7 @@ TAGS( ##### 3.2.3.2 子表创建规则 -子表结果与超表相同,子表表名生成规则: +子表结构与超表相同,子表表名生成规则: 1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 2. 计算该字符串的 MD5 散列值 "md5_val"。 3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 @@ -225,7 +227,6 @@ TAGS( 1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 -3. 插件优先使用配置文件中指定的表结构。 #### 3.2.6 类型转换 @@ -387,7 +388,7 @@ CREATE TABLE IF NOT EXISTS weather( ### 源表和目标表的字段顺序一致吗? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 ### 插件如何确定各列的数据类型? From e8563a23796be77c72587b5369f7eabe8dab9eb5 Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 30 Nov 2021 07:41:25 +0800 Subject: [PATCH 101/251] =?UTF-8?q?=E8=B6=85=E8=A1=A8=20to=20=E8=B6=85?= =?UTF-8?q?=E7=BA=A7=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tdenginewriter/doc/tdenginewriter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index e318ef7f..251f29a8 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -205,7 +205,7 @@ TAGS( ##### 3.2.3.2 子表创建规则 -子表结构与超表相同,子表表名生成规则: +子表结构与超级表相同,子表表名生成规则: 1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 2. 计算该字符串的 MD5 散列值 "md5_val"。 3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 @@ -384,7 +384,7 @@ CREATE TABLE IF NOT EXISTS weather( ### 一张源表导入之后对应TDengine中多少张表? -这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超表就有多少子表。 +这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 ### 源表和目标表的字段顺序一致吗? From d554e26fa0654e28af0c29a4733bebb4a5b2ea1b Mon Sep 17 00:00:00 2001 From: dingbo Date: Tue, 30 Nov 2021 12:53:47 +0800 Subject: [PATCH 102/251] english doc as default --- tdenginewriter/doc/tdenginewriter-CN.md | 399 ++++++++++++++++++++++++ tdenginewriter/doc/tdenginewriter-EN.md | 349 --------------------- tdenginewriter/doc/tdenginewriter.md | 220 +++++-------- 3 files changed, 484 insertions(+), 484 deletions(-) create mode 100644 tdenginewriter/doc/tdenginewriter-CN.md delete mode 100644 tdenginewriter/doc/tdenginewriter-EN.md diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md new file mode 100644 index 00000000..c20b3b86 --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -0,0 +1,399 @@ +# DataX TDengineWriter + +简体中文| [English](./tdenginewriter.md) + +## 1 快速介绍 + +TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 + +## 2 实现原理 + +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: + +1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 + +2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 + +这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 + +## 3 功能说明 +### 3.1 从OpenTSDB到TDengine +#### 3.1.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather_temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.1.180", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +#### 3.1.2 参数说明 + +| 参数 | 描述 | 是否必选 | 默认值 | +| --------- | -------------------- | -------- | -------- | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1 | + + +#### 3.1.3 类型转换 + +目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: + +| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | + +### 3.2 从MongoDB到TDengine + +#### 3.2.1 配置样例 +```json +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "127.0.0.1:27017" + ], + "userName": "user", + "mechanism": "SCRAM-SHA-1", + "userPassword": "password", + "authDb": "admin", + "dbName": "test", + "collectionName": "stock", + "column": [ + { + "name": "stockID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "localhost", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "stable": "stock", + "tagColumn": { + "industry": "energy", + "stockID": 0 + }, + "fieldColumn": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestampColumn": { + "tradeTime": 1 + } + } + } + } + ] + } +} +``` + +**注:本配置的writer部分同样适用于关系型数据库** + + +#### 3.2.2 参数说明 +| 参数 | 描述 | 是否必选 | 默认值 | 备注 | +| --------------- | -------------------- | ---------------- | -------- | ------------------ | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbname | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1000 | +| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | +| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | +| fieldColumn | 字段列的列名和位置 | 否 | 无 | | +| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | + +#### 3.2.3 自动建表规则 +##### 3.2.3.1 超级表创建规则 + +如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
+数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: + +```sql +CREATE STABLE IF NOT EXISTS market_snapshot ( + tadetime TIMESTAMP, + lastprice DOUBLE, + askprice1 DOUBLE, + bidprice1 DOUBLE, + volume INT +) +TAGS( + industry NCHAR(64), + stockID NCHAR(64) +); +``` + +##### 3.2.3.2 子表创建规则 + +子表结构与超级表相同,子表表名生成规则: +1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 +2. 计算该字符串的 MD5 散列值 "md5_val"。 +3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 + +#### 3.2.4 用户提前建表 + +如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 +此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +``` + Field | Type | Length | Note | +================================================================================= + ts | TIMESTAMP | 8 | | + current | DOUBLE | 8 | | + location | BINARY | 10 | TAG | +``` +那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 + +#### 3.2.5 注意事项 + +1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 +2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 + +#### 3.2.6 类型转换 + +| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| int, Long | Long | BIGINT | +| double | Double | DOUBLE | +| string, array | String | NCHAR(64) | +| date | Date | TIMESTAMP | +| boolean | Boolean | BOOL | +| bytes | Bytes | BINARY | + +### 3.3 从关系型数据库到TDengine +writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 + +#### 3.3.1 MySQL中表结构 +```sql +CREATE TABLE IF NOT EXISTS weather( + station varchar(100), + latitude DOUBLE, + longtitude DOUBLE, + `date` DATE, + TMAX int, + TMIN int +) +``` + +#### 3.3.2 配置文件示例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "passw0rd", + "column": [ + "*" + ], + "splitPk": "station", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "dbname": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | +| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | +| 1 | | | | | | | | +| 4 | | | | | | | | +| 8 | | | | | | | | +| 16 | | | | | | | | +| 32 | | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 +3. 16通道,4096批量提交时,出现 full gc 2次。 + +#### 4.2.4 性能测试小结 + + +## 5 约束限制 + +1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 +2. 标签列不能包含null值,如果包含会被过滤掉。 + +## FAQ + +### 如何选取要同步的数据的范围? + +数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 + +### 如何一次导入多张源表? + +如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 + +### 一张源表导入之后对应TDengine中多少张表? + +这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 + +### 源表和目标表的字段顺序一致吗? + +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 + +### 插件如何确定各列的数据类型? + +根据收到的第一批数据自动推断各列的类型。 + +### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? + +因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter-EN.md b/tdenginewriter/doc/tdenginewriter-EN.md deleted file mode 100644 index eda88a9f..00000000 --- a/tdenginewriter/doc/tdenginewriter-EN.md +++ /dev/null @@ -1,349 +0,0 @@ -# DataX TDengineWriter - -[简体中文](./tdenginewriter.md) | English - -## 1 Quick Introduction - -TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. - -## 2 Implementation - -TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: - -1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). -2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. - -## 3 Features Introduction -### 3.1 From OpenTSDB to TDengine -#### 3.1.1 Sample Setting - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "opentsdbreader", - "parameter": { - "endpoint": "http://192.168.1.180:4242", - "column": [ - "weather_temperature" - ], - "beginDateTime": "2021-01-01 00:00:00", - "endDateTime": "2021-01-01 01:00:00" - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "192.168.1.180", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata" - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - -#### 3.1.2 Configuration - -| Parameter | Description | Required | Default | -| --------- | ------------------------------ | -------- | -------- | -| host | host of TDengine | Yes | | -| port | port of TDengine | Yes | | -| user | use name of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbname | name of target database | No | | -| batchSize | batch size of insert operation | No | 1 | - - -#### 3.1.3 Type Convert - -| OpenTSDB Type | DataX Type | TDengine Type | -| ---------------- | ---------- | ------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | - -### 3.2 From MongoDB to TDengine - -#### 3.2.1 Sample Setting -```json -{ - "job": { - "setting": { - "speed": { - "channel": 2 - } - }, - "content": [ - { - "reader": { - "name": "mongodbreader", - "parameter": { - "address": [ - "127.0.0.1:27017" - ], - "userName": "user", - "mechanism": "SCRAM-SHA-1", - "userPassword": "password", - "authDb": "admin", - "dbName": "test", - "collectionName": "stock", - "column": [ - { - "name": "stockID", - "type": "string" - }, - { - "name": "tradeTime", - "type": "date" - }, - { - "name": "lastPrice", - "type": "double" - }, - { - "name": "askPrice1", - "type": "double" - }, - { - "name": "bidPrice1", - "type": "double" - }, - { - "name": "volume", - "type": "int" - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "localhost", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata", - "stable": "stock", - "tagColumn": { - "industry": "energy", - "stockID": 0 - }, - "fieldColumn": { - "lastPrice": 2, - "askPrice1": 3, - "bidPrice1": 4, - "volume": 5 - }, - "timestampColumn": { - "tradeTime": 1 - } - } - } - } - ] - } -} -``` - -**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** - - -#### 3.2.2 Configuration - -| Parameter | Description | Required | Default | Remark | -| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | -| host | host ofTDengine | Yes | | -| port | port of TDengine | Yes | | -| user | user name of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbname | name of target database | Yes | | -| batchSize | batch size of insert operation | No | 1000 | -| stable | name of target super table | Yes(except for OpenTSDB) | | -| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | -| fieldColumn | name and position of data columns in the record from reader | No | | | -| timestampColumn | name and position of timestamp column in the record from reader | No | | | - -#### 3.2.3 Auto table creating -##### 3.2.3.1 Rules - -If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. -The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: - -```sql -CREATE STABLE IF NOT EXISTS market_snapshot ( - tadetime TIMESTAMP, - lastprice DOUBLE, - askprice1 DOUBLE, - bidprice1 DOUBLE, - volume INT -) -TAGS( - industry NCHAR(64), - stockID NCHAR(64) -); -``` - -##### 3.2.3.2 Sub-table Creating Rules - -The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: -1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. -2. compute md5 hash hex of above string, named `md5val` -3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. - -#### 3.2.4 Use Pre-created Table - -If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. -The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: -``` - Field | Type | Length | Note | -================================================================================= - ts | TIMESTAMP | 8 | | - current | DOUBLE | 8 | | - location | BINARY | 10 | TAG | -``` -Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. - -#### 3.2.5 Remarks - -1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. -2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. - -#### 3.2.6 Type Convert - -| MongoDB Type | DataX Type | TDengine Type | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY | - -### 3.3 From Relational Database to TDengine - -Take MySQl as example. - -#### 3.3.1 Table Structure in MySQL -```sql -CREATE TABLE IF NOT EXISTS weather( - station varchar(100), - latitude DOUBLE, - longtitude DOUBLE, - `date` DATE, - TMAX int, - TMIN int -) -``` - -#### 3.3.2 Sample Setting - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "mysqlreader", - "parameter": { - "username": "root", - "password": "passw0rd", - "column": [ - "*" - ], - "splitPk": "station", - "connection": [ - { - "table": [ - "weather" - ], - "jdbcUrl": [ - "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" - ] - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "127.0.0.1", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "weather", - "tagColumn": { - "station": 0 - }, - "fieldColumn": { - "latitude": 1, - "longtitude": 2, - "tmax": 4, - "tmin": 5 - }, - "timestampColumn":{ - "date": 3 - } - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - - -## 4 Performance Test - -## 5 Restriction - -1. NCHAR type has fixed length 64 when auto creating stable. -2. Rows have null tag values will be dropped. - -## FAQ - -### How to filter on source table? - -It depends on reader plugin. For different reader plugins, the way may be different. - -### How to import multiple source tables at once? - -It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. - -### How many sub-tables will be produced? - -The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. - -### Do columns in source table and columns in target table must be in the same order? - -No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. - -### How dose the plugin infer the data type of incoming data? - -By the first batch of records it received. - -### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. - -Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 251f29a8..42bdd04f 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -1,24 +1,21 @@ # DataX TDengineWriter -简体中文| [English](./tdenginewriter-EN.md) +[简体中文](./tdenginewriter-CN.md) | English -## 1 快速介绍 +## 1 Quick Introduction -TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 +TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. -## 2 实现原理 +## 2 Implementation -TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: +TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: -1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 +1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). +2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. -2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 - -这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 - -## 3 功能说明 -### 3.1 从OpenTSDB到TDengine -#### 3.1.1 配置样例 +## 3 Features Introduction +### 3.1 From OpenTSDB to TDengine +#### 3.1.1 Sample Setting ```json { @@ -57,35 +54,33 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea } ``` -#### 3.1.2 参数说明 +#### 3.1.2 Configuration -| 参数 | 描述 | 是否必选 | 默认值 | -| --------- | -------------------- | -------- | -------- | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbname | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1 | +| Parameter | Description | Required | Default | +| --------- | ------------------------------ | -------- | -------- | +| host | host of TDengine | Yes | | +| port | port of TDengine | Yes | | +| user | use name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbname | name of target database | No | | +| batchSize | batch size of insert operation | No | 1 | -#### 3.1.3 类型转换 +#### 3.1.3 Type Convert -目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: +| OpenTSDB Type | DataX Type | TDengine Type | +| ---------------- | ---------- | ------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | -| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | -| ---------------- | -------------- | ----------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | +### 3.2 From MongoDB to TDengine -### 3.2 从MongoDB到TDengine - -#### 3.2.1 配置样例 +#### 3.2.1 Sample Setting ```json { "job": { @@ -166,28 +161,29 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea } ``` -**注:本配置的writer部分同样适用于关系型数据库** +**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** -#### 3.2.2 参数说明 -| 参数 | 描述 | 是否必选 | 默认值 | 备注 | -| --------------- | -------------------- | ---------------- | -------- | ------------------ | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbname | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1000 | -| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | -| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | -| fieldColumn | 字段列的列名和位置 | 否 | 无 | | -| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | +#### 3.2.2 Configuration -#### 3.2.3 自动建表规则 -##### 3.2.3.1 超级表创建规则 +| Parameter | Description | Required | Default | Remark | +| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | +| host | host ofTDengine | Yes | | +| port | port of TDengine | Yes | | +| user | user name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbname | name of target database | Yes | | +| batchSize | batch size of insert operation | No | 1000 | +| stable | name of target super table | Yes(except for OpenTSDB) | | +| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | +| fieldColumn | name and position of data columns in the record from reader | No | | | +| timestampColumn | name and position of timestamp column in the record from reader | No | | | -如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
-数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: +#### 3.2.3 Auto table creating +##### 3.2.3.1 Rules + +If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. +The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: ```sql CREATE STABLE IF NOT EXISTS market_snapshot ( @@ -203,17 +199,17 @@ TAGS( ); ``` -##### 3.2.3.2 子表创建规则 +##### 3.2.3.2 Sub-table Creating Rules -子表结构与超级表相同,子表表名生成规则: -1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 -2. 计算该字符串的 MD5 散列值 "md5_val"。 -3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 +The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: +1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. +2. compute md5 hash hex of above string, named `md5val` +3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. -#### 3.2.4 用户提前建表 +#### 3.2.4 Use Pre-created Table -如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 -此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. +The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: ``` Field | Type | Length | Note | ================================================================================= @@ -221,16 +217,16 @@ TAGS( current | DOUBLE | 8 | | location | BINARY | 10 | TAG | ``` -那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 +Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. -#### 3.2.5 注意事项 +#### 3.2.5 Remarks -1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 -2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 +1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. +2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. -#### 3.2.6 类型转换 +#### 3.2.6 Type Convert -| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| MongoDB Type | DataX Type | TDengine Type | | ---------------- | -------------- | ----------------- | | int, Long | Long | BIGINT | | double | Double | DOUBLE | @@ -239,10 +235,11 @@ TAGS( | boolean | Boolean | BOOL | | bytes | Bytes | BINARY | -### 3.3 从关系型数据库到TDengine -writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 +### 3.3 From Relational Database to TDengine -#### 3.3.1 MySQL中表结构 +Take MySQl as example. + +#### 3.3.1 Table Structure in MySQL ```sql CREATE TABLE IF NOT EXISTS weather( station varchar(100), @@ -254,7 +251,7 @@ CREATE TABLE IF NOT EXISTS weather( ) ``` -#### 3.3.2 配置文件示例 +#### 3.3.2 Sample Setting ```json { @@ -318,82 +315,35 @@ CREATE TABLE IF NOT EXISTS weather( ``` -## 4 性能报告 +## 4 Performance Test -### 4.1 环境准备 +## 5 Restriction -#### 4.1.1 数据特征 - -建表语句: - -单行记录类似于: - -#### 4.1.2 机器参数 - -* 执行DataX的机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: DataX 数据不落磁盘,不统计此项 - -* TDengine数据库机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: - -#### 4.1.3 DataX jvm 参数 - - -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError - -### 4.2 测试报告 - -#### 4.2.1 单表测试报告 - -| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | -| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | -| 1 | | | | | | | | -| 4 | | | | | | | | -| 8 | | | | | | | | -| 16 | | | | | | | | -| 32 | | | | | | | | - -说明: - -1. 这里的单表,主键类型为 bigint(20),自增。 -2. batchSize 和 通道个数,对性能影响较大。 -3. 16通道,4096批量提交时,出现 full gc 2次。 - -#### 4.2.4 性能测试小结 - - -## 5 约束限制 - -1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 -2. 标签列不能包含null值,如果包含会被过滤掉。 +1. NCHAR type has fixed length 64 when auto creating stable. +2. Rows have null tag values will be dropped. ## FAQ -### 如何选取要同步的数据的范围? +### How to filter on source table? -数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 +It depends on reader plugin. For different reader plugins, the way may be different. -### 如何一次导入多张源表? +### How to import multiple source tables at once? -如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 +It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. -### 一张源表导入之后对应TDengine中多少张表? +### How many sub-tables will be produced? -这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 +The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. -### 源表和目标表的字段顺序一致吗? +### Do columns in source table and columns in target table must be in the same order? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 +No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. -### 插件如何确定各列的数据类型? +### How dose the plugin infer the data type of incoming data? -根据收到的第一批数据自动推断各列的类型。 +By the first batch of records it received. -### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? +### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. -因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file +Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file From beb0d76136246c1d462cdba3214b309c7fb31282 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 2 Dec 2021 15:08:52 +0800 Subject: [PATCH 103/251] rename dbname to dbName. use english doc as default. --- tdenginewriter/doc/tdenginewriter-CN.md | 399 ++++++++++++++++++ tdenginewriter/doc/tdenginewriter.md | 244 ++++------- .../plugin/writer/tdenginewriter/Key.java | 2 +- 3 files changed, 489 insertions(+), 156 deletions(-) create mode 100644 tdenginewriter/doc/tdenginewriter-CN.md diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md new file mode 100644 index 00000000..ffd3efc9 --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -0,0 +1,399 @@ +# DataX TDengineWriter + +简体中文| [English](./tdenginewriter.md) + +## 1 快速介绍 + +TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 + +## 2 实现原理 + +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: + +1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 + +2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 + +这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 + +## 3 功能说明 +### 3.1 从OpenTSDB到TDengine +#### 3.1.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.1.180:4242", + "column": [ + "weather_temperature" + ], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.1.180", + "port": 6030, + "dbName": "test", + "user": "root", + "password": "taosdata" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +#### 3.1.2 参数说明 + +| 参数 | 描述 | 是否必选 | 默认值 | +| --------- | -------------------- | -------- | -------- | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbName | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1 | + + +#### 3.1.3 类型转换 + +目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: + +| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | + +### 3.2 从MongoDB到TDengine + +#### 3.2.1 配置样例 +```json +{ + "job": { + "setting": { + "speed": { + "channel": 2 + } + }, + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "127.0.0.1:27017" + ], + "userName": "user", + "mechanism": "SCRAM-SHA-1", + "userPassword": "password", + "authDb": "admin", + "dbName": "test", + "collectionName": "stock", + "column": [ + { + "name": "stockID", + "type": "string" + }, + { + "name": "tradeTime", + "type": "date" + }, + { + "name": "lastPrice", + "type": "double" + }, + { + "name": "askPrice1", + "type": "double" + }, + { + "name": "bidPrice1", + "type": "double" + }, + { + "name": "volume", + "type": "int" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "localhost", + "port": 6030, + "dbName": "test", + "user": "root", + "password": "taosdata", + "stable": "stock", + "tagColumn": { + "industry": "energy", + "stockID": 0 + }, + "fieldColumn": { + "lastPrice": 2, + "askPrice1": 3, + "bidPrice1": 4, + "volume": 5 + }, + "timestampColumn": { + "tradeTime": 1 + } + } + } + } + ] + } +} +``` + +**注:本配置的writer部分同样适用于关系型数据库** + + +#### 3.2.2 参数说明 +| 参数 | 描述 | 是否必选 | 默认值 | 备注 | +| --------------- | -------------------- | ---------------- | -------- | ------------------ | +| host | TDengine实例的host | 是 | 无 | +| port | TDengine实例的port | 是 | 无 | +| user | TDengine实例的用户名 | 否 | root | +| password | TDengine实例的密码 | 否 | taosdata | +| dbName | 目的数据库的名称 | 是 | 无 | +| batchSize | 每次批量插入多少记录 | 否 | 1000 | +| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | +| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | +| fieldColumn | 字段列的列名和位置 | 否 | 无 | | +| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | + +#### 3.2.3 自动建表规则 +##### 3.2.3.1 超级表创建规则 + +如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
+数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: + +```sql +CREATE STABLE IF NOT EXISTS market_snapshot ( + tadetime TIMESTAMP, + lastprice DOUBLE, + askprice1 DOUBLE, + bidprice1 DOUBLE, + volume INT +) +TAGS( + industry NCHAR(64), + stockID NCHAR(64) +); +``` + +##### 3.2.3.2 子表创建规则 + +子表结构与超级表相同,子表表名生成规则: +1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 +2. 计算该字符串的 MD5 散列值 "md5_val"。 +3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 + +#### 3.2.4 用户提前建表 + +如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 +此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +``` + Field | Type | Length | Note | +================================================================================= + ts | TIMESTAMP | 8 | | + current | DOUBLE | 8 | | + location | BINARY | 10 | TAG | +``` +那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 + +#### 3.2.5 注意事项 + +1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 +2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 + +#### 3.2.6 类型转换 + +| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| ---------------- | -------------- | ----------------- | +| int, Long | Long | BIGINT | +| double | Double | DOUBLE | +| string, array | String | NCHAR(64) | +| date | Date | TIMESTAMP | +| boolean | Boolean | BOOL | +| bytes | Bytes | BINARY(64) | + +### 3.3 从关系型数据库到TDengine +writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 + +#### 3.3.1 MySQL中表结构 +```sql +CREATE TABLE IF NOT EXISTS weather( + station varchar(100), + latitude DOUBLE, + longtitude DOUBLE, + `date` DATE, + TMAX int, + TMIN int +) +``` + +#### 3.3.2 配置文件示例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "passw0rd", + "column": [ + "*" + ], + "splitPk": "station", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": [ + "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "dbName": "test", + "user": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "weather", + "tagColumn": { + "station": 0 + }, + "fieldColumn": { + "latitude": 1, + "longtitude": 2, + "tmax": 4, + "tmin": 5 + }, + "timestampColumn":{ + "date": 3 + } + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | +| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | +| 1 | | | | | | | | +| 4 | | | | | | | | +| 8 | | | | | | | | +| 16 | | | | | | | | +| 32 | | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 +3. 16通道,4096批量提交时,出现 full gc 2次。 + +#### 4.2.4 性能测试小结 + + +## 5 约束限制 + +1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 +2. 标签列不能包含null值,如果包含会被过滤掉。 + +## FAQ + +### 如何选取要同步的数据的范围? + +数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 + +### 如何一次导入多张源表? + +如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 + +### 一张源表导入之后对应TDengine中多少张表? + +这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 + +### 源表和目标表的字段顺序一致吗? + +TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 + +### 插件如何确定各列的数据类型? + +根据收到的第一批数据自动推断各列的类型。 + +### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? + +因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 3e8a5f79..022bd212 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -1,24 +1,21 @@ # DataX TDengineWriter -简体中文| [English](./tdenginewriter-EN.md) +[简体中文](./tdenginewriter-CN.md) | English -## 1 快速介绍 +## 1 Quick Introduction -TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 +TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. -## 2 实现原理 +## 2 Implementation -TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: +TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: -1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 +1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). +2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. -2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 - -这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 - -## 3 功能说明 -### 3.1 从OpenTSDB到TDengine -#### 3.1.1 配置样例 +## 3 Features Introduction +### 3.1 From OpenTSDB to TDengine +#### 3.1.1 Sample Setting ```json { @@ -41,7 +38,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "parameter": { "host": "192.168.1.180", "port": 6030, - "dbname": "test", + "dbName": "test", "user": "root", "password": "taosdata" } @@ -57,35 +54,33 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea } ``` -#### 3.1.2 参数说明 +#### 3.1.2 Configuration -| 参数 | 描述 | 是否必选 | 默认值 | -| --------- | -------------------- | -------- | -------- | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbname | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1 | +| Parameter | Description | Required | Default | +| --------- | ------------------------------ | -------- | -------- | +| host | host of TDengine | Yes | | +| port | port of TDengine | Yes | | +| user | use name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbName | name of target database | No | | +| batchSize | batch size of insert operation | No | 1 | -#### 3.1.3 类型转换 +#### 3.1.3 Type Convert -目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: +| OpenTSDB Type | DataX Type | TDengine Type | +| ---------------- | ---------- | ------------- | +| timestamp | Date | timestamp | +| Integer(value) | Double | double | +| Float(value) | Double | double | +| String(value) | String | binary | +| Integer(tag) | String | binary | +| Float(tag) | String | binary | +| String(tag) | String | binary | -| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | -| ---------------- | -------------- | ----------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | +### 3.2 From MongoDB to TDengine -### 3.2 从MongoDB到TDengine - -#### 3.2.1 配置样例 +#### 3.2.1 Sample Setting ```json { "job": { @@ -141,7 +136,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "parameter": { "host": "localhost", "port": 6030, - "dbname": "test", + "dbName": "test", "user": "root", "password": "taosdata", "stable": "stock", @@ -166,28 +161,29 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea } ``` -**注:本配置的writer部分同样适用于关系型数据库** +**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** -#### 3.2.2 参数说明 -| 参数 | 描述 | 是否必选 | 默认值 | 备注 | -| --------------- | -------------------- | ---------------- | -------- | ------------------ | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbname | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1000 | -| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | -| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | -| fieldColumn | 字段列的列名和位置 | 否 | 无 | | -| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | +#### 3.2.2 Configuration -#### 3.2.3 自动建表规则 -##### 3.2.3.1 超级表创建规则 +| Parameter | Description | Required | Default | Remark | +| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | +| host | host ofTDengine | Yes | | +| port | port of TDengine | Yes | | +| user | user name of TDengine | No | root | +| password | password of TDengine | No | taosdata | +| dbName | name of target database | Yes | | +| batchSize | batch size of insert operation | No | 1000 | +| stable | name of target super table | Yes(except for OpenTSDB) | | +| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | +| fieldColumn | name and position of data columns in the record from reader | No | | | +| timestampColumn | name and position of timestamp column in the record from reader | No | | | -如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
-数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: +#### 3.2.3 Auto table creating +##### 3.2.3.1 Rules + +If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. +The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: ```sql CREATE STABLE IF NOT EXISTS market_snapshot ( @@ -203,21 +199,17 @@ TAGS( ); ``` -##### 3.2.3.2 子表创建规则 +##### 3.2.3.2 Sub-table Creating Rules -<<<<<<< HEAD -子表结果与超表相同,子表表名生成规则: -======= -子表结构与超级表相同,子表表名生成规则: ->>>>>>> TD-11503/english-doc-for-writer -1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 -2. 计算该字符串的 MD5 散列值 "md5_val"。 -3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 +The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: +1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. +2. compute md5 hash hex of above string, named `md5val` +3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. -#### 3.2.4 用户提前建表 +#### 3.2.4 Use Pre-created Table -如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 -此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: +If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. +The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: ``` Field | Type | Length | Note | ================================================================================= @@ -225,32 +217,29 @@ TAGS( current | DOUBLE | 8 | | location | BINARY | 10 | TAG | ``` -那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 +Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. -#### 3.2.5 注意事项 +#### 3.2.5 Remarks -1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 -2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 -<<<<<<< HEAD -3. 插件优先使用配置文件中指定的表结构。 -======= ->>>>>>> TD-11503/english-doc-for-writer +1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. +2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. -#### 3.2.6 类型转换 +#### 3.2.6 Type Convert -| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | +| MongoDB Type | DataX Type | TDengine Type | | ---------------- | -------------- | ----------------- | | int, Long | Long | BIGINT | | double | Double | DOUBLE | | string, array | String | NCHAR(64) | | date | Date | TIMESTAMP | | boolean | Boolean | BOOL | -| bytes | Bytes | BINARY | +| bytes | Bytes | BINARY(64) | -### 3.3 从关系型数据库到TDengine -writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 +### 3.3 From Relational Database to TDengine -#### 3.3.1 MySQL中表结构 +Take MySQl as example. + +#### 3.3.1 Table Structure in MySQL ```sql CREATE TABLE IF NOT EXISTS weather( station varchar(100), @@ -262,7 +251,7 @@ CREATE TABLE IF NOT EXISTS weather( ) ``` -#### 3.3.2 配置文件示例 +#### 3.3.2 Sample Setting ```json { @@ -295,7 +284,7 @@ CREATE TABLE IF NOT EXISTS weather( "parameter": { "host": "127.0.0.1", "port": 6030, - "dbname": "test", + "dbName": "test", "user": "root", "password": "taosdata", "batchSize": 1000, @@ -326,90 +315,35 @@ CREATE TABLE IF NOT EXISTS weather( ``` -## 4 性能报告 +## 4 Performance Test -### 4.1 环境准备 +## 5 Restriction -#### 4.1.1 数据特征 - -建表语句: - -单行记录类似于: - -#### 4.1.2 机器参数 - -* 执行DataX的机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: DataX 数据不落磁盘,不统计此项 - -* TDengine数据库机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: - -#### 4.1.3 DataX jvm 参数 - - -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError - -### 4.2 测试报告 - -#### 4.2.1 单表测试报告 - -| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | -| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | -| 1 | | | | | | | | -| 4 | | | | | | | | -| 8 | | | | | | | | -| 16 | | | | | | | | -| 32 | | | | | | | | - -说明: - -1. 这里的单表,主键类型为 bigint(20),自增。 -2. batchSize 和 通道个数,对性能影响较大。 -3. 16通道,4096批量提交时,出现 full gc 2次。 - -#### 4.2.4 性能测试小结 - - -## 5 约束限制 - -1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 -2. 标签列不能包含null值,如果包含会被过滤掉。 +1. NCHAR type has fixed length 64 when auto creating stable. +2. Rows have null tag values will be dropped. ## FAQ -### 如何选取要同步的数据的范围? +### How to filter on source table? -数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 +It depends on reader plugin. For different reader plugins, the way may be different. -### 如何一次导入多张源表? +### How to import multiple source tables at once? -如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 +It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. -### 一张源表导入之后对应TDengine中多少张表? +### How many sub-tables will be produced? -<<<<<<< HEAD -这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超表就有多少子表。 +The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. -### 源表和目标表的字段顺序一致吗? +### Do columns in source table and columns in target table must be in the same order? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表是自动调整。 -======= -这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 +No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. -### 源表和目标表的字段顺序一致吗? +### How dose the plugin infer the data type of incoming data? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 ->>>>>>> TD-11503/english-doc-for-writer +By the first batch of records it received. -### 插件如何确定各列的数据类型? +### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. -根据收到的第一批数据自动推断各列的类型。 - -### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? - -因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file +Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index 090a7999..a061e97f 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -3,7 +3,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; public class Key { public static final String HOST = "host"; public static final String PORT = "port"; - public static final String DBNAME = "dbname"; + public static final String DBNAME = "dbName"; public static final String USER = "user"; public static final String PASSWORD = "password"; public static final String BATCH_SIZE = "batchSize"; From 5d58600e44160dedf68f550330147951f219a1a7 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 3 Dec 2021 16:04:51 +0800 Subject: [PATCH 104/251] add tdenginewriter to package.xml --- package.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/package.xml b/package.xml index 882dd23b..d95feb40 100755 --- a/package.xml +++ b/package.xml @@ -189,6 +189,13 @@ datax + + tdenginewriter/target/datax/ + + **/*.* + + datax + drdswriter/target/datax/ From 1372a653cf40f5ca6d04c7ff050878af04bd9815 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 3 Dec 2021 16:34:19 +0800 Subject: [PATCH 105/251] delete duplicate en doc --- tdenginewriter/doc/tdenginewriter-EN.md | 349 ------------------------ 1 file changed, 349 deletions(-) delete mode 100644 tdenginewriter/doc/tdenginewriter-EN.md diff --git a/tdenginewriter/doc/tdenginewriter-EN.md b/tdenginewriter/doc/tdenginewriter-EN.md deleted file mode 100644 index eda88a9f..00000000 --- a/tdenginewriter/doc/tdenginewriter-EN.md +++ /dev/null @@ -1,349 +0,0 @@ -# DataX TDengineWriter - -[简体中文](./tdenginewriter.md) | English - -## 1 Quick Introduction - -TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. - -## 2 Implementation - -TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: - -1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). -2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. - -## 3 Features Introduction -### 3.1 From OpenTSDB to TDengine -#### 3.1.1 Sample Setting - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "opentsdbreader", - "parameter": { - "endpoint": "http://192.168.1.180:4242", - "column": [ - "weather_temperature" - ], - "beginDateTime": "2021-01-01 00:00:00", - "endDateTime": "2021-01-01 01:00:00" - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "192.168.1.180", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata" - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - -#### 3.1.2 Configuration - -| Parameter | Description | Required | Default | -| --------- | ------------------------------ | -------- | -------- | -| host | host of TDengine | Yes | | -| port | port of TDengine | Yes | | -| user | use name of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbname | name of target database | No | | -| batchSize | batch size of insert operation | No | 1 | - - -#### 3.1.3 Type Convert - -| OpenTSDB Type | DataX Type | TDengine Type | -| ---------------- | ---------- | ------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | - -### 3.2 From MongoDB to TDengine - -#### 3.2.1 Sample Setting -```json -{ - "job": { - "setting": { - "speed": { - "channel": 2 - } - }, - "content": [ - { - "reader": { - "name": "mongodbreader", - "parameter": { - "address": [ - "127.0.0.1:27017" - ], - "userName": "user", - "mechanism": "SCRAM-SHA-1", - "userPassword": "password", - "authDb": "admin", - "dbName": "test", - "collectionName": "stock", - "column": [ - { - "name": "stockID", - "type": "string" - }, - { - "name": "tradeTime", - "type": "date" - }, - { - "name": "lastPrice", - "type": "double" - }, - { - "name": "askPrice1", - "type": "double" - }, - { - "name": "bidPrice1", - "type": "double" - }, - { - "name": "volume", - "type": "int" - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "localhost", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata", - "stable": "stock", - "tagColumn": { - "industry": "energy", - "stockID": 0 - }, - "fieldColumn": { - "lastPrice": 2, - "askPrice1": 3, - "bidPrice1": 4, - "volume": 5 - }, - "timestampColumn": { - "tradeTime": 1 - } - } - } - } - ] - } -} -``` - -**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** - - -#### 3.2.2 Configuration - -| Parameter | Description | Required | Default | Remark | -| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | -| host | host ofTDengine | Yes | | -| port | port of TDengine | Yes | | -| user | user name of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbname | name of target database | Yes | | -| batchSize | batch size of insert operation | No | 1000 | -| stable | name of target super table | Yes(except for OpenTSDB) | | -| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | -| fieldColumn | name and position of data columns in the record from reader | No | | | -| timestampColumn | name and position of timestamp column in the record from reader | No | | | - -#### 3.2.3 Auto table creating -##### 3.2.3.1 Rules - -If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. -The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: - -```sql -CREATE STABLE IF NOT EXISTS market_snapshot ( - tadetime TIMESTAMP, - lastprice DOUBLE, - askprice1 DOUBLE, - bidprice1 DOUBLE, - volume INT -) -TAGS( - industry NCHAR(64), - stockID NCHAR(64) -); -``` - -##### 3.2.3.2 Sub-table Creating Rules - -The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: -1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. -2. compute md5 hash hex of above string, named `md5val` -3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. - -#### 3.2.4 Use Pre-created Table - -If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. -The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: -``` - Field | Type | Length | Note | -================================================================================= - ts | TIMESTAMP | 8 | | - current | DOUBLE | 8 | | - location | BINARY | 10 | TAG | -``` -Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. - -#### 3.2.5 Remarks - -1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. -2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. - -#### 3.2.6 Type Convert - -| MongoDB Type | DataX Type | TDengine Type | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY | - -### 3.3 From Relational Database to TDengine - -Take MySQl as example. - -#### 3.3.1 Table Structure in MySQL -```sql -CREATE TABLE IF NOT EXISTS weather( - station varchar(100), - latitude DOUBLE, - longtitude DOUBLE, - `date` DATE, - TMAX int, - TMIN int -) -``` - -#### 3.3.2 Sample Setting - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "mysqlreader", - "parameter": { - "username": "root", - "password": "passw0rd", - "column": [ - "*" - ], - "splitPk": "station", - "connection": [ - { - "table": [ - "weather" - ], - "jdbcUrl": [ - "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" - ] - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "127.0.0.1", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "weather", - "tagColumn": { - "station": 0 - }, - "fieldColumn": { - "latitude": 1, - "longtitude": 2, - "tmax": 4, - "tmin": 5 - }, - "timestampColumn":{ - "date": 3 - } - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - - -## 4 Performance Test - -## 5 Restriction - -1. NCHAR type has fixed length 64 when auto creating stable. -2. Rows have null tag values will be dropped. - -## FAQ - -### How to filter on source table? - -It depends on reader plugin. For different reader plugins, the way may be different. - -### How to import multiple source tables at once? - -It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. - -### How many sub-tables will be produced? - -The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. - -### Do columns in source table and columns in target table must be in the same order? - -No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. - -### How dose the plugin infer the data type of incoming data? - -By the first batch of records it received. - -### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. - -Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file From 75c032c4f93c3662ac1870819e6836888a8ec846 Mon Sep 17 00:00:00 2001 From: dingbo Date: Fri, 3 Dec 2021 17:09:50 +0800 Subject: [PATCH 106/251] refine doc --- tdenginewriter/doc/tdenginewriter-CN.md | 14 ++++++++++---- tdenginewriter/doc/tdenginewriter.md | 13 ++++++++++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index ffd3efc9..abd92de5 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -179,9 +179,11 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | dbName | 目的数据库的名称 | 是 | 无 | | batchSize | 每次批量插入多少记录 | 否 | 1000 | | stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | -| tagColumn | 标签列的列名和位置 | 否 | 无 | 位置索引均从0开始 | -| fieldColumn | 字段列的列名和位置 | 否 | 无 | | -| timestampColumn | 时间戳列的列名和位置 | 否 | 无 | 时间戳列只能有一个 | +| tagColumn | 格式:{tagName1: tagInd1, tagName2: tagInd2}, 标签列在写插件收到的Record中的位置和列名 | 否 | 无 | 位置索引均从0开始, tagInd如果为字符串, 表示固定标签值,不需要从源数据中获取 | +| fieldColumn | 格式:{fdName1: fdInd1, fdName2: fdInd2}, 字段列在写插件收到的Record中的位置和列名 | 否 | 无 | | +| timestampColumn | 格式:{tsColName: tsColIndex}, 时间戳列在写插件收到的Record中的位置和列名 | 否 | 无 | 时间戳列只能有一个 | + +示例配置中tagColumn有一个industry,它的值是一个固定的字符串“energy”, 作用是给导入的所有数据加一个值为"energy"的固定标签industry。这个应用场景可以是:在源库中,有多个设备采集的数据分表存储,设备名就是表名,可以用这个机制把设备名称转化为标签。 #### 3.2.3 自动建表规则 ##### 3.2.3.1 超级表创建规则 @@ -396,4 +398,8 @@ TDengine要求每个表第一列是时间戳列,后边是普通字段,最后 ### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? -因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 \ No newline at end of file +因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 + +### 如果编译的时候某些插件的依赖找不到怎么办? + +如果这个插件不是必须的,可以注释掉根目录下的pom.xml中的对应插件。 \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 022bd212..fd190570 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -175,10 +175,12 @@ TDengineWriter get records from DataX Framework that are generated from reader s | dbName | name of target database | Yes | | | batchSize | batch size of insert operation | No | 1000 | | stable | name of target super table | Yes(except for OpenTSDB) | | -| tagColumn | name and position of tag columns in the record from reader | No | | index starts with 0 | -| fieldColumn | name and position of data columns in the record from reader | No | | | +| tagColumn | name and position of tag columns in the record from reader, format:{tagName1: tagInd1, tagName2: tagInd2} | No | | index starts with 0 | +| fieldColumn | name and position of data columns in the record from reader, format: {fdName1: fdInd1, fdName2: fdInd2} | No | | | | timestampColumn | name and position of timestamp column in the record from reader | No | | | +**Note**: You see that the value of tagColumn "industry" is a fixed string, this ia a good feature of this plugin. Think about this scenario: you have many tables with the structure and one table corresponds to one device. You want to use the device number as a tag in the target super table, then this feature is designed for you. + #### 3.2.3 Auto table creating ##### 3.2.3.1 Rules @@ -346,4 +348,9 @@ By the first batch of records it received. ### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. -Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. \ No newline at end of file +Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. + + +### What should I do if some dependencies of a plugin can't be found? + +I this plugin is not necessary for you, just remove it from pom.xml under project's root directory. From 2fa114838d5b68a73dd1be1782c241229db2f24a Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 6 Dec 2021 14:59:10 +0800 Subject: [PATCH 107/251] remove mongodb type --- tdenginewriter/doc/tdenginewriter-CN.md | 16 ++++++++-------- tdenginewriter/doc/tdenginewriter.md | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index abd92de5..c0ce7684 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -232,14 +232,14 @@ TAGS( #### 3.2.6 类型转换 -| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY(64) | +| DataX 内部类型 | TDengine 数据类型 | +|-------------- | ----------------- | +|Long | BIGINT | +|Double | DOUBLE | +|String | NCHAR(64) | +|Date | TIMESTAMP | +|Boolean | BOOL | +|Bytes | BINARY(64) | ### 3.3 从关系型数据库到TDengine writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index fd190570..1e7fb64d 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -228,14 +228,14 @@ Then the first columns received by this writer plugin must represent timestamp, #### 3.2.6 Type Convert -| MongoDB Type | DataX Type | TDengine Type | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY(64) | +|DataX Type | TDengine Type | +|-------------- | ----------------- | +|Long | BIGINT | +|Double | DOUBLE | +|String | NCHAR(64) | +|Date | TIMESTAMP | +|Boolean | BOOL | +|Bytes | BINARY(64) | ### 3.3 From Relational Database to TDengine From 1e574298834c308bd064076a7beaeffc94c4cccf Mon Sep 17 00:00:00 2001 From: hffariel Date: Tue, 7 Dec 2021 11:48:51 +0800 Subject: [PATCH 108/251] don't set the columns header with json format --- .../starrockswriter/manager/StarRocksStreamLoadVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index 847635c8..38f66680 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -137,7 +137,7 @@ public class StarRocksStreamLoadVisitor { try (CloseableHttpClient httpclient = httpClientBuilder.build()) { HttpPut httpPut = new HttpPut(loadUrl); List cols = writerOptions.getColumns(); - if (null != cols && !cols.isEmpty()) { + if (null != cols && !cols.isEmpty() && StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { httpPut.setHeader("columns", String.join(",", cols.stream().map(f -> String.format("`%s`", f)).collect(Collectors.toList()))); } if (null != writerOptions.getLoadProps()) { From 83242f170571ea81f63a3a54f4337aed1a08bc53 Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 13 Dec 2021 15:27:17 +0800 Subject: [PATCH 109/251] fix the host iterating --- .../manager/StarRocksStreamLoadVisitor.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index 38f66680..2a372263 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -34,7 +34,7 @@ public class StarRocksStreamLoadVisitor { private static final Logger LOG = LoggerFactory.getLogger(StarRocksStreamLoadVisitor.class); private final StarRocksWriterOptions writerOptions; - private int pos; + private long pos; public StarRocksStreamLoadVisitor(StarRocksWriterOptions writerOptions) { this.writerOptions = writerOptions; @@ -68,11 +68,9 @@ public class StarRocksStreamLoadVisitor { private String getAvailableHost() { List hostList = writerOptions.getLoadUrlList(); - if (pos >= hostList.size()) { - pos = 0; - } - for (; pos < hostList.size(); pos++) { - String host = new StringBuilder("http://").append(hostList.get(pos)).toString(); + long tmp = pos + hostList.size(); + for (; pos < tmp; pos++) { + String host = new StringBuilder("http://").append(hostList.get((int) (pos % hostList.size()))).toString(); if (tryHttpConnection(host)) { return host; } From e4bcc0e50e045711ff1dab3f423bfa4030244ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E6=98=9F?= Date: Thu, 18 Nov 2021 16:55:02 +0800 Subject: [PATCH 110/251] feat: tsdb2tsdb [mput/username/password/database] --- package.xml | 7 + .../plugin/reader/tsdbreader/Constant.java | 2 + .../datax/plugin/reader/tsdbreader/Key.java | 5 + .../plugin/reader/tsdbreader/TSDBReader.java | 109 ++++-- .../tsdbreader/conn/Connection4TSDB.java | 27 +- .../tsdbreader/conn/TSDBConnection.java | 41 ++- .../reader/tsdbreader/conn/TSDBDump.java | 96 +++++- .../reader/tsdbreader/util/HttpUtils.java | 50 ++- .../reader/tsdbreader/util/TSDBUtils.java | 38 +- tsdbwriter/pom.xml | 7 + .../plugin/writer/conn/Connection4TSDB.java | 34 +- .../plugin/writer/conn/TSDBConnection.java | 38 +- .../datax/plugin/writer/tsdbwriter/Key.java | 16 +- .../writer/tsdbwriter/SourceDBType.java | 5 + .../writer/tsdbwriter/TSDBConverter.java | 96 ++++++ .../plugin/writer/tsdbwriter/TSDBModel.java | 11 + .../plugin/writer/tsdbwriter/TSDBWriter.java | 324 +++++++++++++++--- .../tsdbwriter/TSDBWriterErrorCode.java | 1 + .../datax/plugin/writer/util/HttpUtils.java | 56 ++- .../datax/plugin/writer/util/TSDBUtils.java | 38 +- 20 files changed, 805 insertions(+), 196 deletions(-) create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java diff --git a/package.xml b/package.xml index 49e3c4ec..3d86172b 100755 --- a/package.xml +++ b/package.xml @@ -357,6 +357,13 @@ datax + + tsdbreader/target/datax/ + + **/*.* + + datax + adbpgwriter/target/datax/ diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java index e42dedc0..f5069dc9 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java @@ -16,6 +16,8 @@ public final class Constant { static final String DEFAULT_DATA_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String METRIC_SPECIFY_KEY = "__metric__"; + public static final String METRIC_SPECIFY_KEY_PREFIX = METRIC_SPECIFY_KEY + "."; + public static final int METRIC_SPECIFY_KEY_PREFIX_LENGTH = METRIC_SPECIFY_KEY_PREFIX.length(); public static final String TS_SPECIFY_KEY = "__ts__"; public static final String VALUE_SPECIFY_KEY = "__value__"; diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java index 14ee7e41..c8a3d7ae 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java @@ -17,14 +17,19 @@ public class Key { // RDB for MySQL / ADB etc. static final String SINK_DB_TYPE = "sinkDbType"; static final String ENDPOINT = "endpoint"; + static final String USERNAME = "username"; + static final String PASSWORD = "password"; static final String COLUMN = "column"; static final String METRIC = "metric"; static final String FIELD = "field"; static final String TAG = "tag"; + static final String COMBINE = "combine"; static final String INTERVAL_DATE_TIME = "splitIntervalMs"; static final String BEGIN_DATE_TIME = "beginDateTime"; static final String END_DATE_TIME = "endDateTime"; + static final String HINT = "hint"; + static final Boolean COMBINE_DEFAULT_VALUE = false; static final Integer INTERVAL_DATE_TIME_DEFAULT_VALUE = 60; static final String TYPE_DEFAULT_VALUE = "TSDB"; static final Set TYPE_SET = new HashSet<>(); diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java index 04b931c7..550a010a 100755 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java @@ -60,6 +60,15 @@ public class TSDBReader extends Reader { "The parameter [" + Key.ENDPOINT + "] is not set."); } + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + // tagK / field could be empty if ("TSDB".equals(type)) { List columns = originalConfig.getList(Key.COLUMN, String.class); @@ -76,7 +85,14 @@ public class TSDBReader extends Reader { "The parameter [" + Key.COLUMN + "] is not set."); } for (String specifyKey : Constant.MUST_CONTAINED_SPECIFY_KEYS) { - if (!columns.contains(specifyKey)) { + boolean containSpecifyKey = false; + for (String column : columns) { + if (column.startsWith(specifyKey)) { + containSpecifyKey = true; + break; + } + } + if (!containSpecifyKey) { throw DataXException.asDataXException( TSDBReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.COLUMN + "] should contain " @@ -99,6 +115,8 @@ public class TSDBReader extends Reader { "The parameter [" + Key.INTERVAL_DATE_TIME + "] should be great than zero."); } + Boolean isCombine = originalConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + SimpleDateFormat format = new SimpleDateFormat(Constant.DEFAULT_DATA_FORMAT); String startTime = originalConfig.getString(Key.BEGIN_DATE_TIME); Long startDate; @@ -168,14 +186,14 @@ public class TSDBReader extends Reader { startTime = format.parse(originalConfig.getString(Key.BEGIN_DATE_TIME)).getTime(); } catch (ParseException e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "解析[" + Key.BEGIN_DATE_TIME + "]失败.", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Analysis [" + Key.BEGIN_DATE_TIME + "] failed.", e); } long endTime; try { endTime = format.parse(originalConfig.getString(Key.END_DATE_TIME)).getTime(); } catch (ParseException e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "解析[" + Key.END_DATE_TIME + "]失败.", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Analysis [" + Key.END_DATE_TIME + "] failed.", e); } if (TimeUtils.isSecond(startTime)) { startTime *= 1000; @@ -186,13 +204,14 @@ public class TSDBReader extends Reader { DateTime startDateTime = new DateTime(TimeUtils.getTimeInHour(startTime)); DateTime endDateTime = new DateTime(TimeUtils.getTimeInHour(endTime)); + final Boolean isCombine = originalConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + if ("TSDB".equals(type)) { - // split by metric - for (String column : columns4TSDB) { + if (isCombine) { // split by time in hour while (startDateTime.isBefore(endDateTime)) { Configuration clone = this.originalConfig.clone(); - clone.set(Key.COLUMN, Collections.singletonList(column)); + clone.set(Key.COLUMN, columns4TSDB); clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); startDateTime = startDateTime.plusMillis(splitIntervalMs); @@ -202,15 +221,30 @@ public class TSDBReader extends Reader { LOG.info("Configuration: {}", JSON.toJSONString(clone)); } + } else { + // split by time in hour + while (startDateTime.isBefore(endDateTime)) { + // split by metric + for (String column : columns4TSDB) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.COLUMN, Collections.singletonList(column)); + + clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); + startDateTime = startDateTime.plusMillis(splitIntervalMs); + // Make sure the time interval is [start, end). + clone.set(Key.END_DATE_TIME, startDateTime.getMillis() - 1); + configurations.add(clone); + + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } } } else { - // split by metric - for (String metric : metrics) { - // split by time in hour + if (isCombine) { while (startDateTime.isBefore(endDateTime)) { Configuration clone = this.originalConfig.clone(); clone.set(Key.COLUMN, columns4RDB); - clone.set(Key.METRIC, Collections.singletonList(metric)); + clone.set(Key.METRIC, metrics); clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); startDateTime = startDateTime.plusMillis(splitIntervalMs); @@ -220,6 +254,24 @@ public class TSDBReader extends Reader { LOG.info("Configuration: {}", JSON.toJSONString(clone)); } + } else { + // split by time in hour + while (startDateTime.isBefore(endDateTime)) { + // split by metric + for (String metric : metrics) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.COLUMN, columns4RDB); + clone.set(Key.METRIC, Collections.singletonList(metric)); + + clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); + startDateTime = startDateTime.plusMillis(splitIntervalMs); + // Make sure the time interval is [start, end). + clone.set(Key.END_DATE_TIME, startDateTime.getMillis() - 1); + configurations.add(clone); + + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } } } return configurations; @@ -247,6 +299,8 @@ public class TSDBReader extends Reader { private TSDBConnection conn; private Long startTime; private Long endTime; + private Boolean isCombine; + private Map hint; @Override public void init() { @@ -265,11 +319,16 @@ public class TSDBReader extends Reader { this.tags = readerSliceConfig.getMap(Key.TAG); String address = readerSliceConfig.getString(Key.ENDPOINT); + String username = readerSliceConfig.getString(Key.USERNAME); + String password = readerSliceConfig.getString(Key.PASSWORD); - conn = new TSDBConnection(address); + conn = new TSDBConnection(address, username, password); this.startTime = readerSliceConfig.getLong(Key.BEGIN_DATE_TIME); this.endTime = readerSliceConfig.getLong(Key.END_DATE_TIME); + + this.isCombine = readerSliceConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + this.hint = readerSliceConfig.getMap(Key.HINT); } @Override @@ -283,29 +342,35 @@ public class TSDBReader extends Reader { if ("TSDB".equals(type)) { for (String metric : columns4TSDB) { final Map tags = this.tags == null ? - null : (Map) this.tags.get(metric); + null : (Map) this.tags.get(metric); if (fields == null || !fields.containsKey(metric)) { - conn.sendDPs(metric, tags, this.startTime, this.endTime, recordSender); + conn.sendDPs(metric, tags, this.startTime, this.endTime, recordSender, hint); } else { conn.sendDPs(metric, (List) fields.get(metric), - tags, this.startTime, this.endTime, recordSender); + tags, this.startTime, this.endTime, recordSender, hint); } } } else { - for (String metric : metrics) { + if (isCombine) { final Map tags = this.tags == null ? - null : (Map) this.tags.get(metric); - if (fields == null || !fields.containsKey(metric)) { - conn.sendRecords(metric, tags, startTime, endTime, columns4RDB, recordSender); - } else { - conn.sendRecords(metric, (List) fields.get(metric), - tags, startTime, endTime, columns4RDB, recordSender); + null : (Map) this.tags.get(metrics.get(0)); + conn.sendRecords(metrics, tags, startTime, endTime, columns4RDB, recordSender, hint); + } else { + for (String metric : metrics) { + final Map tags = this.tags == null ? + null : (Map) this.tags.get(metric); + if (fields == null || !fields.containsKey(metric)) { + conn.sendRecords(metric, tags, startTime, endTime, columns4RDB, isCombine, recordSender, hint); + } else { + conn.sendRecords(metric, (List) fields.get(metric), + tags, startTime, endTime, columns4RDB, recordSender, hint); + } } } } } catch (Exception e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Error in getting or sending data point!", e); } } diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java index 500894bb..96cb7f9d 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java @@ -22,6 +22,20 @@ public interface Connection4TSDB { */ String address(); + /** + * Get the address of Database. + * + * @return host+ip + */ + String username(); + + /** + * Get the address of Database. + * + * @return host+ip + */ + String password(); + /** * Get the version of Database. * @@ -46,22 +60,27 @@ public interface Connection4TSDB { /** * Send data points for TSDB with single field. */ - void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender) throws Exception; + void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for TSDB with multi fields. */ - void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender) throws Exception; + void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for RDB with single field. */ - void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception; + void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, Boolean isCombine, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for RDB with multi fields. */ - void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception; + void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception; + + /** + * Send data points for RDB with single fields on combine mode. + */ + void sendRecords(List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception; /** * Put data point. diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java index 5426ab49..d466da39 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java @@ -19,9 +19,13 @@ import java.util.Map; public class TSDBConnection implements Connection4TSDB { private String address; + private String username; + private String password; - public TSDBConnection(String address) { + public TSDBConnection(String address, String username, String password) { this.address = address; + this.username = username; + this.password = password; } @Override @@ -29,14 +33,24 @@ public class TSDBConnection implements Connection4TSDB { return address; } + @Override + public String username() { + return username; + } + + @Override + public String password() { + return password; + } + @Override public String version() { - return TSDBUtils.version(address); + return TSDBUtils.version(address, username, password); } @Override public String config() { - return TSDBUtils.config(address); + return TSDBUtils.config(address, username, password); } @Override @@ -45,23 +59,28 @@ public class TSDBConnection implements Connection4TSDB { } @Override - public void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender) throws Exception { - TSDBDump.dump4TSDB(this, metric, tags, start, end, recordSender); + public void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4TSDB(this, metric, tags, start, end, recordSender, hint); } @Override - public void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender) throws Exception { - TSDBDump.dump4TSDB(this, metric, fields, tags, start, end, recordSender); + public void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4TSDB(this, metric, fields, tags, start, end, recordSender, hint); } @Override - public void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception { - TSDBDump.dump4RDB(this, metric, tags, start, end, columns4RDB, recordSender); + public void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, Boolean isCombine, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metric, tags, start, end, columns4RDB, recordSender, hint); } @Override - public void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception { - TSDBDump.dump4RDB(this, metric, fields, tags, start, end, columns4RDB, recordSender); + public void sendRecords(List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metrics, tags, start, end, columns4RDB, recordSender, hint); + } + + @Override + public void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metric, fields, tags, start, end, columns4RDB, recordSender, hint); } @Override diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java index 8bae3a70..c911a062 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java @@ -9,10 +9,9 @@ import com.alibaba.fastjson.parser.Feature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; + +import static com.alibaba.datax.plugin.reader.tsdbreader.Constant.METRIC_SPECIFY_KEY_PREFIX_LENGTH; /** * Copyright @ 2019 alibaba.com @@ -37,10 +36,10 @@ final class TSDBDump { } static void dump4TSDB(TSDBConnection conn, String metric, Map tags, - Long start, Long end, RecordSender sender) throws Exception { + Long start, Long end, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4SingleField(conn, metric, tags, start, end); + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); List dps = getDps4TSDB(metric, res); if (dps == null || dps.isEmpty()) { return; @@ -49,10 +48,10 @@ final class TSDBDump { } static void dump4TSDB(TSDBConnection conn, String metric, List fields, Map tags, - Long start, Long end, RecordSender sender) throws Exception { + Long start, Long end, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4MultiFields(conn, metric, fields, tags, start, end); + String res = queryRange4MultiFields(conn, metric, fields, tags, start, end, hint); List dps = getDps4TSDB(metric, fields, res); if (dps == null || dps.isEmpty()) { return; @@ -61,10 +60,10 @@ final class TSDBDump { } static void dump4RDB(TSDBConnection conn, String metric, Map tags, - Long start, Long end, List columns4RDB, RecordSender sender) throws Exception { + Long start, Long end, List columns4RDB, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4SingleField(conn, metric, tags, start, end); + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); List dps = getDps4RDB(metric, res); if (dps == null || dps.isEmpty()) { return; @@ -92,12 +91,71 @@ final class TSDBDump { } } + public static void dump4RDB(TSDBConnection conn, List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender sender, Map hint) throws Exception { + LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metrics, start, end); + + List dps = new LinkedList<>(); + for (String metric : metrics) { + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); + final List dpList = getDps4RDB(metric, res); + if (dpList == null || dpList.isEmpty()) { + continue; + } + dps.addAll(dpList); + } + if (dps.isEmpty()) { + return; + } + Map> dpsCombinedByTs = new LinkedHashMap<>(); + for (DataPoint4TSDB dp : dps) { + final long ts = dp.getTimestamp(); + final Map dpsWithSameTs = dpsCombinedByTs.computeIfAbsent(ts, k -> new LinkedHashMap<>()); + dpsWithSameTs.put(dp.getMetric(), dp); + } + + for (Map.Entry> entry : dpsCombinedByTs.entrySet()) { + final Long ts = entry.getKey(); + final Map metricAndDps = entry.getValue(); + final Record record = sender.createRecord(); + DataPoint4TSDB tmpDp = null; + + for (final String column : columns4RDB) { + if (column.startsWith(Constant.METRIC_SPECIFY_KEY)) { + final String m = column.substring(METRIC_SPECIFY_KEY_PREFIX_LENGTH); + tmpDp = metricAndDps.get(m); + if (tmpDp == null) { + continue; + } + record.addColumn(getColumn(tmpDp.getValue())); + } else if (Constant.TS_SPECIFY_KEY.equals(column)) { + record.addColumn(new LongColumn(ts)); + } else if (Constant.VALUE_SPECIFY_KEY.equals(column)) { + // combine 模式下,不应该定义 __value__ 字段,因为 __metric__.xxx 字段会输出对应的 value 值 + throw new RuntimeException("The " + Constant.VALUE_SPECIFY_KEY + + " column should not be specified in combine mode!"); + } else { + // combine 模式下,应该确保 __metric__.xxx 字段的定义,放在 column 数组的最前面,以保证获取到 metric + if (tmpDp == null) { + throw new RuntimeException("These " + Constant.METRIC_SPECIFY_KEY_PREFIX + + " column should be placed first in the column array in combine mode!"); + } + final Object tagv = tmpDp.getTags().get(column); + if (tagv == null) { + continue; + } + record.addColumn(getColumn(tagv)); + } + } + sender.sendToWriter(record); + } + } + static void dump4RDB(TSDBConnection conn, String metric, List fields, Map tags, Long start, Long end, - List columns4RDB, RecordSender sender) throws Exception { + List columns4RDB, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4MultiFields(conn, metric, fields, tags, start, end); + String res = queryRange4MultiFields(conn, metric, fields, tags, start, end, hint); List dps = getDps4RDB(metric, fields, res); if (dps == null || dps.isEmpty()) { return; @@ -131,14 +189,16 @@ final class TSDBDump { valueColumn = new LongColumn((Long) value); } else if (value instanceof String) { valueColumn = new StringColumn((String) value); + } else if (value instanceof Integer) { + valueColumn = new LongColumn(((Integer)value).longValue()); } else { - throw new Exception(String.format("value 不支持类型: [%s]", value.getClass().getSimpleName())); + throw new Exception(String.format("value not supported type: [%s]", value.getClass().getSimpleName())); } return valueColumn; } private static String queryRange4SingleField(TSDBConnection conn, String metric, Map tags, - Long start, Long end) throws Exception { + Long start, Long end, Map hint) throws Exception { String tagKV = getFilterByTags(tags); String body = "{\n" + " \"start\": " + start + ",\n" + @@ -148,14 +208,15 @@ final class TSDBDump { " \"aggregator\": \"none\",\n" + " \"metric\": \"" + metric + "\"\n" + (tagKV == null ? "" : tagKV) + + (hint == null ? "" : (", \"hint\": " + JSON.toJSONString(hint))) + " }\n" + " ]\n" + "}"; - return HttpUtils.post(conn.address() + QUERY, body); + return HttpUtils.post(conn.address() + QUERY, conn.username(), conn.password(), body); } private static String queryRange4MultiFields(TSDBConnection conn, String metric, List fields, - Map tags, Long start, Long end) throws Exception { + Map tags, Long start, Long end, Map hint) throws Exception { // fields StringBuilder fieldBuilder = new StringBuilder(); fieldBuilder.append("\"fields\":["); @@ -177,10 +238,11 @@ final class TSDBDump { " \"metric\": \"" + metric + "\",\n" + fieldBuilder.toString() + (tagKV == null ? "" : tagKV) + + (hint == null ? "" : (", \"hint\": " + JSON.toJSONString(hint))) + " }\n" + " ]\n" + "}"; - return HttpUtils.post(conn.address() + QUERY_MULTI_FIELD, body); + return HttpUtils.post(conn.address() + QUERY_MULTI_FIELD, conn.username(), conn.password(), body); } private static String getFilterByTags(Map tags) { diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java index 3e0be854..5cba4e54 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java @@ -1,11 +1,13 @@ package com.alibaba.datax.plugin.reader.tsdbreader.util; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.fluent.Content; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType; import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -22,13 +24,18 @@ public final class HttpUtils { public final static int CONNECT_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); public final static int SOCKET_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); + private static final String CREDENTIALS_FORMAT = "%s:%s"; + private static final String BASIC_AUTHENTICATION_FORMAT = "Basic %s"; + private HttpUtils() { } - public static String get(String url) throws Exception { - Content content = Request.Get(url) + public static String get(String url, String username, String password) throws Exception { + final Request request = Request.Get(url) .connectTimeout(CONNECT_TIMEOUT_DEFAULT_IN_MILL) - .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL) + .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL); + addAuth(request, username, password); + Content content = request .execute() .returnContent(); if (content == null) { @@ -37,24 +44,21 @@ public final class HttpUtils { return content.asString(StandardCharsets.UTF_8); } - public static String post(String url, Map params) throws Exception { - return post(url, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, Map params) throws Exception { + return post(url, username, password, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, String params) throws Exception { - return post(url, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, String params) throws Exception { + return post(url, username, password, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, Map params, + public static String post(String url, String username, String password, String params, int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - return post(url, JSON.toJSONString(params), connectTimeoutInMill, socketTimeoutInMill); - } - - public static String post(String url, String params, - int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - Content content = Request.Post(url) + Request request = Request.Post(url) .connectTimeout(connectTimeoutInMill) - .socketTimeout(socketTimeoutInMill) + .socketTimeout(socketTimeoutInMill); + addAuth(request, username, password); + Content content = request .addHeader("Content-Type", "application/json") .bodyString(params, ContentType.APPLICATION_JSON) .execute() @@ -64,4 +68,20 @@ public final class HttpUtils { } return content.asString(StandardCharsets.UTF_8); } + + private static void addAuth(Request request, String username, String password) { + String authorization = generateHttpAuthorization(username, password); + if (authorization != null) { + request.setHeader("Authorization", authorization); + } + } + + private static String generateHttpAuthorization(String username, String password) { + if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { + return null; + } + String credentials = String.format(CREDENTIALS_FORMAT, username, password); + credentials = Base64.getEncoder().encodeToString(credentials.getBytes()); + return String.format(BASIC_AUTHENTICATION_FORMAT, credentials); + } } diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java index bb7b4b87..d91c3557 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java @@ -1,11 +1,5 @@ package com.alibaba.datax.plugin.reader.tsdbreader.util; -import com.alibaba.datax.plugin.reader.tsdbreader.conn.DataPoint4TSDB; -import com.alibaba.fastjson.JSON; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; /** * Copyright @ 2019 alibaba.com @@ -17,52 +11,28 @@ import java.util.List; */ public final class TSDBUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(TSDBUtils.class); - private TSDBUtils() { } - public static String version(String address) { + public static String version(String address, String username, String password) { String url = String.format("%s/api/version", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static String config(String address) { + public static String config(String address, String username, String password) { String url = String.format("%s/api/config", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - - public static boolean put(String address, List dps) { - return put(address, JSON.toJSON(dps)); - } - - public static boolean put(String address, DataPoint4TSDB dp) { - return put(address, JSON.toJSON(dp)); - } - - private static boolean put(String address, Object o) { - String url = String.format("%s/api/put", address); - String rsp; - try { - rsp = HttpUtils.post(url, o.toString()); - // If successful, the returned content should be null. - assert rsp == null; - } catch (Exception e) { - LOGGER.error("Address: {}, DataPoints: {}", url, o); - throw new RuntimeException(e); - } - return true; - } } diff --git a/tsdbwriter/pom.xml b/tsdbwriter/pom.xml index 1fb7c1e0..fd4cc6f5 100644 --- a/tsdbwriter/pom.xml +++ b/tsdbwriter/pom.xml @@ -91,6 +91,13 @@ ${fastjson.version} + + + com.aliyun + hitsdb-client + 0.4.0-SNAPSHOT + + junit diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java index 8119348d..ecb30055 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java @@ -21,6 +21,28 @@ public interface Connection4TSDB { */ String address(); + /** + * Get the setted database name. + * + * @return database + */ + String database(); + + + /** + * Get the username of Database. + * + * @return username + */ + String username(); + + /** + * Get the password of Database. + * + * @return password + */ + String password(); + /** * Get the version of Database. * @@ -69,17 +91,25 @@ public interface Connection4TSDB { boolean put(List dps); /** - * Put data points. + * Put data points with single field. * * @param dps data points * @return whether the data point is written successfully */ boolean put(String dps); + /** + * Put data points with multi fields. + * + * @param dps data points + * @return whether the data point is written successfully + */ + boolean mput(String dps); + /** * Whether current version is supported. * * @return true: supported; false: not yet! */ boolean isSupported(); -} +} \ No newline at end of file diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java index e4ebad7d..074f0295 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java @@ -18,12 +18,18 @@ import java.util.List; public class TSDBConnection implements Connection4TSDB { private String address; + private String username; + private String password; + private String database; - public TSDBConnection(String address) { + public TSDBConnection(String address, String database, String username, String password) { if (StringUtils.isBlank(address)) { throw new RuntimeException("TSDBConnection init failed because address is blank!"); } this.address = address; + this.database = database; + this.username = username; + this.password = password; } @Override @@ -31,14 +37,29 @@ public class TSDBConnection implements Connection4TSDB { return address; } + @Override + public String username() { + return username; + } + + @Override + public String database() { + return database; + } + + @Override + public String password() { + return password; + } + @Override public String version() { - return TSDBUtils.version(address); + return TSDBUtils.version(address, username, password); } @Override public String config() { - return TSDBUtils.config(address); + return TSDBUtils.config(address, username, password); } @Override @@ -53,17 +74,22 @@ public class TSDBConnection implements Connection4TSDB { @Override public boolean put(DataPoint4TSDB dp) { - return TSDBUtils.put(address, dp); + return TSDBUtils.put(address, database, username, password, dp); } @Override public boolean put(List dps) { - return TSDBUtils.put(address, dps); + return TSDBUtils.put(address, database, username, password, dps); } @Override public boolean put(String dps) { - return TSDBUtils.put(address, dps); + return TSDBUtils.put(address, database, username, password, dps); + } + + @Override + public boolean mput(String dps) { + return TSDBUtils.mput(address, database, username, password, dps); } @Override diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java index 2cc3f671..6cb239ec 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java @@ -10,8 +10,22 @@ package com.alibaba.datax.plugin.writer.tsdbwriter; */ public class Key { + static final String SOURCE_DB_TYPE = "sourceDbType"; + static final String MULTI_FIELD = "multiField"; + + // common static final String ENDPOINT = "endpoint"; + static final String USERNAME = "username"; + static final String PASSWORD = "password"; + static final String IGNORE_WRITE_ERROR = "ignoreWriteError"; + static final String DATABASE = "database"; + + // for tsdb static final String BATCH_SIZE = "batchSize"; static final String MAX_RETRY_TIME = "maxRetryTime"; - static final String IGNORE_WRITE_ERROR = "ignoreWriteError"; + + // for rdb + static final String COLUMN = "column"; + static final String COLUMN_TYPE = "columnType"; + static final String TABLE = "table"; } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java new file mode 100644 index 00000000..792806a6 --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +public enum SourceDBType { + TSDB, RDB +} diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java new file mode 100644 index 00000000..86e35c56 --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java @@ -0,0 +1,96 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.fastjson.JSON; +import com.aliyun.hitsdb.client.value.request.MultiFieldPoint; +import com.aliyun.hitsdb.client.value.request.Point; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class TSDBConverter { + + private static final Logger LOG = LoggerFactory.getLogger(TSDBConverter.class); + + private List columnName; + private List columnType; + + TSDBConverter(List columnName, List columnType) { + this.columnName = columnName; + this.columnType = columnType; + LOG.info("columnName: {}, columnType: {}", JSON.toJSONString(columnName), JSON.toJSONString(columnType)); + } + + List transRecord2Point(List records) { + List dps = new ArrayList(); + for (Record record : records) { + List metricBuilders = new ArrayList(); + Map tags = new HashMap(); + Long time = 0L; + + for (int i = 0; i < columnType.size(); i++) { + String type = columnType.get(i); + String name = columnName.get(i); + Column column = record.getColumn(i); + if (TSDBModel.TSDB_TAG.equals(type)) { + tags.put(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asDouble())); + } else if (TSDBModel.TSDB_FIELD_STRING.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asString())); + } else if (TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asBoolean())); + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + time = column.asLong(); + } else if (TSDBModel.TSDB_METRIC_NUM.equals(type)) { + // compatible with previous usage of TSDB_METRIC_NUM + metricBuilders.add(new Point.MetricBuilder(name).value(column.asDouble())); + } else if (TSDBModel.TSDB_METRIC_STRING.equals(type)) { + // compatible with previous usage of TSDB_METRIC_STRING + metricBuilders.add(new Point.MetricBuilder(name).value(column.asString())); + } + } + for (Point.MetricBuilder metricBuilder : metricBuilders) { + dps.add(metricBuilder.tag(tags).timestamp(time).build(false)); + } + } + return dps; + } + + List transRecord2MultiFieldPoint(List records, String tableName) { + List dps = new ArrayList(); + for (Record record : records) { + MultiFieldPoint.MetricBuilder builder = MultiFieldPoint.metric(tableName); + for (int i = 0; i < columnType.size(); i++) { + String type = columnType.get(i); + String name = columnName.get(i); + Column column = record.getColumn(i); + if (TSDBModel.TSDB_TAG.equals(type)) { + builder.tag(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type)) { + builder.field(name, column.asDouble()); + } else if (TSDBModel.TSDB_FIELD_STRING.equals(type)) { + builder.field(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + builder.field(name, column.asBoolean()); + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + builder.timestamp(column.asLong()); + } else if (TSDBModel.TSDB_METRIC_NUM.equals(type)) { + // compatible with previous usage of TSDB_METRIC_NUM + builder.field(name, column.asDouble()); + } else if (TSDBModel.TSDB_METRIC_STRING.equals(type)) { + // compatible with previous usage of TSDB_METRIC_STRING + builder.field(name, column.asString()); + } + } + MultiFieldPoint point = builder.build(false); + dps.add(point); + } + return dps; + } +} diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java new file mode 100644 index 00000000..ead0e2cc --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java @@ -0,0 +1,11 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +class TSDBModel { + static final String TSDB_METRIC_NUM = "metric_num"; + static final String TSDB_METRIC_STRING = "metric_string"; + static final String TSDB_TAG = "tag"; + static final String TSDB_TIMESTAMP = "timestamp"; + static final String TSDB_FIELD_DOUBLE = "field_double"; + static final String TSDB_FIELD_STRING = "field_string"; + static final String TSDB_FIELD_BOOL = "field_bool"; +} \ No newline at end of file diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java index e410b2ba..85a32a07 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java @@ -7,12 +7,20 @@ import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.common.util.RetryUtil; import com.alibaba.datax.plugin.writer.conn.TSDBConnection; +import com.aliyun.hitsdb.client.TSDB; +import com.aliyun.hitsdb.client.TSDBClientFactory; +import com.aliyun.hitsdb.client.TSDBConfig; +import com.aliyun.hitsdb.client.value.request.MultiFieldPoint; +import com.aliyun.hitsdb.client.value.request.Point; +import com.aliyun.hitsdb.client.value.response.batch.IgnoreErrorsResult; +import com.aliyun.hitsdb.client.value.response.batch.MultiFieldIgnoreErrorsResult; +import com.aliyun.hitsdb.client.value.response.batch.SummaryResult; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; import java.util.concurrent.Callable; /** @@ -26,6 +34,9 @@ import java.util.concurrent.Callable; @SuppressWarnings("unused") public class TSDBWriter extends Writer { + private static SourceDBType DB_TYPE; + private static TSDB tsdb = null; + public static class Job extends Writer.Job { private static final Logger LOG = LoggerFactory.getLogger(Job.class); @@ -34,33 +45,99 @@ public class TSDBWriter extends Writer { @Override public void init() { - this.originalConfig = super.getPluginJobConf(); + originalConfig = super.getPluginJobConf(); - String address = this.originalConfig.getString(Key.ENDPOINT); - if (StringUtils.isBlank(address)) { + // check source db type + String sourceDbType = originalConfig.getString(Key.SOURCE_DB_TYPE); + if (StringUtils.isBlank(sourceDbType)) { + sourceDbType = SourceDBType.TSDB.name(); + originalConfig.set(Key.SOURCE_DB_TYPE, sourceDbType); + LOG.info("The parameter [" + Key.SOURCE_DB_TYPE + "] will be default value: " + SourceDBType.TSDB); + } + try { + DB_TYPE = SourceDBType.valueOf(sourceDbType); + } catch (Exception e) { throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, - "The parameter [" + Key.ENDPOINT + "] is not set."); + "The parameter [" + Key.SOURCE_DB_TYPE + + "] is invalid, which should be one of [" + Arrays.toString(SourceDBType.values()) + "]."); } - Integer batchSize = this.originalConfig.getInt(Key.BATCH_SIZE); - if (batchSize == null || batchSize < 1) { - originalConfig.set(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); - LOG.info("The parameter [" + Key.BATCH_SIZE + - "] will be default value: " + Constant.DEFAULT_BATCH_SIZE); - } + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + String address = originalConfig.getString(Key.ENDPOINT); + if (StringUtils.isBlank(address)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.ENDPOINT + "] is not set."); + } - Integer retrySize = this.originalConfig.getInt(Key.MAX_RETRY_TIME); - if (retrySize == null || retrySize < 0) { - originalConfig.set(Key.MAX_RETRY_TIME, Constant.DEFAULT_TRY_SIZE); - LOG.info("The parameter [" + Key.MAX_RETRY_TIME + - "] will be default value: " + Constant.DEFAULT_TRY_SIZE); - } + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + + Integer batchSize = originalConfig.getInt(Key.BATCH_SIZE); + if (batchSize == null || batchSize < 1) { + originalConfig.set(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); + LOG.info("The parameter [" + Key.BATCH_SIZE + + "] will be default value: " + Constant.DEFAULT_BATCH_SIZE); + } + + Integer retrySize = originalConfig.getInt(Key.MAX_RETRY_TIME); + if (retrySize == null || retrySize < 0) { + originalConfig.set(Key.MAX_RETRY_TIME, Constant.DEFAULT_TRY_SIZE); + LOG.info("The parameter [" + Key.MAX_RETRY_TIME + + "] will be default value: " + Constant.DEFAULT_TRY_SIZE); + } + + Boolean ignoreWriteError = originalConfig.getBool(Key.IGNORE_WRITE_ERROR); + if (ignoreWriteError == null) { + originalConfig.set(Key.IGNORE_WRITE_ERROR, Constant.DEFAULT_IGNORE_WRITE_ERROR); + LOG.info("The parameter [" + Key.IGNORE_WRITE_ERROR + + "] will be default value: " + Constant.DEFAULT_IGNORE_WRITE_ERROR); + } + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + originalConfig.getNecessaryValue(Key.ENDPOINT, TSDBWriterErrorCode.REQUIRED_VALUE); + originalConfig.getNecessaryValue(Key.COLUMN_TYPE, TSDBWriterErrorCode.REQUIRED_VALUE); + originalConfig.getNecessaryValue(Key.COLUMN, TSDBWriterErrorCode.REQUIRED_VALUE); + String endpoint = originalConfig.getString(Key.ENDPOINT); + String[] split = endpoint.split(":"); + if (split.length != 3) { + throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.ENDPOINT + "] is invalid, which should be [http://IP:Port]."); + } + String ip = split[1].substring(2); + int port = Integer.parseInt(split[2]); + + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + + if (!StringUtils.isBlank(password) && !StringUtils.isBlank(username)) { + tsdb = TSDBClientFactory.connect(TSDBConfig.address(ip, port).basicAuth(username, password).config()); + } else { + tsdb = TSDBClientFactory.connect(TSDBConfig.address(ip, port).config()); + } + + String database = originalConfig.getString(Key.DATABASE, null); + if (StringUtils.isBlank(database)) { + LOG.info("The parameter [" + Key.DATABASE + "] is blank."); + } else { + tsdb.useDatabase(database); + } + + LOG.info("Tsdb config:" + originalConfig.toJSON()); - Boolean ignoreWriteError = this.originalConfig.getBool(Key.IGNORE_WRITE_ERROR); - if (ignoreWriteError == null) { - originalConfig.set(Key.IGNORE_WRITE_ERROR, Constant.DEFAULT_IGNORE_WRITE_ERROR); - LOG.info("The parameter [" + Key.IGNORE_WRITE_ERROR + - "] will be default value: " + Constant.DEFAULT_IGNORE_WRITE_ERROR); } } @@ -72,7 +149,7 @@ public class TSDBWriter extends Writer { public List split(int mandatoryNumber) { ArrayList configurations = new ArrayList(mandatoryNumber); for (int i = 0; i < mandatoryNumber; i++) { - configurations.add(this.originalConfig.clone()); + configurations.add(originalConfig.clone()); } return configurations; } @@ -83,6 +160,14 @@ public class TSDBWriter extends Writer { @Override public void destroy() { + if (DB_TYPE == SourceDBType.RDB) { + if (tsdb != null) { + try { + tsdb.close(); + } catch (IOException ignored) { + } + } + } } } @@ -91,18 +176,87 @@ public class TSDBWriter extends Writer { private static final Logger LOG = LoggerFactory.getLogger(Task.class); private TSDBConnection conn; + private boolean multiField; private int batchSize; private int retrySize; private boolean ignoreWriteError; + private String tableName; + private TSDBConverter tsdbConverter; @Override public void init() { Configuration writerSliceConfig = getPluginJobConf(); - String address = writerSliceConfig.getString(Key.ENDPOINT); - this.conn = new TSDBConnection(address); - this.batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE); - this.retrySize = writerSliceConfig.getInt(Key.MAX_RETRY_TIME); + + // single field | multi fields + this.multiField = writerSliceConfig.getBool(Key.MULTI_FIELD, false); this.ignoreWriteError = writerSliceConfig.getBool(Key.IGNORE_WRITE_ERROR); + + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + String address = writerSliceConfig.getString(Key.ENDPOINT); + String database = writerSliceConfig.getString(Key.DATABASE); + String username = writerSliceConfig.getString(Key.USERNAME); + String password = writerSliceConfig.getString(Key.PASSWORD); + this.conn = new TSDBConnection(address, database, username, password); + this.batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE); + this.retrySize = writerSliceConfig.getInt(Key.MAX_RETRY_TIME); + + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + int timeSize = 0; + int fieldSize = 0; + int tagSize = 0; + batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE, 100); + List columnName = writerSliceConfig.getList(Key.COLUMN, String.class); + List columnType = writerSliceConfig.getList(Key.COLUMN_TYPE, String.class); + Set typeSet = new HashSet(columnType); + if (columnName.size() != columnType.size()) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] should has same length with [" + Key.COLUMN + "]."); + } + + for (String type : columnType) { + if (TSDBModel.TSDB_TAG.equals(type)) { + tagSize ++; + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type) || TSDBModel.TSDB_FIELD_STRING.equals(type) + || TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + fieldSize++; + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + timeSize++; + } + } + + if (fieldSize == 0) { + // compatible with previous usage of TSDB_METRIC_NUM and TSDB_METRIC_STRING + if (!typeSet.contains(TSDBModel.TSDB_METRIC_NUM) && !typeSet.contains(TSDBModel.TSDB_METRIC_STRING)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set at least one of " + + TSDBModel.TSDB_FIELD_DOUBLE + ", " + TSDBModel.TSDB_FIELD_STRING + " or " + TSDBModel.TSDB_FIELD_BOOL + "."); + } + } + + if (tagSize == 0) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set " + TSDBModel.TSDB_TAG + ". "); + } + + if (timeSize != 1) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set one and only one " + + TSDBModel.TSDB_TIMESTAMP + "."); + } + + if (multiField) { + // check source db type + tableName = writerSliceConfig.getString(Key.TABLE); + if (StringUtils.isBlank(tableName)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.TABLE + "] h must set when use multi field input."); + } + } + tsdbConverter = new TSDBConverter(columnName, columnType); + + } } @Override @@ -111,30 +265,52 @@ public class TSDBWriter extends Writer { @Override public void startWrite(RecordReceiver recordReceiver) { - try { - Record lastRecord = null; - Record record; - int count = 0; - StringBuilder dps = new StringBuilder(); - while ((record = recordReceiver.getFromReader()) != null) { - final int recordLength = record.getColumnNumber(); - for (int i = 0; i < recordLength; i++) { - dps.append(record.getColumn(i).asString()); - dps.append(","); - count++; - if (count == batchSize) { - count = 0; - batchPut(record, "[" + dps.substring(0, dps.length() - 1) + "]"); - dps = new StringBuilder(); + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + try { + Record lastRecord = null; + Record record; + int count = 0; + StringBuilder dps = new StringBuilder(); + while ((record = recordReceiver.getFromReader()) != null) { + final int recordLength = record.getColumnNumber(); + for (int i = 0; i < recordLength; i++) { + dps.append(record.getColumn(i).asString()); + dps.append(","); + count++; + if (count == batchSize) { + count = 0; + batchPut(record, "[" + dps.substring(0, dps.length() - 1) + "]"); + dps = new StringBuilder(); + } } + lastRecord = record; } - lastRecord = record; + if (StringUtils.isNotBlank(dps.toString())) { + batchPut(lastRecord, "[" + dps.substring(0, dps.length() - 1) + "]"); + } + } catch (Exception e) { + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, e); } - if (StringUtils.isNotBlank(dps.toString())) { - batchPut(lastRecord, "[" + dps.substring(0, dps.length() - 1) + "]"); + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + List writerBuffer = new ArrayList(this.batchSize); + Record record; + long total = 0; + while ((record = recordReceiver.getFromReader()) != null) { + writerBuffer.add(record); + if (writerBuffer.size() >= this.batchSize) { + total += doBatchInsert(writerBuffer); + writerBuffer.clear(); + } } - } catch (Exception e) { - throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, e); + if (!writerBuffer.isEmpty()) { + total += doBatchInsert(writerBuffer); + writerBuffer.clear(); + } + getTaskPluginCollector().collectMessage("write size", total + ""); + LOG.info("Task finished, write size: {}", total); + } } @@ -143,12 +319,13 @@ public class TSDBWriter extends Writer { RetryUtil.executeWithRetry(new Callable() { @Override public Integer call() { - if (!conn.put(dps)) { - getTaskPluginCollector().collectDirtyRecord(record, "Put data points failed!"); - throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, - "Put data points failed!"); + final boolean success = multiField ? conn.mput(dps) : conn.put(dps); + if (success) { + return 0; } - return 0; + getTaskPluginCollector().collectDirtyRecord(record, "Put data points failed!"); + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, + "Put data points failed!"); } }, retrySize, 60000L, true); } catch (Exception e) { @@ -160,6 +337,47 @@ public class TSDBWriter extends Writer { } } + private long doBatchInsert(final List writerBuffer) { + int size; + if (ignoreWriteError) { + if (multiField) { + List points = tsdbConverter.transRecord2MultiFieldPoint(writerBuffer, tableName); + size = points.size(); + MultiFieldIgnoreErrorsResult ignoreErrorsResult = tsdb.multiFieldPutSync(points, MultiFieldIgnoreErrorsResult.class); + if (ignoreErrorsResult == null) { + LOG.error("Unexpected inner error for insert"); + } else if (ignoreErrorsResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + ignoreErrorsResult.getFailed()); + } + } else { + List points = tsdbConverter.transRecord2Point(writerBuffer); + size = points.size(); + IgnoreErrorsResult ignoreErrorsResult = tsdb.putSync(points, IgnoreErrorsResult.class); + if (ignoreErrorsResult == null) { + LOG.error("Unexpected inner error for insert"); + } else if (ignoreErrorsResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + ignoreErrorsResult.getFailed()); + } + } + } else { + SummaryResult summaryResult; + if (multiField) { + List points = tsdbConverter.transRecord2MultiFieldPoint(writerBuffer, tableName); + size = points.size(); + summaryResult = tsdb.multiFieldPutSync(points, SummaryResult.class); + } else { + List points = tsdbConverter.transRecord2Point(writerBuffer); + size = points.size(); + summaryResult = tsdb.putSync(points, SummaryResult.class); + } + if (summaryResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + summaryResult.getFailed()); + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, "Write TSDB failed", new Exception()); + } + } + return size; + } + @Override public void post() { } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java index f907fb67..ab4c3894 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java @@ -13,6 +13,7 @@ import com.alibaba.datax.common.spi.ErrorCode; public enum TSDBWriterErrorCode implements ErrorCode { REQUIRED_VALUE("TSDBWriter-00", "Missing the necessary value"), + ILLEGAL_VALUE("TSDBWriter-01", "Illegal value"), RUNTIME_EXCEPTION("TSDBWriter-01", "Runtime exception"), RETRY_WRITER_EXCEPTION("TSDBWriter-02", "After repeated attempts, the write still fails"); diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java index b81512f7..29b14dab 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java @@ -1,11 +1,14 @@ package com.alibaba.datax.plugin.writer.util; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.fluent.Content; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -19,43 +22,44 @@ import java.util.concurrent.TimeUnit; */ public final class HttpUtils { - public final static Charset UTF_8 = Charset.forName("UTF-8"); public final static int CONNECT_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); public final static int SOCKET_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); + private static final String CREDENTIALS_FORMAT = "%s:%s"; + private static final String BASIC_AUTHENTICATION_FORMAT = "Basic %s"; + private HttpUtils() { } - public static String get(String url) throws Exception { - Content content = Request.Get(url) + public static String get(String url, String username, String password) throws Exception { + final Request request = Request.Get(url) .connectTimeout(CONNECT_TIMEOUT_DEFAULT_IN_MILL) - .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL) + .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL); + addAuth(request, username, password); + Content content = request .execute() .returnContent(); if (content == null) { return null; } - return content.asString(UTF_8); + return content.asString(StandardCharsets.UTF_8); } - public static String post(String url, Map params) throws Exception { - return post(url, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, Map params) throws Exception { + return post(url, username, password, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, String params) throws Exception { - return post(url, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, String params) throws Exception { + return post(url, username, password, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, Map params, + public static String post(String url, String username, String password, String params, int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - return post(url, JSON.toJSONString(params), connectTimeoutInMill, socketTimeoutInMill); - } - - public static String post(String url, String params, - int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - Content content = Request.Post(url) + Request request = Request.Post(url) .connectTimeout(connectTimeoutInMill) - .socketTimeout(socketTimeoutInMill) + .socketTimeout(socketTimeoutInMill); + addAuth(request, username, password); + Content content = request .addHeader("Content-Type", "application/json") .bodyString(params, ContentType.APPLICATION_JSON) .execute() @@ -63,6 +67,22 @@ public final class HttpUtils { if (content == null) { return null; } - return content.asString(UTF_8); + return content.asString(StandardCharsets.UTF_8); + } + + private static void addAuth(Request request, String username, String password) { + String authorization = generateHttpAuthorization(username, password); + if (authorization != null) { + request.setHeader("Authorization", authorization); + } + } + + private static String generateHttpAuthorization(String username, String password) { + if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { + return null; + } + String credentials = String.format(CREDENTIALS_FORMAT, username, password); + credentials = Base64.getEncoder().encodeToString(credentials.getBytes()); + return String.format(BASIC_AUTHENTICATION_FORMAT, credentials); } } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java index ed01d877..d57c5935 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java @@ -2,6 +2,7 @@ package com.alibaba.datax.plugin.writer.util; import com.alibaba.datax.plugin.writer.conn.DataPoint4TSDB; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,45 +23,56 @@ public final class TSDBUtils { private TSDBUtils() { } - public static String version(String address) { + public static String version(String address, String username, String password) { String url = String.format("%s/api/version", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static String config(String address) { + public static String config(String address, String username, String password) { String url = String.format("%s/api/config", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static boolean put(String address, List dps) { - return put(address, JSON.toJSON(dps)); + public static boolean put(String address, String database, String username, String password, List dps) { + return put(address, database, username, password, JSON.toJSON(dps)); } - public static boolean put(String address, DataPoint4TSDB dp) { - return put(address, JSON.toJSON(dp)); + public static boolean put(String address, String database, String username, String password, DataPoint4TSDB dp) { + return put(address, database, username, password, JSON.toJSON(dp)); } - private static boolean put(String address, Object o) { - return put(address, o.toString()); + private static boolean put(String address, String database, String username, String password, Object o) { + return put(address, database, username, password, o.toString()); } - public static boolean put(String address, String s) { - String url = String.format("%s/api/put", address); + public static boolean put(String address, String database, String username, String password, String s) { + return put(address, database, username, password, s, false); + } + + public static boolean mput(String address, String database, String username, String password, String s) { + return put(address, database, username, password, s, true); + } + + public static boolean put(String address, String database, String username, String password, String s, boolean multiField) { + String url = address + (multiField ? "/api/mput" : "/api/put"); + if (!StringUtils.isBlank(database)) { + url = url.concat("?db=" + database); + } String rsp; try { - rsp = HttpUtils.post(url, s); + rsp = HttpUtils.post(url, username, password, s); // If successful, the returned content should be null. assert rsp == null; } catch (Exception e) { From f2f4a1cf5e3ac5fe418ac67b739c9beffeeb7d8b Mon Sep 17 00:00:00 2001 From: dingbo Date: Wed, 15 Dec 2021 15:31:03 +0800 Subject: [PATCH 111/251] Use UTF-8 as default charset --- .../plugin/writer/tdenginewriter/DefaultDataHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 91c2b7e3..a8704f24 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -3,6 +3,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.taosdata.jdbc.TSDBDriver; import com.taosdata.jdbc.TSDBPreparedStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,8 +77,10 @@ public class DefaultDataHandler implements DataHandler { return null; } String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", host, port, dbname, user, password); + Properties connProps = new Properties(); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); LOG.info("TDengine connection established, host:{} port:{} dbname:{} user:{}", host, port, dbname, user); - return DriverManager.getConnection(jdbcUrl); + return DriverManager.getConnection(jdbcUrl, connProps); } /** From 6d27133ff4a1be5735d8a8ceb19b5d5cabf3f333 Mon Sep 17 00:00:00 2001 From: dingbo Date: Wed, 15 Dec 2021 15:31:03 +0800 Subject: [PATCH 112/251] Use UTF-8 as default charset --- .../plugin/writer/tdenginewriter/DefaultDataHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 91c2b7e3..a8704f24 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -3,6 +3,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.taosdata.jdbc.TSDBDriver; import com.taosdata.jdbc.TSDBPreparedStatement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,8 +77,10 @@ public class DefaultDataHandler implements DataHandler { return null; } String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", host, port, dbname, user, password); + Properties connProps = new Properties(); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); LOG.info("TDengine connection established, host:{} port:{} dbname:{} user:{}", host, port, dbname, user); - return DriverManager.getConnection(jdbcUrl); + return DriverManager.getConnection(jdbcUrl, connProps); } /** From 12483fe75a9d064ffca31d8493069687ac89aa5c Mon Sep 17 00:00:00 2001 From: zyyang Date: Thu, 16 Dec 2021 11:36:44 +0800 Subject: [PATCH 113/251] [TD-10786]: tdenginereader implementation --- package.xml | 7 + pom.xml | 1 + tdenginereader/doc/tdenginereader.md | 162 ++++++++++ tdenginereader/pom.xml | 101 ++++++ tdenginereader/src/main/assembly/package.xml | 34 ++ .../com/alibaba/datax/plugin/reader/Key.java | 19 ++ .../datax/plugin/reader/TDengineReader.java | 291 ++++++++++++++++++ .../reader/TDengineReaderErrorCode.java | 33 ++ tdenginereader/src/main/resources/plugin.json | 9 + .../main/resources/plugin_job_template.json | 14 + .../plugin/reader/TDengineReaderTest.java | 47 +++ 11 files changed, 718 insertions(+) create mode 100644 tdenginereader/doc/tdenginereader.md create mode 100644 tdenginereader/pom.xml create mode 100755 tdenginereader/src/main/assembly/package.xml create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java create mode 100755 tdenginereader/src/main/resources/plugin.json create mode 100644 tdenginereader/src/main/resources/plugin_job_template.json create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java diff --git a/package.xml b/package.xml index d95feb40..3f024f9d 100755 --- a/package.xml +++ b/package.xml @@ -180,6 +180,13 @@ datax + + tdenginereader/target/datax/ + + **/*.* + + datax + diff --git a/pom.xml b/pom.xml index 1a9da81b..72241137 100644 --- a/pom.xml +++ b/pom.xml @@ -108,6 +108,7 @@ hbase20xsqlreader hbase20xsqlwriter kuduwriter + tdenginereader diff --git a/tdenginereader/doc/tdenginereader.md b/tdenginereader/doc/tdenginereader.md new file mode 100644 index 00000000..3c683a64 --- /dev/null +++ b/tdenginereader/doc/tdenginereader.md @@ -0,0 +1,162 @@ +# DataX TDengineReader + +## 1 快速介绍 + +TDengineReader 插件实现了 TDengine 读取数据的功能。 + +## 2 实现原理 + +TDengineReader 通过TDengine的JDBC driver查询获取数据。 + +## 3 功能说明 + +### 3.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "user": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "current", + "voltage", + "phase" + ], + "beginDateTime": "2017-07-14 10:40:00", + "endDateTime": "2017-08-14 10:40:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* **username** + * 描述:TDengine实例的用户名
+ * 必选:是
+ * 默认值:无
+* **password** + * 描述:TDengine实例的密码
+ * 必选:是
+ * 默认值:无
+* **table** + * 描述:所选取的需要同步的表。使用JSON的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需保证多张表是同一schema结构, + TDengineReader不予检查表是否同一逻辑表。注意,table必须包含在connection配置单元中。
+ * 必选:是
+ * 默认值:无
+* **jdbcUrl** + * 描述:TDengine数据库的JDBC连接信息。注意,jdbcUrl必须包含在connection配置单元中。JdbcUrl具体请参看TDengine官方文档。 + * 必选:是
+ * 默认值:无
+* **beginDateTime** + * 描述:数据的开始时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
+ * 必选:是
+ * 默认值:无
+* **endDateTime** + * 描述:数据的结束时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
+ * 必选:是
+ * 默认值:无
+* **splitInterval** + * 描述:按照splitInterval来划分task, 每splitInterval创建一个task。例如,20d代表按照每20天的数据划分为1个task。 + 可以配置的时间单位为:d(天), h(小时), m(分钟), s(秒)
+ * 必选:是
+ * 默认值:无
+ +### 3.3 类型转换 +| TDengine 数据类型 | DataX 内部类型 | +| --------------- | ------------- | +| TINYINT | Long | +| SMALLINT | Long | +| INTEGER | Long | +| BIGINT | Long | +| FLOAT | Double | +| DOUBLE | Double | +| BOOLEAN | Bool | +| TIMESTAMP | Date | +| BINARY | Bytes | +| NCHAR | String | + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| +|--------| --------|--------|--------|--------|--------|--------|--------| +|1| | | | | | | | +|4| | | | | | | | +|8| | | | | | | | +|16| | | | | | | | +|32| | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 + +#### 4.2.4 性能测试小结 + +1. +2. + +## 5 约束限制 + +## FAQ \ No newline at end of file diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml new file mode 100644 index 00000000..8c0f6645 --- /dev/null +++ b/tdenginereader/pom.xml @@ -0,0 +1,101 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + tdenginereader + + + 8 + 8 + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + + + + junit + junit + ${junit-version} + test + + + com.alibaba.datax + plugin-rdbms-util + 0.0.1-SNAPSHOT + compile + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginereader/src/main/assembly/package.xml b/tdenginereader/src/main/assembly/package.xml new file mode 100755 index 00000000..b52f20fb --- /dev/null +++ b/tdenginereader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/reader/tdenginereader + + + target/ + + tdenginereader-0.0.1-SNAPSHOT.jar + + plugin/reader/tdenginereader + + + + + + false + plugin/reader/tdenginereader/libs + runtime + + + diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java new file mode 100644 index 00000000..eddf98eb --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java @@ -0,0 +1,19 @@ +package com.alibaba.datax.plugin.reader; + +public class Key { + + public static final String JDBC_URL = "jdbcUrl"; +// public static final String HOST = "host"; +// public static final String PORT = "port"; +// public static final String DB = "db"; + public static final String TABLE = "table"; + public static final String USER = "user"; + public static final String PASSWORD = "password"; + public static final String CONNECTION = "connection"; +// public static final String SQL = "sql"; + public static final String BEGIN_DATETIME = "beginDateTime"; + public static final String END_DATETIME = "endDateTime"; + public static final String SPLIT_INTERVAL = "splitInterval"; + public static final String COLUMN = "column"; + public static final String MANDATORY_ENCODING = "mandatoryEncoding"; +} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java new file mode 100644 index 00000000..dfdce7b4 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -0,0 +1,291 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.constant.CommonConstant; +import com.alibaba.datax.common.element.*; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; +import java.sql.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TDengineReader extends Reader { + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public static class Job extends Reader.Job { + + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private Configuration originalConfig; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + // check user + String user = this.originalConfig.getString(Key.USER); + if (StringUtils.isBlank(user)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.USER + "] is not set."); + + // check password + String password = this.originalConfig.getString(Key.PASSWORD); + if (StringUtils.isBlank(password)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.PASSWORD + "] is not set."); + + SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); + // check beginDateTime + String beginDatetime = this.originalConfig.getString(Key.BEGIN_DATETIME); + if (StringUtils.isBlank(beginDatetime)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] is not set."); + Long start; + try { + start = format.parse(beginDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + + // check endDateTime + String endDatetime = this.originalConfig.getString(Key.END_DATETIME); + if (StringUtils.isBlank(endDatetime)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.END_DATETIME + "] is not set."); + Long end; + try { + end = format.parse(endDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.END_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + if (start >= end) + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); + + // check splitInterval + String splitInterval = this.originalConfig.getString(Key.SPLIT_INTERVAL); + Long split; + if (StringUtils.isBlank(splitInterval)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] is not set."); + try { + split = parseSplitInterval(splitInterval); + } catch (Exception e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] should be like: \"123d|h|m|s\", error: " + e.getMessage()); + } + + this.originalConfig.set(Key.BEGIN_DATETIME, start); + this.originalConfig.set(Key.END_DATETIME, end); + this.originalConfig.set(Key.SPLIT_INTERVAL, split); + + // check connection + List connection = this.originalConfig.getList(Key.CONNECTION); + if (connection == null || connection.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set."); + for (int i = 0; i < connection.size(); i++) { + Configuration conn = Configuration.from(connection.get(i).toString()); + List table = conn.getList(Key.TABLE); + if (table == null || table.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); + String jdbcUrl = conn.getString(Key.JDBC_URL); + if (StringUtils.isBlank(jdbcUrl)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); + } + + // check column + List column = this.originalConfig.getList(Key.COLUMN); + if (column == null || column.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set or is empty."); + } + + @Override + public void destroy() { + + } + + @Override + public List split(int adviceNumber) { + List configurations = new ArrayList<>(); + // do split + Long start = this.originalConfig.getLong(Key.BEGIN_DATETIME); + Long end = this.originalConfig.getLong(Key.END_DATETIME); + Long split = this.originalConfig.getLong(Key.SPLIT_INTERVAL); + + List conns = this.originalConfig.getList(Key.CONNECTION); + + for (Long ts = start; ts < end; ts += split) { + for (int i = 0; i < conns.size(); i++) { + Configuration clone = this.originalConfig.clone(); + clone.remove(Key.SPLIT_INTERVAL); + + clone.set(Key.BEGIN_DATETIME, ts); + clone.set(Key.END_DATETIME, Math.min(ts + split, end)); + + Configuration conf = Configuration.from(conns.get(i).toString()); + String jdbcUrl = conf.getString(Key.JDBC_URL); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conf.getList(Key.TABLE)); + + // 抽取 jdbcUrl 中的 ip/port 进行资源使用的打标,以提供给 core 做有意义的 shuffle 操作 + clone.set(CommonConstant.LOAD_BALANCE_RESOURCE_MARK, DataBaseType.parseIpFromJdbcUrl(jdbcUrl)); + clone.remove(Key.CONNECTION); + + configurations.add(clone); + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } + return configurations; + } + } + + public static class Task extends Reader.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + private Connection conn; + + private Long startTime; + private Long endTime; + private List tables; + private List columns; + private String mandatoryEncoding; + + @Override + public void init() { + Configuration readerSliceConfig = super.getPluginJobConf(); + LOG.info("getPluginJobConf: {}", JSON.toJSONString(readerSliceConfig)); + + String url = readerSliceConfig.getString(Key.JDBC_URL); + if (StringUtils.isBlank(url)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.JDBC_URL + "] is not set."); + + tables = readerSliceConfig.getList(Key.TABLE, String.class); + columns = readerSliceConfig.getList(Key.COLUMN, String.class); + + String user = readerSliceConfig.getString(Key.USER); + String password = readerSliceConfig.getString(Key.PASSWORD); + + try { + conn = DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.CONNECTION_FAILED, + "The parameter [" + Key.JDBC_URL + "] : " + url + " failed to connect since: " + e.getMessage()); + } + + this.mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); + + startTime = readerSliceConfig.getLong(Key.BEGIN_DATETIME); + endTime = readerSliceConfig.getLong(Key.END_DATETIME); + } + + + @Override + public void destroy() { + + } + + @Override + public void startRead(RecordSender recordSender) { + try (Statement stmt = conn.createStatement()) { + for (int i = 0; i < tables.size(); i++) { + String sql = "select " + StringUtils.join(columns, ",") + " from " + tables.get(i) + " where _c0 >= " + startTime + " and _c0 < " + endTime; + ResultSet rs = stmt.executeQuery(sql); + ResultSetMetaData metaData = rs.getMetaData(); + while (rs.next()) { + transportOneRecord(recordSender, rs, metaData, metaData.getColumnCount(), this.mandatoryEncoding); + } + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + } finally { + try { + if (conn != null) + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + private Record transportOneRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { + Record record = buildRecord(recordSender, rs, metaData, columnCount, mandatoryEncoding); + recordSender.sendToWriter(record); + return record; + } + + private Record buildRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { + Record record = recordSender.createRecord(); + + try { + for (int i = 1; i <= columnCount; i++) { + int columnType = metaData.getColumnType(i); + switch (columnType) { + case Types.SMALLINT: + case Types.TINYINT: + case Types.INTEGER: + case Types.BIGINT: + record.addColumn(new LongColumn(rs.getString(i))); + break; + case Types.FLOAT: + case Types.DOUBLE: + record.addColumn(new DoubleColumn(rs.getString(i))); + break; + case Types.BOOLEAN: + record.addColumn(new BoolColumn(rs.getBoolean(i))); + break; + case Types.TIMESTAMP: + record.addColumn(new DateColumn(rs.getTimestamp(i))); + break; + case Types.BINARY: + record.addColumn(new BytesColumn(rs.getBytes(i))); + break; + case Types.NCHAR: + String rawData; + if (StringUtils.isBlank(mandatoryEncoding)) { + rawData = rs.getString(i); + } else { + rawData = new String((rs.getBytes(i) == null ? new byte[0] : rs.getBytes(i)), mandatoryEncoding); + } + record.addColumn(new StringColumn(rawData)); + break; + } + } + } catch (SQLException | UnsupportedEncodingException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + } + return record; + } + } + + private static final long second = 1000; + private static final long minute = 60 * second; + private static final long hour = 60 * minute; + private static final long day = 24 * hour; + + private static Long parseSplitInterval(String splitInterval) throws Exception { + Pattern compile = Pattern.compile("^(\\d+)([dhms])$"); + Matcher matcher = compile.matcher(splitInterval); + while (matcher.find()) { + Long value = Long.valueOf(matcher.group(1)); + if (value == 0) + throw new Exception("invalid splitInterval: 0"); + char unit = matcher.group(2).charAt(0); + switch (unit) { + case 'd': + return value * day; + default: + case 'h': + return value * hour; + case 'm': + return value * minute; + case 's': + return value * second; + } + } + throw new Exception("invalid splitInterval: " + splitInterval); + } + +} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java new file mode 100644 index 00000000..68bc11e7 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java @@ -0,0 +1,33 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineReaderErrorCode implements ErrorCode { + + REQUIRED_VALUE("TDengineReader-00", "缺失必要的值"), + ILLEGAL_VALUE("TDengineReader-01", "值非法"), + CONNECTION_FAILED("TDengineReader-02", "连接错误"); + + private final String code; + private final String description; + + TDengineReaderErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, this.description); + } +} diff --git a/tdenginereader/src/main/resources/plugin.json b/tdenginereader/src/main/resources/plugin.json new file mode 100755 index 00000000..dc91982c --- /dev/null +++ b/tdenginereader/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginereader", + "class": "com.alibaba.datax.plugin.reader.TDengineReader", + "description": { + "useScene": "data migration from tdengine", + "mechanism": "use JNI to read data from tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginereader/src/main/resources/plugin_job_template.json b/tdenginereader/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..3e09dffc --- /dev/null +++ b/tdenginereader/src/main/resources/plugin_job_template.json @@ -0,0 +1,14 @@ +{ + "name": "tdenginereader", + "parameter": { + "host": "127.0.0.1", + "port": 6030, + "db": "test", + "user": "root", + "password": "taosdata", + "sql": "select * from weather", + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-02 00:00:00", + "splitInterval": "1h" + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java new file mode 100644 index 00000000..14453095 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java @@ -0,0 +1,47 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.util.Configuration; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; +import java.util.stream.IntStream; + +public class TDengineReaderTest { + + TDengineReader.Job job; + + @Before + public void before() { + job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"user\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + + "\"endDateTime\": \"2021-01-01 10:00:00\"," + + "\"splitInterval\": \"1h\"" + + "}"); + job.setPluginJobConf(configuration); + } + + @Test + public void jobInit() { + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + Assert.assertEquals("select * from weather", conf.getString("sql")); + } + + @Test + public void jobSplit() { + // when + job.init(); + List configurationList = job.split(1); + +// IntStream.range(0, configurationList.size()).forEach(i -> System.out.println(i + ": " + configurationList.get(i))); + } + +} \ No newline at end of file From 86553c490dded5709c047de33c1f0cda9004a18d Mon Sep 17 00:00:00 2001 From: zyyang Date: Thu, 16 Dec 2021 11:36:44 +0800 Subject: [PATCH 114/251] [TD-10786]: tdenginereader implementation --- package.xml | 7 + pom.xml | 1 + tdenginereader/doc/tdenginereader.md | 162 ++++++++++ tdenginereader/pom.xml | 101 ++++++ tdenginereader/src/main/assembly/package.xml | 34 ++ .../com/alibaba/datax/plugin/reader/Key.java | 19 ++ .../datax/plugin/reader/TDengineReader.java | 291 ++++++++++++++++++ .../reader/TDengineReaderErrorCode.java | 33 ++ tdenginereader/src/main/resources/plugin.json | 9 + .../main/resources/plugin_job_template.json | 21 ++ .../plugin/reader/TDengineReaderTest.java | 73 +++++ 11 files changed, 751 insertions(+) create mode 100644 tdenginereader/doc/tdenginereader.md create mode 100644 tdenginereader/pom.xml create mode 100755 tdenginereader/src/main/assembly/package.xml create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java create mode 100755 tdenginereader/src/main/resources/plugin.json create mode 100644 tdenginereader/src/main/resources/plugin_job_template.json create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java diff --git a/package.xml b/package.xml index d95feb40..3f024f9d 100755 --- a/package.xml +++ b/package.xml @@ -180,6 +180,13 @@ datax + + tdenginereader/target/datax/ + + **/*.* + + datax + diff --git a/pom.xml b/pom.xml index 1a9da81b..72241137 100644 --- a/pom.xml +++ b/pom.xml @@ -108,6 +108,7 @@ hbase20xsqlreader hbase20xsqlwriter kuduwriter + tdenginereader diff --git a/tdenginereader/doc/tdenginereader.md b/tdenginereader/doc/tdenginereader.md new file mode 100644 index 00000000..3c683a64 --- /dev/null +++ b/tdenginereader/doc/tdenginereader.md @@ -0,0 +1,162 @@ +# DataX TDengineReader + +## 1 快速介绍 + +TDengineReader 插件实现了 TDengine 读取数据的功能。 + +## 2 实现原理 + +TDengineReader 通过TDengine的JDBC driver查询获取数据。 + +## 3 功能说明 + +### 3.1 配置样例 + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "user": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "current", + "voltage", + "phase" + ], + "beginDateTime": "2017-07-14 10:40:00", + "endDateTime": "2017-08-14 10:40:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* **username** + * 描述:TDengine实例的用户名
+ * 必选:是
+ * 默认值:无
+* **password** + * 描述:TDengine实例的密码
+ * 必选:是
+ * 默认值:无
+* **table** + * 描述:所选取的需要同步的表。使用JSON的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需保证多张表是同一schema结构, + TDengineReader不予检查表是否同一逻辑表。注意,table必须包含在connection配置单元中。
+ * 必选:是
+ * 默认值:无
+* **jdbcUrl** + * 描述:TDengine数据库的JDBC连接信息。注意,jdbcUrl必须包含在connection配置单元中。JdbcUrl具体请参看TDengine官方文档。 + * 必选:是
+ * 默认值:无
+* **beginDateTime** + * 描述:数据的开始时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
+ * 必选:是
+ * 默认值:无
+* **endDateTime** + * 描述:数据的结束时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
+ * 必选:是
+ * 默认值:无
+* **splitInterval** + * 描述:按照splitInterval来划分task, 每splitInterval创建一个task。例如,20d代表按照每20天的数据划分为1个task。 + 可以配置的时间单位为:d(天), h(小时), m(分钟), s(秒)
+ * 必选:是
+ * 默认值:无
+ +### 3.3 类型转换 +| TDengine 数据类型 | DataX 内部类型 | +| --------------- | ------------- | +| TINYINT | Long | +| SMALLINT | Long | +| INTEGER | Long | +| BIGINT | Long | +| FLOAT | Double | +| DOUBLE | Double | +| BOOLEAN | Bool | +| TIMESTAMP | Date | +| BINARY | Bytes | +| NCHAR | String | + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| +|--------| --------|--------|--------|--------|--------|--------|--------| +|1| | | | | | | | +|4| | | | | | | | +|8| | | | | | | | +|16| | | | | | | | +|32| | | | | | | | + +说明: + +1. 这里的单表,主键类型为 bigint(20),自增。 +2. batchSize 和 通道个数,对性能影响较大。 + +#### 4.2.4 性能测试小结 + +1. +2. + +## 5 约束限制 + +## FAQ \ No newline at end of file diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml new file mode 100644 index 00000000..8c0f6645 --- /dev/null +++ b/tdenginereader/pom.xml @@ -0,0 +1,101 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + tdenginereader + + + 8 + 8 + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.34 + + + + junit + junit + ${junit-version} + test + + + com.alibaba.datax + plugin-rdbms-util + 0.0.1-SNAPSHOT + compile + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginereader/src/main/assembly/package.xml b/tdenginereader/src/main/assembly/package.xml new file mode 100755 index 00000000..b52f20fb --- /dev/null +++ b/tdenginereader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/reader/tdenginereader + + + target/ + + tdenginereader-0.0.1-SNAPSHOT.jar + + plugin/reader/tdenginereader + + + + + + false + plugin/reader/tdenginereader/libs + runtime + + + diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java new file mode 100644 index 00000000..eddf98eb --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java @@ -0,0 +1,19 @@ +package com.alibaba.datax.plugin.reader; + +public class Key { + + public static final String JDBC_URL = "jdbcUrl"; +// public static final String HOST = "host"; +// public static final String PORT = "port"; +// public static final String DB = "db"; + public static final String TABLE = "table"; + public static final String USER = "user"; + public static final String PASSWORD = "password"; + public static final String CONNECTION = "connection"; +// public static final String SQL = "sql"; + public static final String BEGIN_DATETIME = "beginDateTime"; + public static final String END_DATETIME = "endDateTime"; + public static final String SPLIT_INTERVAL = "splitInterval"; + public static final String COLUMN = "column"; + public static final String MANDATORY_ENCODING = "mandatoryEncoding"; +} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java new file mode 100644 index 00000000..dfdce7b4 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -0,0 +1,291 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.constant.CommonConstant; +import com.alibaba.datax.common.element.*; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; +import java.sql.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class TDengineReader extends Reader { + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public static class Job extends Reader.Job { + + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private Configuration originalConfig; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + // check user + String user = this.originalConfig.getString(Key.USER); + if (StringUtils.isBlank(user)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.USER + "] is not set."); + + // check password + String password = this.originalConfig.getString(Key.PASSWORD); + if (StringUtils.isBlank(password)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.PASSWORD + "] is not set."); + + SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); + // check beginDateTime + String beginDatetime = this.originalConfig.getString(Key.BEGIN_DATETIME); + if (StringUtils.isBlank(beginDatetime)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] is not set."); + Long start; + try { + start = format.parse(beginDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + + // check endDateTime + String endDatetime = this.originalConfig.getString(Key.END_DATETIME); + if (StringUtils.isBlank(endDatetime)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.END_DATETIME + "] is not set."); + Long end; + try { + end = format.parse(endDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.END_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + if (start >= end) + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); + + // check splitInterval + String splitInterval = this.originalConfig.getString(Key.SPLIT_INTERVAL); + Long split; + if (StringUtils.isBlank(splitInterval)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] is not set."); + try { + split = parseSplitInterval(splitInterval); + } catch (Exception e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] should be like: \"123d|h|m|s\", error: " + e.getMessage()); + } + + this.originalConfig.set(Key.BEGIN_DATETIME, start); + this.originalConfig.set(Key.END_DATETIME, end); + this.originalConfig.set(Key.SPLIT_INTERVAL, split); + + // check connection + List connection = this.originalConfig.getList(Key.CONNECTION); + if (connection == null || connection.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set."); + for (int i = 0; i < connection.size(); i++) { + Configuration conn = Configuration.from(connection.get(i).toString()); + List table = conn.getList(Key.TABLE); + if (table == null || table.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); + String jdbcUrl = conn.getString(Key.JDBC_URL); + if (StringUtils.isBlank(jdbcUrl)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); + } + + // check column + List column = this.originalConfig.getList(Key.COLUMN); + if (column == null || column.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set or is empty."); + } + + @Override + public void destroy() { + + } + + @Override + public List split(int adviceNumber) { + List configurations = new ArrayList<>(); + // do split + Long start = this.originalConfig.getLong(Key.BEGIN_DATETIME); + Long end = this.originalConfig.getLong(Key.END_DATETIME); + Long split = this.originalConfig.getLong(Key.SPLIT_INTERVAL); + + List conns = this.originalConfig.getList(Key.CONNECTION); + + for (Long ts = start; ts < end; ts += split) { + for (int i = 0; i < conns.size(); i++) { + Configuration clone = this.originalConfig.clone(); + clone.remove(Key.SPLIT_INTERVAL); + + clone.set(Key.BEGIN_DATETIME, ts); + clone.set(Key.END_DATETIME, Math.min(ts + split, end)); + + Configuration conf = Configuration.from(conns.get(i).toString()); + String jdbcUrl = conf.getString(Key.JDBC_URL); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conf.getList(Key.TABLE)); + + // 抽取 jdbcUrl 中的 ip/port 进行资源使用的打标,以提供给 core 做有意义的 shuffle 操作 + clone.set(CommonConstant.LOAD_BALANCE_RESOURCE_MARK, DataBaseType.parseIpFromJdbcUrl(jdbcUrl)); + clone.remove(Key.CONNECTION); + + configurations.add(clone); + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } + return configurations; + } + } + + public static class Task extends Reader.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + private Connection conn; + + private Long startTime; + private Long endTime; + private List tables; + private List columns; + private String mandatoryEncoding; + + @Override + public void init() { + Configuration readerSliceConfig = super.getPluginJobConf(); + LOG.info("getPluginJobConf: {}", JSON.toJSONString(readerSliceConfig)); + + String url = readerSliceConfig.getString(Key.JDBC_URL); + if (StringUtils.isBlank(url)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.JDBC_URL + "] is not set."); + + tables = readerSliceConfig.getList(Key.TABLE, String.class); + columns = readerSliceConfig.getList(Key.COLUMN, String.class); + + String user = readerSliceConfig.getString(Key.USER); + String password = readerSliceConfig.getString(Key.PASSWORD); + + try { + conn = DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.CONNECTION_FAILED, + "The parameter [" + Key.JDBC_URL + "] : " + url + " failed to connect since: " + e.getMessage()); + } + + this.mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); + + startTime = readerSliceConfig.getLong(Key.BEGIN_DATETIME); + endTime = readerSliceConfig.getLong(Key.END_DATETIME); + } + + + @Override + public void destroy() { + + } + + @Override + public void startRead(RecordSender recordSender) { + try (Statement stmt = conn.createStatement()) { + for (int i = 0; i < tables.size(); i++) { + String sql = "select " + StringUtils.join(columns, ",") + " from " + tables.get(i) + " where _c0 >= " + startTime + " and _c0 < " + endTime; + ResultSet rs = stmt.executeQuery(sql); + ResultSetMetaData metaData = rs.getMetaData(); + while (rs.next()) { + transportOneRecord(recordSender, rs, metaData, metaData.getColumnCount(), this.mandatoryEncoding); + } + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + } finally { + try { + if (conn != null) + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + private Record transportOneRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { + Record record = buildRecord(recordSender, rs, metaData, columnCount, mandatoryEncoding); + recordSender.sendToWriter(record); + return record; + } + + private Record buildRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { + Record record = recordSender.createRecord(); + + try { + for (int i = 1; i <= columnCount; i++) { + int columnType = metaData.getColumnType(i); + switch (columnType) { + case Types.SMALLINT: + case Types.TINYINT: + case Types.INTEGER: + case Types.BIGINT: + record.addColumn(new LongColumn(rs.getString(i))); + break; + case Types.FLOAT: + case Types.DOUBLE: + record.addColumn(new DoubleColumn(rs.getString(i))); + break; + case Types.BOOLEAN: + record.addColumn(new BoolColumn(rs.getBoolean(i))); + break; + case Types.TIMESTAMP: + record.addColumn(new DateColumn(rs.getTimestamp(i))); + break; + case Types.BINARY: + record.addColumn(new BytesColumn(rs.getBytes(i))); + break; + case Types.NCHAR: + String rawData; + if (StringUtils.isBlank(mandatoryEncoding)) { + rawData = rs.getString(i); + } else { + rawData = new String((rs.getBytes(i) == null ? new byte[0] : rs.getBytes(i)), mandatoryEncoding); + } + record.addColumn(new StringColumn(rawData)); + break; + } + } + } catch (SQLException | UnsupportedEncodingException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + } + return record; + } + } + + private static final long second = 1000; + private static final long minute = 60 * second; + private static final long hour = 60 * minute; + private static final long day = 24 * hour; + + private static Long parseSplitInterval(String splitInterval) throws Exception { + Pattern compile = Pattern.compile("^(\\d+)([dhms])$"); + Matcher matcher = compile.matcher(splitInterval); + while (matcher.find()) { + Long value = Long.valueOf(matcher.group(1)); + if (value == 0) + throw new Exception("invalid splitInterval: 0"); + char unit = matcher.group(2).charAt(0); + switch (unit) { + case 'd': + return value * day; + default: + case 'h': + return value * hour; + case 'm': + return value * minute; + case 's': + return value * second; + } + } + throw new Exception("invalid splitInterval: " + splitInterval); + } + +} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java new file mode 100644 index 00000000..68bc11e7 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java @@ -0,0 +1,33 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineReaderErrorCode implements ErrorCode { + + REQUIRED_VALUE("TDengineReader-00", "缺失必要的值"), + ILLEGAL_VALUE("TDengineReader-01", "值非法"), + CONNECTION_FAILED("TDengineReader-02", "连接错误"); + + private final String code; + private final String description; + + TDengineReaderErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, this.description); + } +} diff --git a/tdenginereader/src/main/resources/plugin.json b/tdenginereader/src/main/resources/plugin.json new file mode 100755 index 00000000..7ccdbe63 --- /dev/null +++ b/tdenginereader/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginereader", + "class": "com.alibaba.datax.plugin.reader.TDengineReader", + "description": { + "useScene": "data migration from tdengine", + "mechanism": "use JDBC to read data from tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginereader/src/main/resources/plugin_job_template.json b/tdenginereader/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..2c7f4cb9 --- /dev/null +++ b/tdenginereader/src/main/resources/plugin_job_template.json @@ -0,0 +1,21 @@ +{ + "name": "tdenginereader", + "parameter": { + "user": "", + "password": "", + "connection": [ + { + "table": [ + "" + ], + "jdbcUrl": "" + } + ], + "column": [ + "" + ], + "beginDateTime": "", + "endDateTime": "", + "splitInterval": "" + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java new file mode 100644 index 00000000..9d83f743 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java @@ -0,0 +1,73 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.util.Configuration; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.stream.IntStream; + +public class TDengineReaderTest { + + TDengineReader.Job job; + + @Before + public void before() { + job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"user\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + + "\"endDateTime\": \"2021-01-01 12:00:00\"," + + "\"splitInterval\": \"1h\"" + + "}"); + job.setPluginJobConf(configuration); + } + + @Test + public void jobInit() throws ParseException { + // when + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString("user")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + Long start = sdf.parse("2021-01-01 00:00:00").getTime(); + Assert.assertEquals(start, conf.getLong("beginDateTime")); + + Long end = sdf.parse("2021-01-01 12:00:00").getTime(); + Assert.assertEquals(end, conf.getLong("endDateTime")); + + Assert.assertEquals(new Long(3600 * 1000), conf.getLong("splitInterval")); + } + + @Test + public void jobSplit() { + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(12, configurationList.size()); + for (int i = 0; i < configurationList.size(); i++) { + Configuration conf = configurationList.get(i); + Assert.assertEquals("root", conf.getString("user")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + } + } + +} \ No newline at end of file From 61dc03e9f8cdcf215ac739535c24c417f6b8215b Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 16 Dec 2021 17:00:08 +0800 Subject: [PATCH 115/251] change user to username --- tdenginewriter/doc/tdenginewriter-CN.md | 10 +++++----- tdenginewriter/doc/tdenginewriter.md | 10 +++++----- .../datax/plugin/writer/tdenginewriter/Key.java | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index c0ce7684..ac5a555a 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -42,7 +42,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "host": "192.168.1.180", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata" } } @@ -63,7 +63,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | --------- | -------------------- | -------- | -------- | | host | TDengine实例的host | 是 | 无 | | port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | +| username | TDengine实例的用户名 | 否 | root | | password | TDengine实例的密码 | 否 | taosdata | | dbName | 目的数据库的名称 | 是 | 无 | | batchSize | 每次批量插入多少记录 | 否 | 1 | @@ -142,7 +142,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "host": "localhost", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "stable": "stock", "tagColumn": { @@ -174,7 +174,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | --------------- | -------------------- | ---------------- | -------- | ------------------ | | host | TDengine实例的host | 是 | 无 | | port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | +| username | TDengine实例的用户名 | 否 | root | | password | TDengine实例的密码 | 否 | taosdata | | dbName | 目的数据库的名称 | 是 | 无 | | batchSize | 每次批量插入多少记录 | 否 | 1000 | @@ -290,7 +290,7 @@ CREATE TABLE IF NOT EXISTS weather( "host": "127.0.0.1", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "batchSize": 1000, "stable": "weather", diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 1e7fb64d..fb8cf642 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -39,7 +39,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s "host": "192.168.1.180", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata" } } @@ -60,7 +60,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s | --------- | ------------------------------ | -------- | -------- | | host | host of TDengine | Yes | | | port | port of TDengine | Yes | | -| user | use name of TDengine | No | root | +| username | use name of TDengine | No | root | | password | password of TDengine | No | taosdata | | dbName | name of target database | No | | | batchSize | batch size of insert operation | No | 1 | @@ -137,7 +137,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s "host": "localhost", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "stable": "stock", "tagColumn": { @@ -170,7 +170,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s | --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | | host | host ofTDengine | Yes | | | port | port of TDengine | Yes | | -| user | user name of TDengine | No | root | +| username | username of TDengine | No | root | | password | password of TDengine | No | taosdata | | dbName | name of target database | Yes | | | batchSize | batch size of insert operation | No | 1000 | @@ -287,7 +287,7 @@ CREATE TABLE IF NOT EXISTS weather( "host": "127.0.0.1", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "batchSize": 1000, "stable": "weather", diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index a061e97f..7fb383e6 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -4,7 +4,7 @@ public class Key { public static final String HOST = "host"; public static final String PORT = "port"; public static final String DBNAME = "dbName"; - public static final String USER = "user"; + public static final String USER = "username"; public static final String PASSWORD = "password"; public static final String BATCH_SIZE = "batchSize"; public static final String STABLE = "stable"; From c7fc73bcb647c953a6622a87a40996e243cc2b79 Mon Sep 17 00:00:00 2001 From: dingbo Date: Thu, 16 Dec 2021 17:00:08 +0800 Subject: [PATCH 116/251] change user to username --- tdenginewriter/doc/tdenginewriter-CN.md | 10 +++++----- tdenginewriter/doc/tdenginewriter.md | 10 +++++----- .../datax/plugin/writer/tdenginewriter/Key.java | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index abd92de5..a868f8f2 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -42,7 +42,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "host": "192.168.1.180", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata" } } @@ -63,7 +63,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | --------- | -------------------- | -------- | -------- | | host | TDengine实例的host | 是 | 无 | | port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | +| username | TDengine实例的用户名 | 否 | root | | password | TDengine实例的密码 | 否 | taosdata | | dbName | 目的数据库的名称 | 是 | 无 | | batchSize | 每次批量插入多少记录 | 否 | 1 | @@ -142,7 +142,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "host": "localhost", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "stable": "stock", "tagColumn": { @@ -174,7 +174,7 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea | --------------- | -------------------- | ---------------- | -------- | ------------------ | | host | TDengine实例的host | 是 | 无 | | port | TDengine实例的port | 是 | 无 | -| user | TDengine实例的用户名 | 否 | root | +| username | TDengine实例的用户名 | 否 | root | | password | TDengine实例的密码 | 否 | taosdata | | dbName | 目的数据库的名称 | 是 | 无 | | batchSize | 每次批量插入多少记录 | 否 | 1000 | @@ -290,7 +290,7 @@ CREATE TABLE IF NOT EXISTS weather( "host": "127.0.0.1", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "batchSize": 1000, "stable": "weather", diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index fd190570..6f19c112 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -39,7 +39,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s "host": "192.168.1.180", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata" } } @@ -60,7 +60,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s | --------- | ------------------------------ | -------- | -------- | | host | host of TDengine | Yes | | | port | port of TDengine | Yes | | -| user | use name of TDengine | No | root | +| username | use name of TDengine | No | root | | password | password of TDengine | No | taosdata | | dbName | name of target database | No | | | batchSize | batch size of insert operation | No | 1 | @@ -137,7 +137,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s "host": "localhost", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "stable": "stock", "tagColumn": { @@ -170,7 +170,7 @@ TDengineWriter get records from DataX Framework that are generated from reader s | --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | | host | host ofTDengine | Yes | | | port | port of TDengine | Yes | | -| user | user name of TDengine | No | root | +| username | username of TDengine | No | root | | password | password of TDengine | No | taosdata | | dbName | name of target database | Yes | | | batchSize | batch size of insert operation | No | 1000 | @@ -287,7 +287,7 @@ CREATE TABLE IF NOT EXISTS weather( "host": "127.0.0.1", "port": 6030, "dbName": "test", - "user": "root", + "username": "root", "password": "taosdata", "batchSize": 1000, "stable": "weather", diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index a061e97f..7fb383e6 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -4,7 +4,7 @@ public class Key { public static final String HOST = "host"; public static final String PORT = "port"; public static final String DBNAME = "dbName"; - public static final String USER = "user"; + public static final String USER = "username"; public static final String PASSWORD = "password"; public static final String BATCH_SIZE = "batchSize"; public static final String STABLE = "stable"; From 69320e750a55c4cee51ea83b015feb11a73741f0 Mon Sep 17 00:00:00 2001 From: dingbo Date: Wed, 22 Dec 2021 10:08:00 +0800 Subject: [PATCH 117/251] rename resource key --- tdenginewriter/src/main/resources/tdenginewritermsg.properties | 2 +- .../src/main/resources/tdenginewritermsg_en_US.properties | 2 +- .../src/main/resources/tdenginewritermsg_zh_CN.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg.properties b/tdenginewriter/src/main/resources/tdenginewritermsg.properties index 4aaa220b..48d862e7 100644 --- a/tdenginewriter/src/main/resources/tdenginewritermsg.properties +++ b/tdenginewriter/src/main/resources/tdenginewritermsg.properties @@ -1,4 +1,4 @@ -try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +try_get_schema_from_db=fail to get structure info of target table from configure file and will try to get it from database batch_size_too_small='batchSize' is too small, please increase it and try again column_number_error=number of columns is less than expected tag_value_error=tag columns include 'null' value diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties index 4aaa220b..48d862e7 100644 --- a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties @@ -1,4 +1,4 @@ -try_get_schema_fromdb=fail to get structure info of target table from configure file and will try to get it from database +try_get_schema_from_db=fail to get structure info of target table from configure file and will try to get it from database batch_size_too_small='batchSize' is too small, please increase it and try again column_number_error=number of columns is less than expected tag_value_error=tag columns include 'null' value diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties index 4b9552fd..38d2cbb6 100644 --- a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties +++ b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties @@ -1,4 +1,4 @@ -try_get_schema_fromdb=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6587\u4ef6\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u5c1d\u8bd5\u4ece\u6570\u636e\u5e93\u83b7\u53d6 +try_get_schema_from_db=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6587\u4ef6\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u5c1d\u8bd5\u4ece\u6570\u636e\u5e93\u83b7\u53d6 batch_size_too_small=batchSize\u592a\u5c0f\uff0c\u4f1a\u589e\u52a0\u81ea\u52a8\u7c7b\u578b\u63a8\u65ad\u9519\u8bef\u7684\u6982\u7387\uff0c\u5efa\u8bae\u6539\u5927\u540e\u91cd\u8bd5 column_number_error=\u5b9e\u9645\u5217\u6570\u5c0f\u4e8e\u671f\u671b\u5217\u6570 tag_value_error=\u6807\u7b7e\u5217\u5305\u542bnull From ca39f422d0f78f44afd2178ceb17930098661d45 Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Wed, 22 Dec 2021 16:14:41 +0800 Subject: [PATCH 118/251] sd --- .../oceanbasev10reader/OceanBaseReader.java | 19 ++++- .../oceanbasev10reader/ext/ReaderJob.java | 31 ++++++++- .../util/DatabaseKeywordTransformer.java | 69 +++++++++++++++++++ .../util/ObReaderUtils.java | 10 +++ 4 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index 0a4934a1..db9d34e0 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -1,8 +1,12 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader; +import java.sql.Array; import java.sql.Connection; +import java.util.ArrayList; import java.util.List; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.DatabaseKeywordTransformer; +import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,6 +26,7 @@ public class OceanBaseReader extends Reader { public static class Job extends Reader.Job { private Configuration originalConfig = null; private ReaderJob readerJob; + private DataBaseType DATABASE_TYPE; private static final Logger LOG = LoggerFactory.getLogger(Task.class); @Override @@ -37,10 +42,15 @@ public class OceanBaseReader extends Reader { setDatabaseType(originalConfig); - this.readerJob = new ReaderJob(); - this.readerJob.init(this.originalConfig); - } + + this.readerJob = new ReaderJob(); + this.readerJob.init(this.originalConfig,DATABASE_TYPE); + } + @Override + public void prepare(){ + //ObReaderUtils.DATABASE_TYPE获取当前数据库的语法模式 + } @Override public void preCheck() { init(); @@ -90,6 +100,9 @@ public class OceanBaseReader extends Reader { } catch (Exception e){ LOG.warn("error in get compatible mode, using mysql as default: " + e.getMessage()); } + finally { + DATABASE_TYPE=ObReaderUtils.DATABASE_TYPE; + } } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index c56155f6..efeec2e9 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -6,15 +6,44 @@ import com.alibaba.datax.common.constant.CommonConstant; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Key; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.OceanBaseReader; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.DatabaseKeywordTransformer; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class ReaderJob extends CommonRdbmsReader.Job { public ReaderJob() { super(ObReaderUtils.DATABASE_TYPE); - } + } + public void init(Configuration originalConfig,DataBaseType databaseType){ + //将config中的column和table中的关键字进行转义 + final Logger LOG = LoggerFactory.getLogger(OceanBaseReader.Task.class); + try { + DatabaseKeywordTransformer.setDatabaseType(databaseType); + }catch (Exception e){ + LOG.warn("database type is "+databaseType+e.getMessage()); + } + List columns=originalConfig.getList(Key.COLUMN,String.class); + DatabaseKeywordTransformer.transferDatabaseKeywords(columns); + originalConfig.set(Key.COLUMN, columns); + + List conns=originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK,JSONObject.class); + for(int i=0;i tables=connConfig.getList(Key.TABLE,String.class); + DatabaseKeywordTransformer.transferDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK,i,Key.TABLE),tables); + } + super.init(originalConfig); + } @Override public List split(Configuration originalConfig, int adviceNumber) { List list = super.split(originalConfig, adviceNumber); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java new file mode 100644 index 00000000..ccbbfb25 --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java @@ -0,0 +1,69 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +//java api +import java.util.HashSet; +import java.util.List; + +//dataX api +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; + +//该类用于转义数据库中的关键字 +public class DatabaseKeywordTransformer { + private static DataBaseType databaseType; + static HashSet databaseKeywords; + private static HashSet keywordsFromString2HashSet(final String Keywords){ + String[] keywordArray =Keywords.split(","); + HashSet res=new HashSet(); + for(String keyword: keywordArray){ + res.add(keyword); + } + return res; + } + public static void setDatabaseType(final DataBaseType databaseType) throws Exception { + if(databaseType==DatabaseKeywordTransformer.databaseType){ + return ; + } + DatabaseKeywordTransformer.databaseType = databaseType; + if(databaseType==DataBaseType.MySql){ + databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); + } + else if(databaseType==DataBaseType.Oracle){ + databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); + } + else if(databaseType==DataBaseType.SQLServer){ + databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.SQLSERVER_KEYWORDS); + } + else{ + throw new Exception("sorry,unknown database tpye..."); + } + } + + public static void transferDatabaseKeywords(List keywords){ + for(int i=0;i columns = context.getColumns(); + // 最后参与排序的索引列 + context.setPkColumns(pkColumns); + int[] pkIndexs = new int[pkColumns.length]; for (int i = 0, n = pkColumns.length; i < n; i++) { String pkc = pkColumns[i]; @@ -131,6 +134,13 @@ public class ObReaderUtils { realIndex.add(columnName); } } + //fix:将主键中的关键字转义 + DatabaseKeywordTransformer.setDatabaseType(DataBaseType.MySql); + if(isOracleMode(context.getCompatibleMode())){ + DatabaseKeywordTransformer.setDatabaseType(DataBaseType.Oracle); + } + DatabaseKeywordTransformer.transferDatabaseKeywords(realIndex); + String[] pks = new String[realIndex.size()]; realIndex.toArray(pks); return pks; From 4e916b0f4b125d1b806206292fa345a984d031ff Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Wed, 22 Dec 2021 17:17:12 +0800 Subject: [PATCH 119/251] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E7=94=B1?= =?UTF-8?q?=E4=BA=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D=E7=95=99=E5=AD=97?= =?UTF-8?q?=E6=98=AF=E8=A1=A8=E5=90=8D=E6=88=96=E8=80=85=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=90=8D=E6=97=B6=E5=BC=95=E8=B5=B7=E7=9A=84sql=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/util/DatabaseKeywordTransformer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java index ccbbfb25..2a330ccb 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java @@ -27,7 +27,7 @@ public class DatabaseKeywordTransformer { if(databaseType==DataBaseType.MySql){ databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); } - else if(databaseType==DataBaseType.Oracle){ + else if(databaseType==DataBaseType.Oracle || databaseType==DataBaseType.OceanBase){ databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); } else if(databaseType==DataBaseType.SQLServer){ @@ -45,7 +45,7 @@ public class DatabaseKeywordTransformer { if(databaseType==DataBaseType.MySql){ keyword='`'+keyword+'`'; } - else if(databaseType==DataBaseType.Oracle){ + else if(databaseType==DataBaseType.Oracle || databaseType==DataBaseType.OceanBase){ keyword='"'+keyword+'"'; } else if(databaseType==DataBaseType.SQLServer){ From 738c11e0e3e3e71d57b5b1799e560ecd96d0cb2e Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Wed, 22 Dec 2021 19:54:38 +0800 Subject: [PATCH 120/251] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E7=94=B1?= =?UTF-8?q?=E4=BA=8ESQL=E4=B8=AD=E7=9A=84=E4=BF=9D=E7=95=99=E5=AD=97?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E8=A1=A8=E5=90=8D=E6=88=96=E8=80=85=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=90=8D=E8=80=8C=E5=BC=95=E8=B5=B7=E7=9A=84sql?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/OceanBaseReader.java | 21 +++--- .../util/DatabaseKeywordTransformer.java | 68 ++++++++++--------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index db9d34e0..04d28482 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -37,20 +37,17 @@ public class OceanBaseReader extends Reader { if (userConfigedFetchSize != null) { LOG.warn("The [fetchSize] is not recognized, please use readBatchSize instead."); } - this.originalConfig.set(Constant.FETCH_SIZE, Integer.MIN_VALUE); - setDatabaseType(originalConfig); - - - this.readerJob = new ReaderJob(); - this.readerJob.init(this.originalConfig,DATABASE_TYPE); + this.readerJob.init(this.originalConfig, DATABASE_TYPE); } + @Override - public void prepare(){ + public void prepare() { //ObReaderUtils.DATABASE_TYPE获取当前数据库的语法模式 } + @Override public void preCheck() { init(); @@ -80,7 +77,7 @@ public class OceanBaseReader extends Reader { Configuration connConf = Configuration.from(conns.get(0).toString()); List jdbcUrls = connConf.getList(Key.JDBC_URL, String.class); String jdbcUrl = jdbcUrls.get(0); - if(jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { + if (jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { String[] ss = jdbcUrl.split(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING_PATTERN); if (ss.length != 3) { LOG.warn("unrecognized jdbc url: " + jdbcUrl); @@ -97,11 +94,11 @@ public class OceanBaseReader extends Reader { if (ObReaderUtils.isOracleMode(compatibleMode)) { ObReaderUtils.DATABASE_TYPE = DataBaseType.OceanBase; } - } catch (Exception e){ + + } catch (Exception e) { LOG.warn("error in get compatible mode, using mysql as default: " + e.getMessage()); - } - finally { - DATABASE_TYPE=ObReaderUtils.DATABASE_TYPE; + } finally { + DATABASE_TYPE = ObReaderUtils.DATABASE_TYPE; } } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java index 2a330ccb..6d85cf69 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java @@ -1,65 +1,67 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; //java api + import java.util.HashSet; import java.util.List; //dataX api import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -//该类用于转义数据库中的关键字 -public class DatabaseKeywordTransformer { +/** + * 该类用于转义数据库中的关键字 + * + * @author:qianzhang + */ +public class DatabaseKeywordTransformer { private static DataBaseType databaseType; static HashSet databaseKeywords; - private static HashSet keywordsFromString2HashSet(final String Keywords){ - String[] keywordArray =Keywords.split(","); - HashSet res=new HashSet(); - for(String keyword: keywordArray){ + + private static HashSet keywordsFromString2HashSet(final String keywords) { + String[] keywordArray = keywords.split(","); + HashSet res = new HashSet(); + for (String keyword : keywordArray) { res.add(keyword); } return res; } + public static void setDatabaseType(final DataBaseType databaseType) throws Exception { - if(databaseType==DatabaseKeywordTransformer.databaseType){ - return ; + if (databaseType == DatabaseKeywordTransformer.databaseType) { + return; } DatabaseKeywordTransformer.databaseType = databaseType; - if(databaseType==DataBaseType.MySql){ - databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); - } - else if(databaseType==DataBaseType.Oracle || databaseType==DataBaseType.OceanBase){ - databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); - } - else if(databaseType==DataBaseType.SQLServer){ - databaseKeywords=keywordsFromString2HashSet(DatabaseKeywords.SQLSERVER_KEYWORDS); - } - else{ + if (databaseType == DataBaseType.MySql) { + databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); + } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { + databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); + } else if (databaseType == DataBaseType.SQLServer) { + databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.SQLSERVER_KEYWORDS); + } else { throw new Exception("sorry,unknown database tpye..."); } } - public static void transferDatabaseKeywords(List keywords){ - for(int i=0;i keywords) { + for (int i = 0; i < keywords.size(); i++) { + String keyword = keywords.get(i).toUpperCase(); + if (databaseKeywords.contains(keyword)) { + if (databaseType == DataBaseType.MySql) { + keyword = '`' + keyword + '`'; + } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { + keyword = '"' + keyword + '"'; + } else if (databaseType == DataBaseType.SQLServer) { + keyword = '[' + keyword + ']'; } } - keyword=keyword.toLowerCase(); - keywords.set(i,keyword); + keyword = keyword.toLowerCase(); + keywords.set(i, keyword); } } } -final class DatabaseKeywords{ +final class DatabaseKeywords { public static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; From bd43216cf8110703bc7f99ec0d0dcac56ac666fe Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Thu, 23 Dec 2021 13:38:37 +0800 Subject: [PATCH 121/251] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=8F=90?= =?UTF-8?q?=E5=88=B0=E7=9A=84=E4=B8=8A=E8=BF=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/ext/ReaderJob.java | 3 +-- .../util/DatabaseKeywordTransformer.java | 19 +++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index efeec2e9..dfa1adbf 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -17,14 +17,13 @@ import org.slf4j.LoggerFactory; public class ReaderJob extends CommonRdbmsReader.Job { - + private Logger LOG=LoggerFactory.getLogger(OceanBaseReader.Task.class); public ReaderJob() { super(ObReaderUtils.DATABASE_TYPE); } public void init(Configuration originalConfig,DataBaseType databaseType){ //将config中的column和table中的关键字进行转义 - final Logger LOG = LoggerFactory.getLogger(OceanBaseReader.Task.class); try { DatabaseKeywordTransformer.setDatabaseType(databaseType); }catch (Exception e){ diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java index 6d85cf69..3c3e03f7 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java @@ -2,8 +2,10 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; //java api +import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Set; //dataX api import com.alibaba.datax.plugin.rdbms.util.DataBaseType; @@ -15,15 +17,10 @@ import com.alibaba.datax.plugin.rdbms.util.DataBaseType; */ public class DatabaseKeywordTransformer { private static DataBaseType databaseType; - static HashSet databaseKeywords; + static Set databaseKeywords; - private static HashSet keywordsFromString2HashSet(final String keywords) { - String[] keywordArray = keywords.split(","); - HashSet res = new HashSet(); - for (String keyword : keywordArray) { - res.add(keyword); - } - return res; + private static Set keywordsFromString2HashSet(final String keywords) { + return new HashSet(Arrays.asList(keywords.split(","))); } public static void setDatabaseType(final DataBaseType databaseType) throws Exception { @@ -35,8 +32,6 @@ public class DatabaseKeywordTransformer { databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); - } else if (databaseType == DataBaseType.SQLServer) { - databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.SQLSERVER_KEYWORDS); } else { throw new Exception("sorry,unknown database tpye..."); } @@ -50,8 +45,6 @@ public class DatabaseKeywordTransformer { keyword = '`' + keyword + '`'; } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { keyword = '"' + keyword + '"'; - } else if (databaseType == DataBaseType.SQLServer) { - keyword = '[' + keyword + ']'; } } keyword = keyword.toLowerCase(); @@ -65,7 +58,5 @@ final class DatabaseKeywords { public static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; - public static final String SQLSERVER_KEYWORDS = "ADD,ALL,ALTER,AND,ANY,AS,ASC,AUTHORIZATION,BACKUP,BEGIN,BETWEEN,BREAK,BROWSE,BULK,BY,CASCADE,CASE,CHECK,CHECKPOINT,CLOSE,CLUSTERED,COALESCE,COLLATE,COLUMN,COMMIT,COMPUTE,CONSTRAINT,CONTAINS,CONTAINSTABLE,CONTINUE,CONVERT,CREATE,CROSS,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,DATABASE,DBCC,DEALLOCATE,DECLARE,DEFAULT,DELETE,DENY,DESC,DISK,DISTINCT,DISTRIBUTED,DOUBLE,DROP,DUMMY,DUMP,ELSE,END,ERRLVL,ESCAPE,EXCEPT,EXEC,EXECUTE,EXISTS,EXIT,FETCH,FILE,FILLFACTOR,FOR,FOREIGN,FREETEXT,FREETEXTTABLE,FROM,FULL,FUNCTION,GOTO,GRANT,GROUP,HAVING,HOLDLOCK,IDENTITY,IDENTITY_INSERT,IDENTITYCOL,IF,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,JOIN,KEY,KILL,LEFT,LIKE,LINENO,LOAD,NATIONAL,NOCHECK,NONCLUSTERED,NOT,NULL,NULLIF,OF,OFF,OFFSETS,ON,OPEN,OPENDATASOURCE,OPENQUERY,OPENROWSET,OPENXML,OPTION,OR,ORDER,OUTER,OVER,PERCENT,PLAN,PRECISION,PRIMARY,PRINT,PROC,PROCEDURE,PUBLIC,RAISERROR,READ,READTEXT,RECONFIGURE,REFERENCES,REPLICATION,RESTORE,RESTRICT,RETURN,REVOKE,RIGHT,ROLLBACK,ROWCOUNT,ROWGUIDCOL,RULE,SAVE,SCHEMA,SELECT,SESSION_USER,SET,SETUSER,SHUTDOWN,SOME,STATISTICS,SYSTEM_USER,TABLE,TEXTSIZE,THEN,TO,TOP,TRAN,TRANSACTION,TRIGGER,TRUNCATE,TSEQUAL,UNION,UNIQUE,UPDATE,UPDATETEXT,USE,USER,VALUES,VARYING,VIEW,WAITFOR,WHEN,WHERE,WHILE,WITH,WRITETEXT"; - public static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; } \ No newline at end of file From 30ed711131c84f8401e06e186434f5ed340f647f Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Thu, 23 Dec 2021 13:46:26 +0800 Subject: [PATCH 122/251] =?UTF-8?q?=E5=86=8D=E6=AC=A1=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E4=BA=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index dfa1adbf..2584ca33 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -26,8 +26,8 @@ public class ReaderJob extends CommonRdbmsReader.Job { //将config中的column和table中的关键字进行转义 try { DatabaseKeywordTransformer.setDatabaseType(databaseType); - }catch (Exception e){ - LOG.warn("database type is "+databaseType+e.getMessage()); + } catch (Exception e) { + LOG.warn("database type is " + databaseType + e.getMessage()); } List columns=originalConfig.getList(Key.COLUMN,String.class); DatabaseKeywordTransformer.transferDatabaseKeywords(columns); From b017102e0e59ec36e9863a2a2fa90d55a376d5ad Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Thu, 23 Dec 2021 15:20:56 +0800 Subject: [PATCH 123/251] =?UTF-8?q?=E6=9C=80=E7=BB=88=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/ext/ReaderJob.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index 2584ca33..d574e3e1 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -17,32 +17,35 @@ import org.slf4j.LoggerFactory; public class ReaderJob extends CommonRdbmsReader.Job { - private Logger LOG=LoggerFactory.getLogger(OceanBaseReader.Task.class); + private Logger LOG = LoggerFactory.getLogger(OceanBaseReader.Task.class); + public ReaderJob() { super(ObReaderUtils.DATABASE_TYPE); } - public void init(Configuration originalConfig,DataBaseType databaseType){ + + public void init(Configuration originalConfig, DataBaseType databaseType) { //将config中的column和table中的关键字进行转义 try { DatabaseKeywordTransformer.setDatabaseType(databaseType); } catch (Exception e) { LOG.warn("database type is " + databaseType + e.getMessage()); } - List columns=originalConfig.getList(Key.COLUMN,String.class); + List columns = originalConfig.getList(Key.COLUMN, String.class); DatabaseKeywordTransformer.transferDatabaseKeywords(columns); originalConfig.set(Key.COLUMN, columns); - List conns=originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK,JSONObject.class); - for(int i=0;i tables=connConfig.getList(Key.TABLE,String.class); + List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); + for (int i = 0; i < conns.size(); i++) { + JSONObject conn = conns.get(i); + Configuration connConfig = Configuration.from(conn.toString()); + List tables = connConfig.getList(Key.TABLE, String.class); DatabaseKeywordTransformer.transferDatabaseKeywords(tables); - originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK,i,Key.TABLE),tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), tables); } super.init(originalConfig); } + @Override public List split(Configuration originalConfig, int adviceNumber) { List list = super.split(originalConfig, adviceNumber); From 19a44e8d9d1f40e1fbf4b2b0b105f346c00fbfbe Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Thu, 23 Dec 2021 18:10:08 +0800 Subject: [PATCH 124/251] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E4=B8=80=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/OceanBaseReader.java | 14 +- .../oceanbasev10reader/ext/ReaderJob.java | 16 +-- .../oceanbasev10reader/ext/ReaderTask.java | 24 ++-- .../util/ObReaderUtils.java | 125 ++++++++++-------- .../oceanbasev10reader/util/TaskContext.java | 1 + 5 files changed, 94 insertions(+), 86 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index 04d28482..fc461597 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -1,12 +1,8 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader; -import java.sql.Array; import java.sql.Connection; -import java.util.ArrayList; import java.util.List; -import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.DatabaseKeywordTransformer; -import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,7 +22,6 @@ public class OceanBaseReader extends Reader { public static class Job extends Reader.Job { private Configuration originalConfig = null; private ReaderJob readerJob; - private DataBaseType DATABASE_TYPE; private static final Logger LOG = LoggerFactory.getLogger(Task.class); @Override @@ -40,7 +35,7 @@ public class OceanBaseReader extends Reader { this.originalConfig.set(Constant.FETCH_SIZE, Integer.MIN_VALUE); setDatabaseType(originalConfig); this.readerJob = new ReaderJob(); - this.readerJob.init(this.originalConfig, DATABASE_TYPE); + this.readerJob.init(this.originalConfig); } @Override @@ -51,7 +46,7 @@ public class OceanBaseReader extends Reader { @Override public void preCheck() { init(); - this.readerJob.preCheck(this.originalConfig, ObReaderUtils.DATABASE_TYPE); + this.readerJob.preCheck(this.originalConfig, ObReaderUtils.compatibleMode); } @@ -92,13 +87,12 @@ public class OceanBaseReader extends Reader { Connection conn = DBUtil.getConnection(DataBaseType.OceanBase, obJdbcUrl, username, password); String compatibleMode = ObReaderUtils.getCompatibleMode(conn); if (ObReaderUtils.isOracleMode(compatibleMode)) { - ObReaderUtils.DATABASE_TYPE = DataBaseType.OceanBase; + ObReaderUtils.compatibleMode = DataBaseType.Oracle; + ObReaderUtils.databaseType = DataBaseType.OceanBase; } } catch (Exception e) { LOG.warn("error in get compatible mode, using mysql as default: " + e.getMessage()); - } finally { - DATABASE_TYPE = ObReaderUtils.DATABASE_TYPE; } } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index d574e3e1..2a31aaa1 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -9,7 +9,6 @@ import com.alibaba.datax.plugin.rdbms.reader.Key; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.datax.plugin.reader.oceanbasev10reader.OceanBaseReader; -import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.DatabaseKeywordTransformer; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; @@ -20,19 +19,14 @@ public class ReaderJob extends CommonRdbmsReader.Job { private Logger LOG = LoggerFactory.getLogger(OceanBaseReader.Task.class); public ReaderJob() { - super(ObReaderUtils.DATABASE_TYPE); - + super(ObReaderUtils.databaseType); } - public void init(Configuration originalConfig, DataBaseType databaseType) { + @Override + public void init(Configuration originalConfig) { //将config中的column和table中的关键字进行转义 - try { - DatabaseKeywordTransformer.setDatabaseType(databaseType); - } catch (Exception e) { - LOG.warn("database type is " + databaseType + e.getMessage()); - } List columns = originalConfig.getList(Key.COLUMN, String.class); - DatabaseKeywordTransformer.transferDatabaseKeywords(columns); + ObReaderUtils.transferDatabaseKeywords(columns); originalConfig.set(Key.COLUMN, columns); List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); @@ -40,7 +34,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); List tables = connConfig.getList(Key.TABLE, String.class); - DatabaseKeywordTransformer.transferDatabaseKeywords(tables); + ObReaderUtils.transferDatabaseKeywords(tables); originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), tables); } super.init(originalConfig); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index 073bb3cb..b5314ad8 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -41,11 +41,12 @@ public class ReaderTask extends CommonRdbmsReader.Task { private boolean reuseConn = false; public ReaderTask(int taskGroupId, int taskId) { - super(ObReaderUtils.DATABASE_TYPE, taskGroupId, taskId); + super(ObReaderUtils.compatibleMode, taskGroupId, taskId); this.taskGroupId = taskGroupId; this.taskId = taskId; } + @Override public void init(Configuration readerSliceConfig) { /* for database connection */ username = readerSliceConfig.getString(Key.USERNAME); @@ -54,7 +55,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { queryTimeoutSeconds = readerSliceConfig.getInt(Config.QUERY_TIMEOUT_SECOND, Config.DEFAULT_QUERY_TIMEOUT_SECOND); // ob10的处理 - if(jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { + if (jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { String[] ss = jdbcUrl.split(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING_PATTERN); if (ss.length == 3) { LOG.info("this is ob1_0 jdbc url."); @@ -63,7 +64,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } - if (ObReaderUtils.DATABASE_TYPE == DataBaseType.OceanBase) { + if (ObReaderUtils.databaseType == DataBaseType.OceanBase) { jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } else { @@ -72,7 +73,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { LOG.info("this is ob1_0 jdbc url. user=" + username + " :url=" + jdbcUrl); mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); retryLimit = readerSliceConfig.getInt(Config.RETRY_LIMIT, Config.DEFAULT_RETRY_LIMIT); - LOG.info("retryLimit: "+ retryLimit); + LOG.info("retryLimit: " + retryLimit); } private void buildSavePoint(TaskContext context) { @@ -83,7 +84,6 @@ public class ReaderTask extends CommonRdbmsReader.Task { } /** - * * 如果isTableMode && table有PK *

* 则支持断点续读 (若pk不在原始的columns中,则追加到尾部,但不传给下游) @@ -92,7 +92,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { */ @Override public void startRead(Configuration readerSliceConfig, RecordSender recordSender, - TaskPluginCollector taskPluginCollector, int fetchSize) { + TaskPluginCollector taskPluginCollector, int fetchSize) { String querySql = readerSliceConfig.getString(Key.QUERY_SQL); String table = readerSliceConfig.getString(Key.TABLE); PerfTrace.getInstance().addTaskDetails(taskId, table + "," + jdbcUrl); @@ -131,14 +131,14 @@ public class ReaderTask extends CommonRdbmsReader.Task { } private void startRead0(boolean isTableMode, TaskContext context, RecordSender recordSender, - TaskPluginCollector taskPluginCollector) { + TaskPluginCollector taskPluginCollector) { // 不是table模式 直接使用原来的做法 if (!isTableMode) { doRead(recordSender, taskPluginCollector, context); return; } // check primary key index - Connection conn = DBUtil.getConnection(ObReaderUtils.DATABASE_TYPE, jdbcUrl, username, password); + Connection conn = DBUtil.getConnection(ObReaderUtils.databaseType, jdbcUrl, username, password); ObReaderUtils.initConn4Reader(conn, queryTimeoutSeconds); context.setConn(conn); try { @@ -184,11 +184,11 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } catch (Throwable e) { if (retryLimit == ++retryCount) { - throw RdbmsException.asQueryException(ObReaderUtils.DATABASE_TYPE, new Exception(e), + throw RdbmsException.asQueryException(ObReaderUtils.compatibleMode, new Exception(e), context.getQuerySql(), context.getTable(), username); } LOG.error("read fail, retry count " + retryCount + ", sleep 60 second, save point:" + - context.getSavePoint() + ", error: "+ e.getMessage()); + context.getSavePoint() + ", error: " + e.getMessage()); ObReaderUtils.sleep(60000); // sleep 10s } // 假如原来的查询有查出数据,则改成增量查询 @@ -227,7 +227,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { LOG.info("connection is alive, will reuse this connection."); } else { LOG.info("Create new connection for reader."); - conn = DBUtil.getConnection(ObReaderUtils.DATABASE_TYPE, jdbcUrl, username, password); + conn = DBUtil.getConnection(ObReaderUtils.databaseType, jdbcUrl, username, password); ObReaderUtils.initConn4Reader(conn, queryTimeoutSeconds); context.setConn(conn); } @@ -287,7 +287,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { ObReaderUtils.close(null, null, context.getConn()); context.setConn(null); LOG.error("reader data fail", e); - throw RdbmsException.asQueryException(ObReaderUtils.DATABASE_TYPE, e, context.getQuerySql(), + throw RdbmsException.asQueryException(ObReaderUtils.compatibleMode, e, context.getQuerySql(), context.getTable(), username); } finally { perfRecord.end(); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 39f12eac..5084523e 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -6,18 +6,12 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.Set; -import java.util.TreeSet; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -32,21 +26,54 @@ import com.alibaba.datax.common.element.LongColumn; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.element.StringColumn; import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; +import javax.xml.crypto.Data; + public class ObReaderUtils { private static final Logger LOG = LoggerFactory.getLogger(ObReaderUtils.class); + private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; + private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; + private static Set databaseKeywords; + private static DataBaseType currentKeywordsTpye; final static public String OB_COMPATIBLE_MODE = "obCompatibilityMode"; final static public String OB_COMPATIBLE_MODE_ORACLE = "ORACLE"; final static public String OB_COMPATIBLE_MODE_MYSQL = "MYSQL"; - public static DataBaseType DATABASE_TYPE = DataBaseType.MySql; + public static DataBaseType compatibleMode = DataBaseType.MySql; + + public static DataBaseType databaseType = DataBaseType.MySql; + + + private static Set keywordsFromString2HashSet(final String keywords) { + return new HashSet(Arrays.asList(keywords.split(","))); + } + + public static void transferDatabaseKeywords(List keywords) { + //判断是否需要更改关键字集合 + if (databaseKeywords == null || currentKeywordsTpye != compatibleMode) { + if (isOracleMode(compatibleMode.toString())) { + databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); + } else { + databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); + } + currentKeywordsTpye = compatibleMode; + } + char escapeChar = isOracleMode(compatibleMode.toString()) ? '"' : '`'; + for (int i = 0; i < keywords.size(); i++) { + String keyword = keywords.get(i).toUpperCase(); + if (databaseKeywords.contains(keyword)) { + keyword = escapeChar + keyword + escapeChar; + } + keyword = keyword.toLowerCase(); + keywords.set(i, keyword); + } + } public static void initConn4Reader(Connection conn, long queryTimeoutSeconds) { String setQueryTimeout = "set ob_query_timeout=" + (queryTimeoutSeconds * 1000 * 1000L); @@ -57,7 +84,7 @@ public class ObReaderUtils { stmt = conn.createStatement(); stmt.execute(setQueryTimeout); stmt.execute(setTrxTimeout); - LOG.warn("setAutoCommit=true;"+setQueryTimeout+";"+setTrxTimeout+";"); + LOG.warn("setAutoCommit=true;" + setQueryTimeout + ";" + setTrxTimeout + ";"); } catch (Throwable e) { LOG.warn("initConn4Reader fail", e); } finally { @@ -73,7 +100,6 @@ public class ObReaderUtils { } /** - * * @param conn * @param context */ @@ -115,9 +141,9 @@ public class ObReaderUtils { String sql = "show index from " + tableName + " where Key_name='PRIMARY'"; if (isOracleMode(context.getCompatibleMode())) { tableName = tableName.toUpperCase(); - sql = "SELECT cols.column_name Column_name "+ + sql = "SELECT cols.column_name Column_name " + "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName+ "' AND cons.constraint_type = 'P' " + + "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type = 'P' " + "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; } LOG.info("get primary key by sql: " + sql); @@ -134,12 +160,7 @@ public class ObReaderUtils { realIndex.add(columnName); } } - //fix:将主键中的关键字转义 - DatabaseKeywordTransformer.setDatabaseType(DataBaseType.MySql); - if(isOracleMode(context.getCompatibleMode())){ - DatabaseKeywordTransformer.setDatabaseType(DataBaseType.Oracle); - } - DatabaseKeywordTransformer.transferDatabaseKeywords(realIndex); + transferDatabaseKeywords(realIndex); String[] pks = new String[realIndex.size()]; realIndex.toArray(pks); @@ -166,7 +187,7 @@ public class ObReaderUtils { if (StringUtils.isNotEmpty(indexName)) { String weakReadHint = weakRead ? "+READ_CONSISTENCY(WEAK)," : "+"; sql += " /*" + weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; - } else if (weakRead){ + } else if (weakRead) { sql += " /*+READ_CONSISTENCY(WEAK)*/ "; } sql += StringUtils.join(context.getColumns(), ','); @@ -197,7 +218,6 @@ public class ObReaderUtils { * 增量查的SQL * * @param conn - * * @param context * @return sql */ @@ -207,8 +227,8 @@ public class ObReaderUtils { String sql = "select "; if (StringUtils.isNotEmpty(indexName)) { String weakReadHint = weakRead ? "+READ_CONSISTENCY(WEAK)," : "+"; - sql += " /*"+ weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; - } else if (weakRead){ + sql += " /*" + weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; + } else if (weakRead) { sql += " /*+READ_CONSISTENCY(WEAK)*/ "; } sql += StringUtils.join(context.getColumns(), ',') + " from " + context.getTable(); @@ -305,7 +325,7 @@ public class ObReaderUtils { final char rightBracket = ')'; if (str != null && str.contains(String.valueOf(leftBracket)) && str.contains(String.valueOf(rightBracket)) && str.indexOf(leftBracket) < str.indexOf(rightBracket)) { - return str.substring(str.indexOf(leftBracket)+1, str.indexOf(rightBracket)); + return str.substring(str.indexOf(leftBracket) + 1, str.indexOf(rightBracket)); } return str; } @@ -374,7 +394,7 @@ public class ObReaderUtils { /** * 找出where条件中的列名,目前仅支持全部为and条件,并且操作符为大于、大约等于、等于、小于、小于等于和不等于的表达式。 - * + *

* test coverage: - c6 = 20180710 OR c4 = 320: no index selected - 20180710 * = c6: correct index selected - 20180710 = c6 and c4 = 320 or c2 < 100: no * index selected @@ -426,17 +446,17 @@ public class ObReaderUtils { if (isOracleMode(compatibleMode)) { tableName = tableName.toUpperCase(); sql = "SELECT INDEX_NAME Key_name, COLUMN_NAME Column_name " + - "from dba_ind_columns where TABLE_NAME = '" + tableName +"' " + + "from dba_ind_columns where TABLE_NAME = '" + tableName + "' " + " union all " + - "SELECT DISTINCT " + - "CASE " + - "WHEN cons.CONSTRAINT_TYPE = 'P' THEN 'PRIMARY' " + - "WHEN cons.CONSTRAINT_TYPE = 'U' THEN cons.CONSTRAINT_NAME " + - "ELSE '' " + - "END AS Key_name, " + - "cols.column_name Column_name " + - "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type in('P', 'U') " + + "SELECT DISTINCT " + + "CASE " + + "WHEN cons.CONSTRAINT_TYPE = 'P' THEN 'PRIMARY' " + + "WHEN cons.CONSTRAINT_TYPE = 'U' THEN cons.CONSTRAINT_NAME " + + "ELSE '' " + + "END AS Key_name, " + + "cols.column_name Column_name " + + "FROM all_constraints cons, all_cons_columns cols " + + "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type in('P', 'U') " + "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; } Statement stmt = null; @@ -479,14 +499,13 @@ public class ObReaderUtils { } /** - * * @param conn * @param table * @param colNamesInCondition * @return */ private static List getIndexName(Connection conn, String table, - Set colNamesInCondition, String compatibleMode) { + Set colNamesInCondition, String compatibleMode) { List indexNames = new ArrayList(); if (colNamesInCondition == null || colNamesInCondition.size() == 0) { LOG.info("there is no qulified conditions in the where clause, skip index selection."); @@ -550,7 +569,7 @@ public class ObReaderUtils { Map index = new TreeMap(); List columnList = allIndexInTab.get(indexName); for (int i = 1; i <= columnList.size(); i++) { - index.put(i, columnList.get(i-1)); + index.put(i, columnList.get(i - 1)); } allIndexs.put(indexName, index); } else { @@ -654,19 +673,19 @@ public class ObReaderUtils { public static void binding(PreparedStatement ps, List list) throws SQLException { for (int i = 0, n = list.size(); i < n; i++) { Column c = list.get(i); - if(c instanceof BoolColumn){ - ps.setLong(i + 1, ((BoolColumn)c).asLong()); - }else if(c instanceof BytesColumn){ - ps.setBytes(i + 1, ((BytesColumn)c).asBytes()); - }else if(c instanceof DateColumn){ - ps.setTimestamp(i + 1, new Timestamp(((DateColumn)c).asDate().getTime())); - }else if(c instanceof DoubleColumn){ - ps.setDouble(i + 1, ((DoubleColumn)c).asDouble()); - }else if(c instanceof LongColumn){ - ps.setLong(i + 1, ((LongColumn)c).asLong()); - }else if(c instanceof StringColumn){ - ps.setString(i + 1, ((StringColumn)c).asString()); - }else{ + if (c instanceof BoolColumn) { + ps.setLong(i + 1, ((BoolColumn) c).asLong()); + } else if (c instanceof BytesColumn) { + ps.setBytes(i + 1, ((BytesColumn) c).asBytes()); + } else if (c instanceof DateColumn) { + ps.setTimestamp(i + 1, new Timestamp(((DateColumn) c).asDate().getTime())); + } else if (c instanceof DoubleColumn) { + ps.setDouble(i + 1, ((DoubleColumn) c).asDouble()); + } else if (c instanceof LongColumn) { + ps.setLong(i + 1, ((LongColumn) c).asLong()); + } else if (c instanceof StringColumn) { + ps.setString(i + 1, ((StringColumn) c).asString()); + } else { ps.setObject(i + 1, c.getRawData()); } } @@ -702,6 +721,6 @@ public class ObReaderUtils { } public static boolean isOracleMode(String mode) { - return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equals(mode)); + return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equals(mode.toString().toUpperCase())); } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java index ba754a37..17655a52 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java @@ -162,6 +162,7 @@ public class TaskContext { public String getUserSavePoint() { return userSavePoint; } + public void setUserSavePoint(String userSavePoint) { this.userSavePoint = userSavePoint; } From 55351fcbaaa94b600f7776667fee71f94e4057f2 Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Fri, 24 Dec 2021 10:02:17 +0800 Subject: [PATCH 125/251] =?UTF-8?q?=E5=90=8C=E6=97=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86reader=E5=92=8Cwriter=EF=BC=8C=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E5=B0=86DatabaseKeywordTransformer=E7=B1=BB=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=90=88=E5=B9=B6=E5=88=B0writer(reader)util?= =?UTF-8?q?s=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/OceanBaseReader.java | 5 +- .../oceanbasev10reader/ext/ReaderTask.java | 6 +- .../util/DatabaseKeywordTransformer.java | 62 ------------------- .../util/ObReaderUtils.java | 6 +- .../OceanBaseV10Writer.java | 14 +++++ .../util/ObWriterUtils.java | 31 +++++++++- 6 files changed, 51 insertions(+), 73 deletions(-) delete mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index fc461597..228af811 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -46,7 +46,7 @@ public class OceanBaseReader extends Reader { @Override public void preCheck() { init(); - this.readerJob.preCheck(this.originalConfig, ObReaderUtils.compatibleMode); + this.readerJob.preCheck(this.originalConfig, ObReaderUtils.databaseType); } @@ -87,8 +87,7 @@ public class OceanBaseReader extends Reader { Connection conn = DBUtil.getConnection(DataBaseType.OceanBase, obJdbcUrl, username, password); String compatibleMode = ObReaderUtils.getCompatibleMode(conn); if (ObReaderUtils.isOracleMode(compatibleMode)) { - ObReaderUtils.compatibleMode = DataBaseType.Oracle; - ObReaderUtils.databaseType = DataBaseType.OceanBase; + ObReaderUtils.compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } } catch (Exception e) { diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index b5314ad8..fab0b1fb 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -41,7 +41,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { private boolean reuseConn = false; public ReaderTask(int taskGroupId, int taskId) { - super(ObReaderUtils.compatibleMode, taskGroupId, taskId); + super(ObReaderUtils.databaseType, taskGroupId, taskId); this.taskGroupId = taskGroupId; this.taskId = taskId; } @@ -184,7 +184,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } catch (Throwable e) { if (retryLimit == ++retryCount) { - throw RdbmsException.asQueryException(ObReaderUtils.compatibleMode, new Exception(e), + throw RdbmsException.asQueryException(ObReaderUtils.databaseType, new Exception(e), context.getQuerySql(), context.getTable(), username); } LOG.error("read fail, retry count " + retryCount + ", sleep 60 second, save point:" + @@ -287,7 +287,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { ObReaderUtils.close(null, null, context.getConn()); context.setConn(null); LOG.error("reader data fail", e); - throw RdbmsException.asQueryException(ObReaderUtils.compatibleMode, e, context.getQuerySql(), + throw RdbmsException.asQueryException(ObReaderUtils.databaseType, e, context.getQuerySql(), context.getTable(), username); } finally { perfRecord.end(); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java deleted file mode 100644 index 3c3e03f7..00000000 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/DatabaseKeywordTransformer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; - -//java api - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -//dataX api -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; - -/** - * 该类用于转义数据库中的关键字 - * - * @author:qianzhang - */ -public class DatabaseKeywordTransformer { - private static DataBaseType databaseType; - static Set databaseKeywords; - - private static Set keywordsFromString2HashSet(final String keywords) { - return new HashSet(Arrays.asList(keywords.split(","))); - } - - public static void setDatabaseType(final DataBaseType databaseType) throws Exception { - if (databaseType == DatabaseKeywordTransformer.databaseType) { - return; - } - DatabaseKeywordTransformer.databaseType = databaseType; - if (databaseType == DataBaseType.MySql) { - databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS); - } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { - databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS); - } else { - throw new Exception("sorry,unknown database tpye..."); - } - } - - public static void transferDatabaseKeywords(List keywords) { - for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i).toUpperCase(); - if (databaseKeywords.contains(keyword)) { - if (databaseType == DataBaseType.MySql) { - keyword = '`' + keyword + '`'; - } else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) { - keyword = '"' + keyword + '"'; - } - } - keyword = keyword.toLowerCase(); - keywords.set(i, keyword); - } - } -} - - -final class DatabaseKeywords { - - public static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; - - public static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; -} \ No newline at end of file diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 5084523e..8efee64f 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -40,14 +40,14 @@ public class ObReaderUtils { private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; private static Set databaseKeywords; - private static DataBaseType currentKeywordsTpye; + private static String currentKeywordsTpye; final static public String OB_COMPATIBLE_MODE = "obCompatibilityMode"; final static public String OB_COMPATIBLE_MODE_ORACLE = "ORACLE"; final static public String OB_COMPATIBLE_MODE_MYSQL = "MYSQL"; - public static DataBaseType compatibleMode = DataBaseType.MySql; + public static String compatibleMode = OB_COMPATIBLE_MODE_MYSQL; - public static DataBaseType databaseType = DataBaseType.MySql; + public static final DataBaseType databaseType = DataBaseType.OceanBase; private static Set keywordsFromString2HashSet(final String keywords) { diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index 4ffaffed..bf1c9f60 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; +import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,6 +61,19 @@ public class OceanBaseV10Writer extends Writer { public void init() { this.originalConfig = super.getPluginJobConf(); checkCompatibleMode(originalConfig); + //将config中的column和table中的关键字进行转义 + List columns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Key.COLUMN, String.class); + ObWriterUtils.transferDatabaseKeywords(columns); + originalConfig.set(com.alibaba.datax.plugin.rdbms.reader.Key.COLUMN, columns); + + List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); + for (int i = 0; i < conns.size(); i++) { + JSONObject conn = conns.get(i); + Configuration connConfig = Configuration.from(conn.toString()); + List tables = connConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Key.TABLE, String.class); + ObWriterUtils.transferDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, com.alibaba.datax.plugin.rdbms.reader.Key.TABLE), tables); + } this.commonJob = new CommonRdbmsWriter.Job(DATABASE_TYPE); this.commonJob.init(this.originalConfig); } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index 368c3d17..a8ff7a04 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -14,12 +14,39 @@ import java.util.*; import java.util.stream.Collectors; public class ObWriterUtils { - protected static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; + private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; private static String CHECK_MEMSTORE = "select 1 from %s.gv$memstore t where t.total>t.mem_limit * ?"; - + private static Set databaseKeywords; private static String compatibleMode = null; + private static String currentKeywordsTpye =null; + protected static final Logger LOG = LoggerFactory.getLogger(Task.class); + private static Set keywordsFromString2HashSet(final String keywords) { + return new HashSet(Arrays.asList(keywords.split(","))); + } + public static void transferDatabaseKeywords(List keywords) { + //判断是否需要更改关键字集合 + if (databaseKeywords == null || currentKeywordsTpye != compatibleMode) { + if (isOracleMode()) { + databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); + } else { + databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); + } + currentKeywordsTpye = compatibleMode; + } + char escapeChar = isOracleMode() ? '"' : '`'; + for (int i = 0; i < keywords.size(); i++) { + String keyword = keywords.get(i).toUpperCase(); + if (databaseKeywords.contains(keyword)) { + keyword = escapeChar + keyword + escapeChar; + } + keyword = keyword.toLowerCase(); + keywords.set(i, keyword); + } + } public static boolean isMemstoreFull(Connection conn, double memstoreThreshold) { PreparedStatement ps = null; ResultSet rs = null; From dcb541f04801afb9fc95f28e6aec348e216952a8 Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Mon, 27 Dec 2021 17:02:51 +0800 Subject: [PATCH 126/251] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=89=88=E6=9C=AC=E6=8F=90=E5=88=B0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reader/oceanbasev10reader/ext/ReaderJob.java | 4 ++-- .../reader/oceanbasev10reader/ext/ReaderTask.java | 4 +++- .../oceanbasev10reader/util/ObReaderUtils.java | 14 +++++--------- .../oceanbasev10writer/OceanBaseV10Writer.java | 15 +++++++-------- .../task/ConcurrentTableWriterTask.java | 7 ++++++- .../oceanbasev10writer/util/ObWriterUtils.java | 10 ++++------ 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index 2a31aaa1..f69a9166 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -26,7 +26,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { public void init(Configuration originalConfig) { //将config中的column和table中的关键字进行转义 List columns = originalConfig.getList(Key.COLUMN, String.class); - ObReaderUtils.transferDatabaseKeywords(columns); + ObReaderUtils.escapeDatabaseKeywords(columns); originalConfig.set(Key.COLUMN, columns); List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); @@ -34,7 +34,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); List tables = connConfig.getList(Key.TABLE, String.class); - ObReaderUtils.transferDatabaseKeywords(tables); + ObReaderUtils.escapeDatabaseKeywords(tables); originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), tables); } super.init(originalConfig); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index fab0b1fb..254b334c 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -66,10 +66,12 @@ public class ReaderTask extends CommonRdbmsReader.Task { if (ObReaderUtils.databaseType == DataBaseType.OceanBase) { jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 - compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } else { jdbcUrl = jdbcUrl + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 } + if(ObReaderUtils.compatibleMode==ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE){ + compatibleMode=ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; + } LOG.info("this is ob1_0 jdbc url. user=" + username + " :url=" + jdbcUrl); mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); retryLimit = readerSliceConfig.getInt(Config.RETRY_LIMIT, Config.DEFAULT_RETRY_LIMIT); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 8efee64f..143171db 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -40,7 +40,6 @@ public class ObReaderUtils { private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; private static Set databaseKeywords; - private static String currentKeywordsTpye; final static public String OB_COMPATIBLE_MODE = "obCompatibilityMode"; final static public String OB_COMPATIBLE_MODE_ORACLE = "ORACLE"; final static public String OB_COMPATIBLE_MODE_MYSQL = "MYSQL"; @@ -54,23 +53,20 @@ public class ObReaderUtils { return new HashSet(Arrays.asList(keywords.split(","))); } - public static void transferDatabaseKeywords(List keywords) { - //判断是否需要更改关键字集合 - if (databaseKeywords == null || currentKeywordsTpye != compatibleMode) { + public static void escapeDatabaseKeywords(List keywords) { + if (databaseKeywords == null) { if (isOracleMode(compatibleMode.toString())) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); } else { databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); } - currentKeywordsTpye = compatibleMode; } char escapeChar = isOracleMode(compatibleMode.toString()) ? '"' : '`'; for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i).toUpperCase(); - if (databaseKeywords.contains(keyword)) { + String keyword = keywords.get(i); + if (databaseKeywords.contains(keyword.toUpperCase())) { keyword = escapeChar + keyword + escapeChar; } - keyword = keyword.toLowerCase(); keywords.set(i, keyword); } } @@ -160,7 +156,7 @@ public class ObReaderUtils { realIndex.add(columnName); } } - transferDatabaseKeywords(realIndex); + escapeDatabaseKeywords(realIndex); String[] pks = new String[realIndex.size()]; realIndex.toArray(pks); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index bf1c9f60..417fccb3 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -3,7 +3,6 @@ package com.alibaba.datax.plugin.writer.oceanbasev10writer; import java.sql.*; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; import com.alibaba.fastjson.JSONObject; @@ -62,17 +61,17 @@ public class OceanBaseV10Writer extends Writer { this.originalConfig = super.getPluginJobConf(); checkCompatibleMode(originalConfig); //将config中的column和table中的关键字进行转义 - List columns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Key.COLUMN, String.class); - ObWriterUtils.transferDatabaseKeywords(columns); - originalConfig.set(com.alibaba.datax.plugin.rdbms.reader.Key.COLUMN, columns); + List columns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Key.COLUMN, String.class); + ObWriterUtils.escapeDatabaseKeywords(columns); + originalConfig.set(com.alibaba.datax.plugin.rdbms.writer.Key.COLUMN, columns); - List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); + List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Constant.CONN_MARK, JSONObject.class); for (int i = 0; i < conns.size(); i++) { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); - List tables = connConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Key.TABLE, String.class); - ObWriterUtils.transferDatabaseKeywords(tables); - originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, com.alibaba.datax.plugin.rdbms.reader.Key.TABLE), tables); + List tables = connConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Key.TABLE, String.class); + ObWriterUtils.escapeDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.writer.Constant.CONN_MARK, i, com.alibaba.datax.plugin.rdbms.writer.Key.TABLE), tables); } this.commonJob = new CommonRdbmsWriter.Job(DATABASE_TYPE); this.commonJob.init(this.originalConfig); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index cbc9a936..f07c543b 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -15,6 +15,7 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.regex.Pattern; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ObClientConnHolder; @@ -105,7 +106,11 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { checkConnHolder.initConnection(); if (isOracleCompatibleMode) { connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); - table = table.toUpperCase(); + //在转义的情况下不翻译 + if(!Pattern.matches("\"\\w*\"",table)){ + table = table.toUpperCase(); + } + LOG.info(String.format("this is oracle compatible mode, change database to %s, table to %s", connectInfo.databaseName, table)); } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index a8ff7a04..8e9b4204 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -21,26 +21,24 @@ public class ObWriterUtils { private static String CHECK_MEMSTORE = "select 1 from %s.gv$memstore t where t.total>t.mem_limit * ?"; private static Set databaseKeywords; private static String compatibleMode = null; - private static String currentKeywordsTpye =null; protected static final Logger LOG = LoggerFactory.getLogger(Task.class); private static Set keywordsFromString2HashSet(final String keywords) { return new HashSet(Arrays.asList(keywords.split(","))); } - public static void transferDatabaseKeywords(List keywords) { + public static void escapeDatabaseKeywords(List keywords) { //判断是否需要更改关键字集合 - if (databaseKeywords == null || currentKeywordsTpye != compatibleMode) { + if (databaseKeywords == null) { if (isOracleMode()) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); } else { databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); } - currentKeywordsTpye = compatibleMode; } char escapeChar = isOracleMode() ? '"' : '`'; for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i).toUpperCase(); - if (databaseKeywords.contains(keyword)) { + String keyword = keywords.get(i); + if (databaseKeywords.contains(keyword.toUpperCase())) { keyword = escapeChar + keyword + escapeChar; } keyword = keyword.toLowerCase(); From 9f09039a23aee7fa42a4cd140c81aee7687518ce Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Mon, 27 Dec 2021 17:49:49 +0800 Subject: [PATCH 127/251] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/ext/ReaderTask.java | 26 ++++---- .../util/ObReaderUtils.java | 2 +- .../OceanBaseV10Writer.java | 30 +++++----- .../task/ConcurrentTableWriterTask.java | 59 +++++++++---------- .../util/ObWriterUtils.java | 1 - 5 files changed, 55 insertions(+), 63 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index 254b334c..1376f113 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -1,13 +1,5 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordSender; @@ -19,11 +11,17 @@ import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Constant; import com.alibaba.datax.plugin.rdbms.reader.Key; import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.util.RdbmsException; import com.alibaba.datax.plugin.reader.oceanbasev10reader.Config; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.TaskContext; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; public class ReaderTask extends CommonRdbmsReader.Task { private static final Logger LOG = LoggerFactory.getLogger(ReaderTask.class); @@ -64,13 +62,9 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } - if (ObReaderUtils.databaseType == DataBaseType.OceanBase) { - jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 - } else { - jdbcUrl = jdbcUrl + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 - } - if(ObReaderUtils.compatibleMode==ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE){ - compatibleMode=ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; + jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 + if (ObReaderUtils.compatibleMode == ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE) { + compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } LOG.info("this is ob1_0 jdbc url. user=" + username + " :url=" + jdbcUrl); mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 143171db..878aaea6 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -717,6 +717,6 @@ public class ObReaderUtils { } public static boolean isOracleMode(String mode) { - return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equals(mode.toString().toUpperCase())); + return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equalsIgnoreCase(mode)); } } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index 417fccb3..ede2eb01 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -1,15 +1,5 @@ package com.alibaba.datax.plugin.writer.oceanbasev10writer; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; - -import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; -import com.alibaba.fastjson.JSONObject; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; @@ -20,7 +10,16 @@ import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.datax.plugin.rdbms.writer.Key; import com.alibaba.datax.plugin.rdbms.writer.util.WriterUtil; import com.alibaba.datax.plugin.writer.oceanbasev10writer.task.ConcurrentTableWriterTask; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.List; /** * 2016-04-07 @@ -61,17 +60,17 @@ public class OceanBaseV10Writer extends Writer { this.originalConfig = super.getPluginJobConf(); checkCompatibleMode(originalConfig); //将config中的column和table中的关键字进行转义 - List columns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Key.COLUMN, String.class); + List columns = originalConfig.getList(Key.COLUMN, String.class); ObWriterUtils.escapeDatabaseKeywords(columns); - originalConfig.set(com.alibaba.datax.plugin.rdbms.writer.Key.COLUMN, columns); + originalConfig.set(Key.COLUMN, columns); - List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Constant.CONN_MARK, JSONObject.class); + List conns = originalConfig.getList(Constant.CONN_MARK, JSONObject.class); for (int i = 0; i < conns.size(); i++) { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); - List tables = connConfig.getList(com.alibaba.datax.plugin.rdbms.writer.Key.TABLE, String.class); + List tables = connConfig.getList(Key.TABLE, String.class); ObWriterUtils.escapeDatabaseKeywords(tables); - originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.writer.Constant.CONN_MARK, i, com.alibaba.datax.plugin.rdbms.writer.Key.TABLE), tables); + originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, i, Key.TABLE), tables); } this.commonJob = new CommonRdbmsWriter.Job(DATABASE_TYPE); this.commonJob.init(this.originalConfig); @@ -235,6 +234,7 @@ public class OceanBaseV10Writer extends Writer { /** * 注意:此方法每个 Task 都会执行一次。 最佳实践:此处适当封装确保简洁清晰完成数据写入工作。 */ + @Override public void startWrite(RecordReceiver recordReceiver) { this.writerTask.startWrite(recordReceiver, this.writerSliceConfig, super.getTaskPluginCollector()); } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index f07c543b..cf39cf28 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -1,7 +1,27 @@ package com.alibaba.datax.plugin.writer.oceanbasev10writer.task; +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.Config; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ConnHolder; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ObClientConnHolder; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ServerConnectInfo; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; +import com.alipay.oceanbase.obproxy.data.TableEntryKey; +import com.alipay.oceanbase.obproxy.util.ObPartitionIdCalculator; +import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.sql.Connection; -//import java.sql.PreparedStatement; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; @@ -15,29 +35,8 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import java.util.regex.Pattern; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ObClientConnHolder; -import org.apache.commons.lang3.tuple.Pair; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.RecordReceiver; -import com.alibaba.datax.common.plugin.TaskPluginCollector; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.Config; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ConnHolder; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ServerConnectInfo; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; -import com.alipay.oceanbase.obproxy.data.TableEntryKey; -import com.alipay.oceanbase.obproxy.util.ObPartitionIdCalculator; +//import java.sql.PreparedStatement; public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { private static final Logger LOG = LoggerFactory.getLogger(ConcurrentTableWriterTask.class); @@ -105,14 +104,14 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { connectInfo.getFullUserName(), connectInfo.password); checkConnHolder.initConnection(); if (isOracleCompatibleMode) { - connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); - //在转义的情况下不翻译 - if(!Pattern.matches("\"\\w*\"",table)){ - table = table.toUpperCase(); - } + connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); + //在转义的情况下不翻译 + if (table.startsWith("\"") && table.endsWith("\"")) { + table = table.toUpperCase(); + } - LOG.info(String.format("this is oracle compatible mode, change database to %s, table to %s", - connectInfo.databaseName, table)); + LOG.info(String.format("this is oracle compatible mode, change database to %s, table to %s", + connectInfo.databaseName, table)); } if (config.getBool(Config.USE_PART_CALCULATOR, Config.DEFAULT_USE_PART_CALCULATOR)) { diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index 8e9b4204..072a0f21 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -41,7 +41,6 @@ public class ObWriterUtils { if (databaseKeywords.contains(keyword.toUpperCase())) { keyword = escapeChar + keyword + escapeChar; } - keyword = keyword.toLowerCase(); keywords.set(i, keyword); } } From b1334308a08b7c6ffdd2edbdc43f055ad1aef0ea Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Tue, 28 Dec 2021 10:10:43 +0800 Subject: [PATCH 128/251] =?UTF-8?q?=E6=8A=8A=E8=BD=AC=E4=B9=89=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4=E4=B8=80?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10writer/task/ConcurrentTableWriterTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index cf39cf28..1e6d27c6 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -106,7 +106,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { if (isOracleCompatibleMode) { connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); //在转义的情况下不翻译 - if (table.startsWith("\"") && table.endsWith("\"")) { + if (!(table.startsWith("\"") && table.endsWith("\""))) { table = table.toUpperCase(); } From ce29ae7ee5d7ac5163c30b80ef0b41c361ced7b8 Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Tue, 28 Dec 2021 18:25:16 +0800 Subject: [PATCH 129/251] =?UTF-8?q?=E6=9C=AC=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E8=BD=AC=E4=B9=89=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=8D=E9=9C=80=E8=A6=81=E8=BF=9B=E8=A1=8C=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E5=86=99=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../util/ObReaderUtils.java | 71 +++++++++---------- .../task/ConcurrentTableWriterTask.java | 38 +++++++--- .../util/ObWriterUtils.java | 44 +++++++++--- 3 files changed, 96 insertions(+), 57 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 878aaea6..20c2f922 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -1,37 +1,22 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Timestamp; -import java.util.*; -import java.util.Map.Entry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - +import com.alibaba.datax.common.element.*; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.datax.common.element.BoolColumn; -import com.alibaba.datax.common.element.BytesColumn; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.DateColumn; -import com.alibaba.datax.common.element.DoubleColumn; -import com.alibaba.datax.common.element.LongColumn; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.element.StringColumn; -import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.druid.sql.SQLUtils; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; -import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; - -import javax.xml.crypto.Data; +import java.sql.*; +import java.util.*; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ObReaderUtils { @@ -53,21 +38,32 @@ public class ObReaderUtils { return new HashSet(Arrays.asList(keywords.split(","))); } - public static void escapeDatabaseKeywords(List keywords) { + public static String escapeDatabaseKeywords(String keyword) { if (databaseKeywords == null) { - if (isOracleMode(compatibleMode.toString())) { + if (isOracleMode(compatibleMode)) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); } else { databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); } } - char escapeChar = isOracleMode(compatibleMode.toString()) ? '"' : '`'; + char escapeChar = isOracleMode(compatibleMode) ? '"' : '`'; + if (databaseKeywords.contains(keyword.toUpperCase())) { + keyword = escapeChar + keyword + escapeChar; + } + return keyword; + } + + public static void escapeDatabaseKeywords(List keywords) { for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i); - if (databaseKeywords.contains(keyword.toUpperCase())) { - keyword = escapeChar + keyword + escapeChar; - } - keywords.set(i, keyword); + keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + } + } + + public static Boolean isEscapeMode(String keyword) { + if (isOracleMode(compatibleMode)) { + return keyword.startsWith("\"") && keyword.endsWith("\""); + } else { + return keyword.startsWith("`") && keyword.endsWith("`"); } } @@ -151,12 +147,15 @@ public class ObReaderUtils { ps = conn.createStatement(); rs = ps.executeQuery(sql); while (rs.next()) { - String columnName = StringUtils.lowerCase(rs.getString("Column_name")); + String columnName = rs.getString("Column_name"); + columnName = escapeDatabaseKeywords(columnName); + if (!isEscapeMode(columnName)) { + columnName.toLowerCase(); + } if (!realIndex.contains(columnName)) { realIndex.add(columnName); } } - escapeDatabaseKeywords(realIndex); String[] pks = new String[realIndex.size()]; realIndex.toArray(pks); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index 1e6d27c6..eb1222c3 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -62,6 +62,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { private ObPartitionIdCalculator partCalculator = null; private HashMap> groupInsertValues; + List unknownPartRecords = new ArrayList(); // private List unknownPartRecords; private List partitionKeyIndexes; @@ -307,6 +308,18 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } } } + if(unknownPartRecords.size()>0){ + int retry = 0; + while (true) { + try { + concurrentWriter.addBatchRecords(unknownPartRecords); + break; + } catch (InterruptedException e) { + retry++; + LOG.info("Concurrent table writer is interrupted, retry {}", retry); + } + } + } } private void addRecordToCache(final Record record) { @@ -347,21 +360,24 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { groupInsertValues.put(partId, groupValues); } } else { - LOG.warn("add unknown part record {}", record); - List unknownPartRecords = new ArrayList(); + LOG.debug("add unknown part record {}", record); + unknownPartRecords.add(record); int i = 0; - while (true) { - if (i > 0) { - LOG.info("retry add batch record the {} times", i); - } - try { - concurrentWriter.addBatchRecords(unknownPartRecords); - break; - } catch (InterruptedException e) { - LOG.info("Concurrent table writer is interrupted"); + if(unknownPartRecords.size()>batchSize){ + while (true) { + if (i > 0) { + LOG.info("retry add batch record the {} times", i); + } + try { + concurrentWriter.addBatchRecords(unknownPartRecords); + break; + } catch (InterruptedException e) { + LOG.info("Concurrent table writer is interrupted"); + } } } + } } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index 072a0f21..f4c4f439 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -11,7 +11,6 @@ import org.slf4j.LoggerFactory; import java.sql.*; import java.util.*; -import java.util.stream.Collectors; public class ObWriterUtils { @@ -26,8 +25,8 @@ public class ObWriterUtils { return new HashSet(Arrays.asList(keywords.split(","))); } - public static void escapeDatabaseKeywords(List keywords) { - //判断是否需要更改关键字集合 + //java中的String的坑 + public static String escapeDatabaseKeywords(String keyword) { if (databaseKeywords == null) { if (isOracleMode()) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); @@ -36,12 +35,22 @@ public class ObWriterUtils { } } char escapeChar = isOracleMode() ? '"' : '`'; + if (databaseKeywords.contains(keyword.toUpperCase())) { + keyword = escapeChar + keyword + escapeChar; + } + return keyword; + } + + public static void escapeDatabaseKeywords(List keywords) { for (int i = 0; i < keywords.size(); i++) { - String keyword = keywords.get(i); - if (databaseKeywords.contains(keyword.toUpperCase())) { - keyword = escapeChar + keyword + escapeChar; - } - keywords.set(i, keyword); + keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + } + } + public static Boolean isEscapeMode(String keyword){ + if(isOracleMode()){ + return keyword.startsWith("\"") && keyword.endsWith("\""); + }else{ + return keyword.startsWith("`") && keyword.endsWith("`"); } } public static boolean isMemstoreFull(Connection conn, double memstoreThreshold) { @@ -94,7 +103,16 @@ public class ObWriterUtils { } private static int[] getColumnIndex(List columnsInIndex, List allColumns) { - allColumns = allColumns.stream().map(String::toUpperCase).collect(Collectors.toList()); + /** + * JDK8的stream模型:将一种数据结构转化成通用的数据模型,并可在该模型上进行操作 + * map:接受一个函数引用,用于操作元素 + * collect:接受一个Collectors方法,用于将中间数据模型转化成目标数据结构 + */ + for (int i = 0; i < allColumns.size(); i++) { + if (!ObWriterUtils.isEscapeMode(allColumns.get(i))) { + allColumns.set(i, allColumns.get(i).toUpperCase()); + } + } int[] colIdx = new int[columnsInIndex.size()]; for (int i = 0; i < columnsInIndex.size(); i++) { int index = allColumns.indexOf(columnsInIndex.get(i)); @@ -146,7 +164,11 @@ public class ObWriterUtils { rs = stmt.executeQuery(sql); while (rs.next()) { String keyName = rs.getString("Key_name"); - String columnName = StringUtils.upperCase(rs.getString("Column_name")); + String columnName = rs.getString("Column_name"); + columnName=escapeDatabaseKeywords(columnName); + if(!ObWriterUtils.isEscapeMode(columnName)){ + columnName=columnName.toUpperCase(); + } List s = uniqueKeys.get(keyName); if (s == null) { s = new ArrayList(); @@ -159,6 +181,7 @@ public class ObWriterUtils { } finally { asyncClose(rs, stmt, null); } + //ObWriterUtils.escapeDatabaseKeywords(uniqueKeys); return uniqueKeys; } @@ -315,6 +338,7 @@ public class ObWriterUtils { * @param e * @return */ + public static boolean isFatalError(SQLException e) { String sqlState = e.getSQLState(); if (StringUtils.startsWith(sqlState, "08")) { From 042aa2d86599162367024a3072fdb34547736a4e Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Tue, 28 Dec 2021 19:32:15 +0800 Subject: [PATCH 130/251] =?UTF-8?q?=E5=9C=A8=E4=B8=8A=E4=B8=AA=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E5=9F=BA=E7=A1=80=E4=B8=8A=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E4=BA=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10writer/task/ConcurrentTableWriterTask.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index eb1222c3..bed0598d 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -308,7 +308,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } } } - if(unknownPartRecords.size()>0){ + if (unknownPartRecords.size() > 0) { int retry = 0; while (true) { try { @@ -364,7 +364,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { unknownPartRecords.add(record); int i = 0; - if(unknownPartRecords.size()>batchSize){ + if (unknownPartRecords.size() > batchSize) { while (true) { if (i > 0) { LOG.info("retry add batch record the {} times", i); From c96a366a4eab44acc114f7a31275ba243701352c Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Wed, 29 Dec 2021 19:23:34 +0800 Subject: [PATCH 131/251] =?UTF-8?q?=E6=8A=8A=E5=86=97=E4=BD=99=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=90=88=E5=B9=B6=E6=88=90=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E5=88=A0=E9=99=A4=E4=BA=86=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10reader/ext/ReaderTask.java | 2 +- .../task/ConcurrentTableWriterTask.java | 72 +++++++------------ .../util/ObWriterUtils.java | 8 +-- 3 files changed, 28 insertions(+), 54 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index 1376f113..a43dcebd 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -63,7 +63,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { } jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 - if (ObReaderUtils.compatibleMode == ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE) { + if (ObReaderUtils.compatibleMode.equals(ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE)) { compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } LOG.info("this is ob1_0 jdbc url. user=" + username + " :url=" + jdbcUrl); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index bed0598d..bd34b4a6 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -294,31 +294,14 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } private void addLeftRecords() { + //不需要刷新Cache,已经是最后一批数据了 for (List groupValues : groupInsertValues.values()) { if (groupValues.size() > 0 ) { - int retry = 0; - while (true) { - try { - concurrentWriter.addBatchRecords(groupValues); - break; - } catch (InterruptedException e) { - retry++; - LOG.info("Concurrent table writer is interrupted, retry {}", retry); - } - } + addRecordsToWriteQueue(groupValues); } } if (unknownPartRecords.size() > 0) { - int retry = 0; - while (true) { - try { - concurrentWriter.addBatchRecords(unknownPartRecords); - break; - } catch (InterruptedException e) { - retry++; - LOG.info("Concurrent table writer is interrupted, retry {}", retry); - } - } + addRecordsToWriteQueue(unknownPartRecords); } } @@ -344,43 +327,40 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { groupValues.add(record); if (groupValues.size() >= batchSize) { int i = 0; - while (true) { - if (i > 0) { - LOG.info("retry add batch record the {} times", i); - } - try { - concurrentWriter.addBatchRecords(groupValues); - printEveryTime(); - break; - } catch (InterruptedException e) { - LOG.info("Concurrent table writer is interrupted"); - } - } - groupValues = new ArrayList(batchSize); + groupValues =addRecordsToWriteQueue(groupValues); groupInsertValues.put(partId, groupValues); } } else { LOG.debug("add unknown part record {}", record); - unknownPartRecords.add(record); - int i = 0; if (unknownPartRecords.size() > batchSize) { - while (true) { - if (i > 0) { - LOG.info("retry add batch record the {} times", i); - } - try { - concurrentWriter.addBatchRecords(unknownPartRecords); - break; - } catch (InterruptedException e) { - LOG.info("Concurrent table writer is interrupted"); - } - } + unknownPartRecords=addRecordsToWriteQueue(unknownPartRecords); } } } + /** + * + * @param records + * @return 返回一个新的Cache用于存储接下来的数据 + */ + private List addRecordsToWriteQueue(List records) { + int i = 0; + while (true) { + if (i > 0) { + LOG.info("retry add batch record the {} times", i); + } + try { + concurrentWriter.addBatchRecords(records); + break; + } catch (InterruptedException e) { + i++; + LOG.info("Concurrent table writer is interrupted"); + } + } + return new ArrayList(batchSize); + } private void checkMemStore() { Connection checkConn = checkConnHolder.reconnect(); long now = System.currentTimeMillis(); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index f4c4f439..ff1648a1 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -25,7 +25,6 @@ public class ObWriterUtils { return new HashSet(Arrays.asList(keywords.split(","))); } - //java中的String的坑 public static String escapeDatabaseKeywords(String keyword) { if (databaseKeywords == null) { if (isOracleMode()) { @@ -103,11 +102,6 @@ public class ObWriterUtils { } private static int[] getColumnIndex(List columnsInIndex, List allColumns) { - /** - * JDK8的stream模型:将一种数据结构转化成通用的数据模型,并可在该模型上进行操作 - * map:接受一个函数引用,用于操作元素 - * collect:接受一个Collectors方法,用于将中间数据模型转化成目标数据结构 - */ for (int i = 0; i < allColumns.size(); i++) { if (!ObWriterUtils.isEscapeMode(allColumns.get(i))) { allColumns.set(i, allColumns.get(i).toUpperCase()); @@ -167,7 +161,7 @@ public class ObWriterUtils { String columnName = rs.getString("Column_name"); columnName=escapeDatabaseKeywords(columnName); if(!ObWriterUtils.isEscapeMode(columnName)){ - columnName=columnName.toUpperCase(); + columnName = columnName.toUpperCase(); } List s = uniqueKeys.get(keyName); if (s == null) { From c140ca35fba4f01e71bd492a2f5376e4d0877383 Mon Sep 17 00:00:00 2001 From: sanChouIsACat <993924507@qq.com> Date: Thu, 30 Dec 2021 11:09:58 +0800 Subject: [PATCH 132/251] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=8A?= =?UTF-8?q?=E8=BF=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oceanbasev10writer/task/ConcurrentTableWriterTask.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index bd34b4a6..e6b4a561 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -326,15 +326,14 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } groupValues.add(record); if (groupValues.size() >= batchSize) { - int i = 0; - groupValues =addRecordsToWriteQueue(groupValues); + groupValues = addRecordsToWriteQueue(groupValues); groupInsertValues.put(partId, groupValues); } } else { LOG.debug("add unknown part record {}", record); unknownPartRecords.add(record); - if (unknownPartRecords.size() > batchSize) { - unknownPartRecords=addRecordsToWriteQueue(unknownPartRecords); + if (unknownPartRecords.size() >= batchSize) { + unknownPartRecords = addRecordsToWriteQueue(unknownPartRecords); } } From b71cdf693e418a8674f39b05d38ee2f350f0791f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=BE=E8=BD=A9?= Date: Thu, 13 Jan 2022 17:53:30 +0800 Subject: [PATCH 133/251] fix compile problem --- oscarwriter/pom.xml | 8 +++- .../tsdbreader/conn/TSDBConnectionTest.java | 4 +- .../reader/tsdbreader/util/HttpUtilsTest.java | 39 ------------------- .../writer/conn/TSDBConnectionTest.java | 4 +- .../plugin/writer/util/HttpUtilsTest.java | 4 +- .../datax/plugin/writer/util/TSDBTest.java | 4 +- 6 files changed, 15 insertions(+), 48 deletions(-) delete mode 100644 tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java diff --git a/oscarwriter/pom.xml b/oscarwriter/pom.xml index 51643c76..06249a26 100644 --- a/oscarwriter/pom.xml +++ b/oscarwriter/pom.xml @@ -39,12 +39,18 @@ plugin-rdbms-util ${datax-project-version} - + + + + com.csicit.thirdparty + oscar + 1.0.1 diff --git a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java index e4544088..6be291e8 100644 --- a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java +++ b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java @@ -19,12 +19,12 @@ public class TSDBConnectionTest { @Test public void testVersion() { - String version = new TSDBConnection(TSDB_ADDRESS).version(); + String version = new TSDBConnection(TSDB_ADDRESS,null,null).version(); Assert.assertNotNull(version); } @Test public void testIsSupported() { - Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS).isSupported()); + Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS,null,null).isSupported()); } } diff --git a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java deleted file mode 100644 index 12a2660a..00000000 --- a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.alibaba.datax.plugin.reader.tsdbreader.util; - -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:HttpUtils Test - * - * @author Benedict Jin - * @since 2019-10-21 - */ -@Ignore -public class HttpUtilsTest { - - @Test - public void testSimpleCase() throws Exception { - String url = "https://httpbin.org/post"; - Map params = new HashMap<>(); - params.put("foo", "bar"); - - String rsp = HttpUtils.post(url, params); - System.out.println(rsp); - Assert.assertNotNull(rsp); - } - - @Test - public void testGet() throws Exception { - String url = String.format("%s/api/version", Const.TSDB_ADDRESS); - String rsp = HttpUtils.get(url); - System.out.println(rsp); - Assert.assertNotNull(rsp); - } -} diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java index 455f4ce6..fada706e 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java @@ -19,12 +19,12 @@ public class TSDBConnectionTest { @Test public void testVersion() { - String version = new TSDBConnection(TSDB_ADDRESS).version(); + String version = new TSDBConnection(TSDB_ADDRESS,null,null,null).version(); Assert.assertNotNull(version); } @Test public void testIsSupported() { - Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS).isSupported()); + Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS,null,null,null).isSupported()); } } diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java index 69f26b80..1f8fb870 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java @@ -24,7 +24,7 @@ public class HttpUtilsTest { Map params = new HashMap(); params.put("foo", "bar"); - String rsp = HttpUtils.post(url, params); + String rsp = HttpUtils.post(url, null,null,params); System.out.println(rsp); Assert.assertNotNull(rsp); } @@ -32,7 +32,7 @@ public class HttpUtilsTest { @Test public void testGet() throws Exception { String url = String.format("%s/api/version", Const.OPENTSDB_ADDRESS); - String rsp = HttpUtils.get(url); + String rsp = HttpUtils.get(url,null,null); System.out.println(rsp); Assert.assertNotNull(rsp); } diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java index 7d22bb72..8debf406 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java @@ -17,11 +17,11 @@ public class TSDBTest { @Test public void testVersion() { - String version = TSDBUtils.version(Const.TSDB_ADDRESS); + String version = TSDBUtils.version(Const.TSDB_ADDRESS,null,null); Assert.assertNotNull(version); System.out.println(version); - version = TSDBUtils.version(Const.OPENTSDB_ADDRESS); + version = TSDBUtils.version(Const.OPENTSDB_ADDRESS,null,null); Assert.assertNotNull(version); System.out.println(version); } From 155e93b9d89f10971da4d0c177077c7536f71135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A1=BE=E8=BD=A9?= Date: Thu, 13 Jan 2022 19:36:22 +0800 Subject: [PATCH 134/251] fix log4j --- otsreader/pom.xml | 10 ++++++++++ otsstreamreader/pom.xml | 10 ++++++++++ otswriter/pom.xml | 10 ++++++++++ pom.xml | 11 +++++++++++ 4 files changed, 41 insertions(+) diff --git a/otsreader/pom.xml b/otsreader/pom.xml index bd017423..b1e0e735 100644 --- a/otsreader/pom.xml +++ b/otsreader/pom.xml @@ -34,6 +34,16 @@ com.aliyun.openservices ots-public 2.2.4 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/otsstreamreader/pom.xml b/otsstreamreader/pom.xml index 2a12872f..84ca2d6a 100644 --- a/otsstreamreader/pom.xml +++ b/otsstreamreader/pom.xml @@ -33,6 +33,16 @@ com.aliyun.openservices tablestore-streamclient 1.0.0 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/otswriter/pom.xml b/otswriter/pom.xml index 8677c8ab..d40f68b3 100644 --- a/otswriter/pom.xml +++ b/otswriter/pom.xml @@ -34,6 +34,16 @@ com.aliyun.openservices ots-public 2.2.4 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/pom.xml b/pom.xml index 1a9da81b..7273d600 100644 --- a/pom.xml +++ b/pom.xml @@ -183,6 +183,17 @@ 1.9.5 test + + org.apache.logging.log4j + log4j-api + 2.17.0 + + + + org.apache.logging.log4j + log4j-core + 2.17.0 + From c655685acd8dcc5edfb496a99cc51d9096b3f5a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 11:37:37 +0000 Subject: [PATCH 135/251] Bump log4j-core from 2.17.0 to 2.17.1 Bumps log4j-core from 2.17.0 to 2.17.1. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7273d600..9921d2fe 100644 --- a/pom.xml +++ b/pom.xml @@ -192,7 +192,7 @@ org.apache.logging.log4j log4j-core - 2.17.0 + 2.17.1 From 22bf5b537b3d2f23b7c495d01ff6e02d8d3e9c66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 11:37:38 +0000 Subject: [PATCH 136/251] Bump log4j-api from 2.17.0 to 2.17.1 Bumps log4j-api from 2.17.0 to 2.17.1. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7273d600..1d211b40 100644 --- a/pom.xml +++ b/pom.xml @@ -186,7 +186,7 @@ org.apache.logging.log4j log4j-api - 2.17.0 + 2.17.1 From 7ac4301fc5e906a1c0a9a07b0192c0d33aa46228 Mon Sep 17 00:00:00 2001 From: "jiafeng.zhang" Date: Thu, 20 Jan 2022 12:58:07 +0800 Subject: [PATCH 137/251] Add support for writing data to Apache Doris Add support for writing data to Apache Doris --- core/pom.xml | 2 +- doriswriter/doc/doriswriter.md | 183 ++++++++++++ doriswriter/doc/mysql2doris.json | 44 +++ doriswriter/pom.xml | 107 +++++++ doriswriter/src/main/assembly/package.xml | 56 ++++ .../plugin/writer/doriswriter/DorisCodec.java | 75 +++++ .../writer/doriswriter/DorisFlushBatch.java | 58 ++++ .../writer/doriswriter/DorisJsonCodec.java | 50 ++++ .../writer/doriswriter/DorisWriter.java | 259 +++++++++++++++++ .../doriswriter/DorisWriterEmitter.java | 274 ++++++++++++++++++ .../datax/plugin/writer/doriswriter/Key.java | 171 +++++++++++ doriswriter/src/main/resources/plugin.json | 6 + .../main/resources/plugin_job_template.json | 15 + pom.xml | 1 + 14 files changed, 1300 insertions(+), 1 deletion(-) create mode 100644 doriswriter/doc/doriswriter.md create mode 100644 doriswriter/doc/mysql2doris.json create mode 100644 doriswriter/pom.xml create mode 100644 doriswriter/src/main/assembly/package.xml create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java create mode 100644 doriswriter/src/main/resources/plugin.json create mode 100644 doriswriter/src/main/resources/plugin_job_template.json diff --git a/core/pom.xml b/core/pom.xml index 174a18d3..2e085e14 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -41,7 +41,7 @@ org.apache.httpcomponents httpclient - 4.5 + 4.5.13 org.apache.httpcomponents diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md new file mode 100644 index 00000000..7a072620 --- /dev/null +++ b/doriswriter/doc/doriswriter.md @@ -0,0 +1,183 @@ +# DorisWriter 插件文档 + +## 1 快速介绍 +Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。 + +Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效! + +DorisWriter是一个支持将大批量数据写入Doris中的一个插件,可以结合Datax其他读取数据的插件结合使用完成数据的整合。 + +Doris是完全支持Mysql协议的,所以如果你需要读取Doris的数据,可以使用mysqlreader插件完成,这里不单独提供Doris数据读取插件。 + +## 2 实现原理 +DorisWriter 通过Doris原生支持Stream load方式导入数据, DorisWriter会将`reader`读取的数据进行缓存在内存中,拼接成Json文本,然后批量导入至Doris。 + +## 3 功能说明 + +### 3.1 配置样例 + +这里是一份从Stream读取数据后导入至Doris的配置文件。 + +``` +{ + "job": { + "setting": { + "speed": { + "channel": 1 + }, + "errorLimit": { + "record": 0, + "percentage": 0 + } + }, + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "value": "皮蛋1", + "type": "string" + }, + { + "value": "皮蛋2", + "type": "string" + }, + { + "value": "111", + "type": "long" + }, + { + "value": "222", + "type": "long" + } + ], + "sliceRecordCount": 100 + } + }, + "writer": { + "name": "doriswriter", + "parameter": { + "feLoadUrl": ["127.0.0.1:8030", "127.0.0.2:8030", "127.0.0.3:8030"], + "beLoadUrl": ["192.168.10.1:8040", "192.168.10.2:8040", "192.168.10.3:8040"], + "jdbcUrl": "jdbc:mysql://127.0.0.1:9030/", + "database": "db1", + "table": "t1", + "column": ["k1", "k2", "v1", "v2"], + "username": "root", + "password": "", + "postSql": [], + "preSql": [], + "loadProps": { + }, + "maxBatchRows" : 500000, + "maxBatchByteSize" : 104857600, + "labelPrefix": "my_prefix", + "lineDelimiter": "\n" + } + } + } + ] + } +} +``` + +### 3.2 参数说明 + +* **jdbcUrl** + + - 描述:Doris 的 JDBC 连接串,用户执行 preSql 或 postSQL。 + - 必选:是 + - 默认值:无 + +* **feLoadUrl** + + - 描述:和 **beLoadUrl** 二选一。作为 Stream Load 的连接目标。格式为 "ip:port"。其中 IP 是 FE 节点 IP,port 是 FE 节点的 http_port。可以填写多个,doriswriter 将以轮询的方式访问。 + - 必选:否 + - 默认值:无 + +* **beLoadUrl** + + - 描述:和 **feLoadUrl** 二选一。作为 Stream Load 的连接目标。格式为 "ip:port"。其中 IP 是 BE 节点 IP,port 是 BE 节点的 webserver_port。可以填写多个,doriswriter 将以轮询的方式访问。 + - 必选:否 + - 默认值:无 + +* **username** + + - 描述:访问Doris数据库的用户名 + - 必选:是 + - 默认值:无 + +* **password** + + - 描述:访问Doris数据库的密码 + - 必选:否 + - 默认值:空 + +* **database** + + - 描述:需要写入的Doris数据库名称。 + - 必选:是 + - 默认值:无 + +* **table** + + - 描述:需要写入的Doris表名称。 + - 必选:是 + - 默认值:无 + +* **column** + + - 描述:目的表**需要写入数据**的字段,这些字段将作为生成的 Json 数据的字段名。字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。 + - 必选:是 + - 默认值:否 + +* **preSql** + + - 描述:写入数据到目的表前,会先执行这里的标准语句。 + - 必选:否 + - 默认值:无 + +* **postSql** + + - 描述:写入数据到目的表后,会执行这里的标准语句。 + - 必选:否 + - 默认值:无 + + +* **maxBatchRows** + + - 描述:每批次导入数据的最大行数。和 **maxBatchByteSize** 共同控制每批次的导入数量。每批次数据达到两个阈值之一,即开始导入这一批次的数据。 + - 必选:否 + - 默认值:500000 + +* **maxBatchByteSize** + + - 描述:每批次导入数据的最大数据量。和 ** maxBatchRows** 共同控制每批次的导入数量。每批次数据达到两个阈值之一,即开始导入这一批次的数据。 + - 必选:否 + - 默认值:104857600 + +* **labelPrefix** + + - 描述:每批次导入任务的 label 前缀。最终的 label 将有 `labelPrefix + UUID + 序号` 组成 + - 必选:否 + - 默认值:`datax_doris_writer_` + +* **lineDelimiter** + + - 描述:每批次数据包含多行,每行为 Json 格式,每行的的分隔符即为 lineDelimiter。支持多个字节, 例如'\x02\x03'。 + - 必选:否 + - 默认值:`\n` + +* **loadProps** + + - 描述:StreamLoad 的请求参数,详情参照StreamLoad介绍页面。 + - 必选:否 + - 默认值:无 + +* **connectTimeout** + + - 描述:StreamLoad单次请求的超时时间, 单位毫秒(ms)。 + - 必选:否 + - 默认值:-1 diff --git a/doriswriter/doc/mysql2doris.json b/doriswriter/doc/mysql2doris.json new file mode 100644 index 00000000..f6e9d9bd --- /dev/null +++ b/doriswriter/doc/mysql2doris.json @@ -0,0 +1,44 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "column": ["k1", "k2", "k3"], + "connection": [ + { + "jdbcUrl": ["jdbc:mysql://192.168.10.10:3306/db1"], + "table": ["t1"] + } + ], + "username": "root", + "password": "123456", + "where": "" + } + }, + "writer": { + "name": "doriswriter", + "parameter": { + "feLoadUrl": ["192.168.1.1:8030"], + "jdbcUrl": "jdbc:mysql://192.168.1.1:9030/", + "loadProps": { + }, + "database": "db1", + "table": "t3", + "column": ["k1", "k2", "k3"], + "username": "root", + "password": "12345", + "postSql": [], + "preSql": [] + } + } + } + ], + "setting": { + "speed": { + "channel": "1" + } + } + } +} diff --git a/doriswriter/pom.xml b/doriswriter/pom.xml new file mode 100644 index 00000000..1051436a --- /dev/null +++ b/doriswriter/pom.xml @@ -0,0 +1,107 @@ + + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + ../pom.xml + + + 4.0.0 + doriswriter + doriswriter + jar + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + + com.alibaba.datax + plugin-rdbms-util + ${datax-project-version} + + + + mysql + mysql-connector-java + ${mysql.driver.version} + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/doriswriter/src/main/assembly/package.xml b/doriswriter/src/main/assembly/package.xml new file mode 100644 index 00000000..9fca5e93 --- /dev/null +++ b/doriswriter/src/main/assembly/package.xml @@ -0,0 +1,56 @@ + + + + + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/doriswriter + + + target/ + + doriswriter-0.0.1-SNAPSHOT.jar + + plugin/writer/doriswriter + + + + + + false + plugin/writer/doriswriter/libs + runtime + + + diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java new file mode 100644 index 00000000..9a364f40 --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java @@ -0,0 +1,75 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.Record; +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.util.List; +import java.util.TimeZone; + +public abstract class DorisCodec { + protected static String timeZone = "GMT+8"; + protected static TimeZone timeZoner = TimeZone.getTimeZone(timeZone); + protected final List fieldNames; + + public DorisCodec(final List fieldNames) { + this.fieldNames = fieldNames; + } + + public abstract String serialize(Record row); + + /** + * convert datax internal data to string + * + * @param col + * @return + */ + protected Object convertColumn(final Column col) { + if (null == col.getRawData()) { + return null; + } + Column.Type type = col.getType(); + switch (type) { + case BOOL: + case INT: + case LONG: + return col.asLong(); + case DOUBLE: + return col.asDouble(); + case STRING: + return col.asString(); + case DATE: { + final DateColumn.DateType dateType = ((DateColumn) col).getSubType(); + switch (dateType) { + case DATE: + return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd", timeZoner); + case DATETIME: + return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd HH:mm:ss", timeZoner); + default: + return col.asString(); + } + } + default: + // BAD, NULL, BYTES + return null; + } + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java new file mode 100644 index 00000000..493ddec9 --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java @@ -0,0 +1,58 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +// A wrapper class to hold a batch of loaded rows +public class DorisFlushBatch { + private String lineDelimiter; + private String label; + private long rows = 0; + private StringBuilder data = new StringBuilder(); + + public DorisFlushBatch(String lineDelimiter) { + this.lineDelimiter = lineDelimiter; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getLabel() { + return label; + } + + public long getRows() { + return rows; + } + + public void putData(String row) { + if (data.length() > 0) { + data.append(lineDelimiter); + } + data.append(row); + rows++; + } + + public StringBuilder getData() { + return data; + } + + public long getSize() { + return data.length(); + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java new file mode 100644 index 00000000..8d4568c2 --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java @@ -0,0 +1,50 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.fastjson.JSON; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +// Convert DataX data to json +public class DorisJsonCodec extends DorisCodec { + private Map rowMap; + + public DorisJsonCodec(final List fieldNames) { + super(fieldNames); + this.rowMap = new HashMap<>(this.fieldNames.size()); + } + + @Override + public String serialize(final Record row) { + if (null == this.fieldNames) { + return ""; + } + + rowMap.clear(); + int idx = 0; + for (final String fieldName : this.fieldNames) { + rowMap.put(fieldName, this.convertColumn(row.getColumn(idx))); + ++idx; + } + return JSON.toJSONString(rowMap); + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java new file mode 100644 index 00000000..71e2d1ad --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java @@ -0,0 +1,259 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.util.RdbmsException; +import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.druid.sql.parser.ParserException; +import com.google.common.base.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +public class DorisWriter extends Writer { + public DorisWriter() { + } + + public static class Task extends com.alibaba.datax.common.spi.Writer.Task { + private DorisWriterEmitter dorisWriterEmitter; + private Key keys; + private DorisCodec rowCodec; + private int batchNum = 0; + + public Task() { + } + + @Override + public void init() { + this.keys = new Key(super.getPluginJobConf()); + this.rowCodec = new DorisJsonCodec(this.keys.getColumns()); + this.dorisWriterEmitter = new DorisWriterEmitter(keys); + } + + @Override + public void prepare() { + } + + @Override + public void startWrite(RecordReceiver recordReceiver) { + String lineDelimiter = this.keys.getLineDelimiter(); + DorisFlushBatch flushBatch = new DorisFlushBatch(lineDelimiter); + long batchCount = 0; + long batchByteSize = 0L; + Record record; + // loop to get record from datax + while ((record = recordReceiver.getFromReader()) != null) { + // check column size + if (record.getColumnNumber() != this.keys.getColumns().size()) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + String.format("config writer column info error. because the column number of reader is :%s" + + "and the column number of writer is:%s. please check you datax job config json.", + record.getColumnNumber(), this.keys.getColumns().size())); + } + // codec record + final String recordStr = this.rowCodec.serialize(record); + + // put into buffer + flushBatch.putData(recordStr); + batchCount += 1; + batchByteSize += recordStr.length(); + // trigger buffer + if (batchCount >= this.keys.getBatchRows() || batchByteSize >= this.keys.getBatchByteSize()) { + // generate doris stream load label + flush(flushBatch); + // clear buffer + batchCount = 0; + batchByteSize = 0L; + flushBatch = new DorisFlushBatch(lineDelimiter); + } + } // end of while + + if (flushBatch.getSize() > 0) { + flush(flushBatch); + } + } + + private void flush(DorisFlushBatch flushBatch) { + final String label = getStreamLoadLabel(); + flushBatch.setLabel(label); + dorisWriterEmitter.doStreamLoad(flushBatch); + } + + private String getStreamLoadLabel() { + String labelPrefix = this.keys.getLabelPrefix(); + return labelPrefix + UUID.randomUUID().toString() + "_" + (batchNum++); + } + + @Override + public void post() { + + } + + @Override + public void destroy() { + } + + @Override + public boolean supportFailOver() { + return false; + } + } + + public static class Job extends com.alibaba.datax.common.spi.Writer.Job { + private static final Logger LOG = LoggerFactory.getLogger(DorisWriter.Job.class); + private Configuration originalConfig = null; + private Key keys; + + public Job() { + } + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + this.keys = new Key(super.getPluginJobConf()); + this.keys.doPretreatment(); + } + + @Override + public void preCheck() { + this.init(); + this.preCheckPrePareSQL(this.keys); + this.preCheckPostSQL(this.keys); + } + + @Override + public void prepare() { + String username = this.keys.getUsername(); + String password = this.keys.getPassword(); + String jdbcUrl = this.keys.getJdbcUrl(); + List renderedPreSqls = this.renderPreOrPostSqls(this.keys.getPreSqlList(), this.keys.getTable()); + if (!renderedPreSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("prepare execute preSqls:[{}]. doris jdbc url:{}.", String.join(";", renderedPreSqls), jdbcUrl); + this.executeSqls(conn, renderedPreSqls); + DBUtil.closeDBResources(null, null, conn); + } + } + + @Override + public List split(int mandatoryNumber) { + List configurations = new ArrayList<>(mandatoryNumber); + + for (int i = 0; i < mandatoryNumber; ++i) { + configurations.add(this.originalConfig); + } + + return configurations; + } + + @Override + public void post() { + String username = this.keys.getUsername(); + String password = this.keys.getPassword(); + String jdbcUrl = this.keys.getJdbcUrl(); + List renderedPostSqls = this.renderPreOrPostSqls(this.keys.getPostSqlList(), this.keys.getTable()); + if (!renderedPostSqls.isEmpty()) { + Connection conn = DBUtil.getConnection(DataBaseType.MySql, jdbcUrl, username, password); + LOG.info("prepare execute postSqls:[{}]. doris jdbc url为:{}.", String.join(";", renderedPostSqls), jdbcUrl); + this.executeSqls(conn, renderedPostSqls); + DBUtil.closeDBResources(null, null, conn); + } + + } + + @Override + public void destroy() { + } + + private List renderPreOrPostSqls(final List preOrPostSqls, final String tableName) { + if (null == preOrPostSqls) { + return Collections.emptyList(); + } + final List renderedSqls = new ArrayList<>(); + for (final String sql : preOrPostSqls) { + if (!Strings.isNullOrEmpty(sql)) { + renderedSqls.add(sql.replace(Constant.TABLE_NAME_PLACEHOLDER, tableName)); + } + } + return renderedSqls; + } + + private void executeSqls(final Connection conn, final List sqls) { + Statement stmt = null; + String currentSql = null; + try { + stmt = conn.createStatement(); + for (String s : sqls) { + final String sql = currentSql = s; + DBUtil.executeSqlWithoutResultSet(stmt, sql); + } + } catch (Exception e) { + throw RdbmsException.asQueryException(DataBaseType.MySql, e, currentSql, null, null); + } finally { + DBUtil.closeDBResources(null, stmt, null); + } + } + + private void preCheckPrePareSQL(final Key keys) { + final String table = keys.getTable(); + final List preSqls = keys.getPreSqlList(); + final List renderedPreSqls = renderPreOrPostSqls(preSqls, table); + if (!renderedPreSqls.isEmpty()) { + LOG.info("prepare check preSqls:[{}].", String.join(";", renderedPreSqls)); + for (final String sql : renderedPreSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e) { + throw RdbmsException.asPreSQLParserException(DataBaseType.MySql, e, sql); + } + } + } + } + + private void preCheckPostSQL(final Key keys) { + final String table = keys.getTable(); + final List postSqls = keys.getPostSqlList(); + final List renderedPostSqls = renderPreOrPostSqls(postSqls, table); + if (!renderedPostSqls.isEmpty()) { + LOG.info("prepare check postSqls:[{}].", String.join(";", renderedPostSqls)); + for (final String sql : renderedPostSqls) { + try { + DBUtil.sqlValid(sql, DataBaseType.MySql); + } catch (ParserException e) { + throw RdbmsException.asPostSQLParserException(DataBaseType.MySql, e, sql); + } + } + } + } + + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java new file mode 100644 index 00000000..fb4e46b0 --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java @@ -0,0 +1,274 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.ProtocolException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.methods.RequestBuilder; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.CloseableHttpClient; +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.HttpContext; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.util.Base64; +import java.util.List; +import java.util.Map; + +// Used to load batch of rows to Doris using stream load +public class DorisWriterEmitter { + private static final Logger LOG = LoggerFactory.getLogger(DorisWriterEmitter.class); + private final Key keys; + private int hostPos = 0; + private List targetHosts = Lists.newArrayList(); + + private RequestConfig requestConfig; + + public DorisWriterEmitter(final Key keys) { + this.keys = keys; + initHostList(); + initRequestConfig(); + } + + private void initRequestConfig() { + requestConfig = RequestConfig.custom().setConnectTimeout(this.keys.getConnectTimeout()).build(); + } + + // get target host from config + private void initHostList() { + List hosts = this.keys.getBeLoadUrlList(); + if (hosts == null || hosts.isEmpty()) { + hosts = this.keys.getFeLoadUrlList(); + } + if (hosts == null || hosts.isEmpty()) { + DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + "Either beLoadUrl or feLoadUrl must be set"); + } + for (String beHost : hosts) { + targetHosts.add("http://" + beHost); + } + } + + /** + * execute doris stream load + */ + public void doStreamLoad(final DorisFlushBatch flushData) { + long start = System.currentTimeMillis(); + final String host = this.getAvailableHost(); + if (null == host) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, "None of the load url can be connected."); + } + final String loadUrl = host + "/api/" + this.keys.getDatabase() + "/" + this.keys.getTable() + "/_stream_load"; + // do http put request and get response + final Map loadResult; + try { + loadResult = this.doHttpPut(loadUrl, flushData); + } catch (IOException e) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + + long cost = System.currentTimeMillis() - start; + LOG.info("StreamLoad response: " + JSON.toJSONString(loadResult) + ", cost(ms): " + cost); + final String keyStatus = "Status"; + if (null == loadResult || !loadResult.containsKey(keyStatus)) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, "Unable to flush data to doris: unknown result status."); + } + if (loadResult.get(keyStatus).equals("Fail")) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, "Failed to flush data to doris.\n" + JSON.toJSONString(loadResult)); + } + } + + /** + * loop to get target host + * + * @return + */ + private String getAvailableHost() { + if (this.hostPos >= targetHosts.size()) { + this.hostPos = 0; + } + + while (this.hostPos < targetHosts.size()) { + final String host = targetHosts.get(hostPos); + ++this.hostPos; + if (this.tryHttpConnection(host)) { + return host; + } + } + + return null; + } + + private boolean tryHttpConnection(final String host) { + try { + final URL url = new URL(host); + final HttpURLConnection co = (HttpURLConnection) url.openConnection(); + co.setConnectTimeout(1000); + co.connect(); + co.disconnect(); + return true; + } catch (Exception e) { + LOG.warn("Failed to connect to address:{} , Exception ={}", host, e); + return false; + } + } + + private Map doHttpPut(final String loadUrl, final DorisFlushBatch flushBatch) throws IOException { + LOG.info(String.format("Executing stream load to: '%s', size: %s, rows: %d", + loadUrl, flushBatch.getSize(), flushBatch.getRows())); + + final HttpClientBuilder httpClientBuilder = HttpClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() { + @Override + protected boolean isRedirectable(final String method) { + return true; + } + + @Override + public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException { + URI uri = this.getLocationURI(request, response, context); + String method = request.getRequestLine().getMethod(); + if (method.equalsIgnoreCase("HEAD")) { + return new HttpHead(uri); + } else if (method.equalsIgnoreCase("GET")) { + return new HttpGet(uri); + } else { + int status = response.getStatusLine().getStatusCode(); + return (HttpUriRequest) (status == 307 ? RequestBuilder.copy(request).setUri(uri).build() : new HttpGet(uri)); + } + } + }); + + try (final CloseableHttpClient httpclient = httpClientBuilder.build()) { + final HttpPut httpPut = new HttpPut(loadUrl); + final List cols = this.keys.getColumns(); + if (null != cols && !cols.isEmpty()) { + httpPut.setHeader("columns", String.join(",", cols)); + } + + // put loadProps to http header + final Map loadProps = this.keys.getLoadProps(); + if (null != loadProps) { + for (final Map.Entry entry : loadProps.entrySet()) { + httpPut.setHeader(entry.getKey(), String.valueOf(entry.getValue())); + } + } + + // set other required headers + httpPut.setHeader(HttpHeaders.EXPECT, "100-continue"); + httpPut.setHeader(HttpHeaders.AUTHORIZATION, this.getBasicAuthHeader(this.keys.getUsername(), this.keys.getPassword())); + httpPut.setHeader("label", flushBatch.getLabel()); + httpPut.setHeader("format", "json"); + httpPut.setHeader("line_delimiter", this.keys.getLineDelimiterDesc()); + httpPut.setHeader("read_json_by_line", "true"); + httpPut.setHeader("fuzzy_parse", "true"); + + // Use ByteArrayEntity instead of StringEntity to handle Chinese correctly + httpPut.setEntity(new ByteArrayEntity(flushBatch.getData().toString().getBytes())); + + httpPut.setConfig(requestConfig); + + try (final CloseableHttpResponse resp = httpclient.execute(httpPut)) { + final int code = resp.getStatusLine().getStatusCode(); + if (HttpStatus.SC_OK != code) { + LOG.warn("Request failed with code:{}", code); + return null; + } + final HttpEntity respEntity = resp.getEntity(); + if (null == respEntity) { + LOG.warn("Request failed with empty response."); + return null; + } + return (Map) JSON.parse(EntityUtils.toString(respEntity)); + } + } + } + + private String getBasicAuthHeader(final String username, final String password) { + final String auth = username + ":" + password; + final byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes()); + return "Basic " + new String(encodedAuth); + } + + // for test + public static void main(String[] args) throws IOException { + String json = "{\n" + + " \"feLoadUrl\": [\"127.0.0.1:8030\"],\n" + + " \"column\": [\"k1\", \"k2\", \"k3\"],\n" + + " \"database\": \"db1\",\n" + + " \"jdbcUrl\": \"jdbc:mysql://127.0.0.1:9030/\",\n" + + " \"loadProps\": {\n" + + " },\n" + + " \"password\": \"12345\",\n" + + " \"postSql\": [],\n" + + " \"preSql\": [],\n" + + " \"table\": \"t1\",\n" + + " \"username\": \"root\"\n" + + " }"; + Configuration configuration = Configuration.from(json); + Key key = new Key(configuration); + + DorisWriterEmitter emitter = new DorisWriterEmitter(key); + DorisFlushBatch flushBatch = new DorisFlushBatch("\n"); + flushBatch.setLabel("test4"); + Map row1 = Maps.newHashMap(); + row1.put("k1", "2021-02-02"); + row1.put("k2", "2021-02-02 00:00:00"); + row1.put("k3", "3"); + String rowStr1 = JSON.toJSONString(row1); + System.out.println("rows1: " + rowStr1); + flushBatch.putData(rowStr1); + + Map row2 = Maps.newHashMap(); + row2.put("k1", "2021-02-03"); + row2.put("k2", "2021-02-03 00:00:00"); + row2.put("k3", "4"); + String rowStr2 = JSON.toJSONString(row2); + System.out.println("rows2: " + rowStr2); + flushBatch.putData(rowStr2); + + for (int i = 0; i < 500000; ++i) { + flushBatch.putData(rowStr2); + } + + emitter.doStreamLoad(flushBatch); + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java new file mode 100644 index 00000000..cfbef96c --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java @@ -0,0 +1,171 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.google.common.base.Strings; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +public class Key implements Serializable { + public static final String FE_LOAD_URL = "feLoadUrl"; + public static final String BE_LOAD_URL = "beLoadUrl"; + public static final String JDBC_URL = "jdbcUrl"; + + public static final String DATABASE = "database"; + public static final String TABLE = "table"; + public static final String COLUMN = "column"; + + public static final String USERNAME = "username"; + public static final String PASSWORD = "password"; + + public static final String PRE_SQL = "preSql"; + public static final String POST_SQL = "postSql"; + + public static final String LOAD_PROPS = "loadProps"; + public static final String MAX_BATCH_ROWS = "maxBatchRows"; + public static final String MAX_BATCH_BYTE_SIZE = "maxBatchByteSize"; + public static final String LABEL_PREFIX = "labelPrefix"; + public static final String LINE_DELIMITER = "lineDelimiter"; + public static final String CONNECT_TIMEOUT = "connectTimeout"; + private final Configuration options; + private final String lineDelimiterDesc; + + private static final long DEFAULT_MAX_BATCH_ROWS = 50_0000; + private static final long DEFAULT_MAX_BATCH_BYTE_SIZE = 100 * 1024 * 1024; // 100MB + private static final String DEFAULT_LABEL_PREFIX = "datax_doris_writer_"; + private static final String DEFAULT_LINE_DELIMITER = "\n"; + private static final int DEFAULT_CONNECT_TIMEOUT = -1; + + public Key(final Configuration options) { + this.options = options; + this.lineDelimiterDesc = parseHexReadable(this.getLineDelimiter()); + } + + public void doPretreatment() { + this.validateRequired(); + this.validateStreamLoadUrl(); + } + + public String getJdbcUrl() { + return this.options.getString(JDBC_URL); + } + + public String getDatabase() { + return this.options.getString(DATABASE); + } + + public String getTable() { + return this.options.getString(TABLE); + } + + public String getUsername() { + return this.options.getString(USERNAME); + } + + public String getPassword() { + return Strings.nullToEmpty(this.options.getString(PASSWORD)); + } + + public List getBeLoadUrlList() { + return this.options.getList(BE_LOAD_URL, String.class); + } + + public List getFeLoadUrlList() { + return this.options.getList(FE_LOAD_URL, String.class); + } + + public List getColumns() { + return this.options.getList(COLUMN, String.class); + } + + public List getPreSqlList() { + return this.options.getList(PRE_SQL, String.class); + } + + public List getPostSqlList() { + return this.options.getList(POST_SQL, String.class); + } + + public Map getLoadProps() { + return this.options.getMap(LOAD_PROPS); + } + + public long getBatchRows() { + return this.options.getLong(MAX_BATCH_ROWS, DEFAULT_MAX_BATCH_ROWS); + } + + public long getBatchByteSize() { + return this.options.getLong(MAX_BATCH_BYTE_SIZE, DEFAULT_MAX_BATCH_BYTE_SIZE); + } + + public String getLabelPrefix() { + return this.options.getString(LABEL_PREFIX, DEFAULT_LABEL_PREFIX); + } + + public String getLineDelimiter() { + return this.options.getString(LINE_DELIMITER, DEFAULT_LINE_DELIMITER); + } + + public int getConnectTimeout() { + return this.options.getInt(CONNECT_TIMEOUT, DEFAULT_CONNECT_TIMEOUT); + } + + public String getLineDelimiterDesc() { + return lineDelimiterDesc; + } + + private void validateStreamLoadUrl() { + List urlList = this.getBeLoadUrlList(); + if (urlList == null) { + urlList = this.getFeLoadUrlList(); + } + if (urlList == null || urlList.isEmpty()) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, "Either beLoadUrl or feLoadUrl must be set"); + } + + for (final String host : urlList) { + if (host.split(":").length < 2) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + "Invalid load url format. IF use FE hosts, should be like: fe_host:fe_http_port." + + " If use BE hosts, should be like: be_host:be_webserver_port"); + } + } + } + + private String parseHexReadable(String s) { + byte[] separatorBytes = s.getBytes(); + StringBuilder desc = new StringBuilder(); + + for (byte separatorByte : separatorBytes) { + desc.append(String.format("\\x%02x", separatorByte)); + } + return desc.toString(); + } + + private void validateRequired() { + final String[] requiredOptionKeys = new String[]{JDBC_URL, USERNAME, DATABASE, TABLE, COLUMN}; + for (final String optionKey : requiredOptionKeys) { + this.options.getNecessaryValue(optionKey, DBUtilErrorCode.REQUIRED_VALUE); + } + } +} diff --git a/doriswriter/src/main/resources/plugin.json b/doriswriter/src/main/resources/plugin.json new file mode 100644 index 00000000..9d2ad497 --- /dev/null +++ b/doriswriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "doriswriter", + "class": "com.alibaba.datax.plugin.writer.doriswriter.DorisWriter", + "description": "", + "developer": "" +} diff --git a/doriswriter/src/main/resources/plugin_job_template.json b/doriswriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..152f1eee --- /dev/null +++ b/doriswriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,15 @@ +{ + "name": "doriswriter", + "parameter": { + "username": "", + "password": "", + "database": "", + "table": "", + "column": [], + "preSql": [], + "postSql": [], + "jdbcUrl": "", + "beLoadUrl": [], + "loadProps": {} + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3f64b929..f57306a4 100644 --- a/pom.xml +++ b/pom.xml @@ -108,6 +108,7 @@ hbase20xsqlreader hbase20xsqlwriter kuduwriter + doriswriter From f5cedbeb3269fb7560cceda16e049863a50bf6af Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 24 Jan 2022 12:18:14 +0800 Subject: [PATCH 138/251] check the label state when `label already exists` --- .../StarRocksWriterOptions.java | 2 +- .../manager/StarRocksFlushTuple.java | 1 + .../StarRocksStreamLoadFailedException.java | 33 +++++++ .../manager/StarRocksStreamLoadVisitor.java | 86 ++++++++++++++++--- .../manager/StarRocksWriterManager.java | 9 +- 5 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadFailedException.java diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java index 8d5ede98..689c09e1 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -15,7 +15,7 @@ public class StarRocksWriterOptions implements Serializable { private static final long serialVersionUID = 1l; private static final long KILO_BYTES_SCALE = 1024l; private static final long MEGA_BYTES_SCALE = KILO_BYTES_SCALE * KILO_BYTES_SCALE; - private static final int MAX_RETRIES = 1; + private static final int MAX_RETRIES = 3; private static final int BATCH_ROWS = 500000; private static final long BATCH_BYTES = 90 * MEGA_BYTES_SCALE; private static final long FLUSH_INTERVAL = 300000; diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java index 47cebb91..5c939f9b 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksFlushTuple.java @@ -15,6 +15,7 @@ public class StarRocksFlushTuple { } public String getLabel() { return label; } + public void setLabel(String label) { this.label = label; } public Long getBytes() { return bytes; } public List getRows() { return rows; } } \ No newline at end of file diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadFailedException.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadFailedException.java new file mode 100644 index 00000000..4eb47048 --- /dev/null +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadFailedException.java @@ -0,0 +1,33 @@ +package com.starrocks.connector.datax.plugin.writer.starrockswriter.manager; + +import java.io.IOException; +import java.util.Map; + + +public class StarRocksStreamLoadFailedException extends IOException { + + static final long serialVersionUID = 1L; + + private final Map response; + private boolean reCreateLabel; + + public StarRocksStreamLoadFailedException(String message, Map response) { + super(message); + this.response = response; + } + + public StarRocksStreamLoadFailedException(String message, Map response, boolean reCreateLabel) { + super(message); + this.response = response; + this.reCreateLabel = reCreateLabel; + } + + public Map getFailedResponse() { + return response; + } + + public boolean needReCreateLabel() { + return reCreateLabel; + } + +} diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index 2a372263..b8245d71 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -14,6 +14,7 @@ import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.CloseableHttpClient; @@ -26,6 +27,7 @@ import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -35,6 +37,13 @@ public class StarRocksStreamLoadVisitor { private final StarRocksWriterOptions writerOptions; private long pos; + private static final String RESULT_FAILED = "Fail"; + private static final String RESULT_LABEL_EXISTED = "Label Already Exists"; + private static final String LAEBL_STATE_VISIBLE = "VISIBLE"; + private static final String LAEBL_STATE_COMMITTED = "COMMITTED"; + private static final String RESULT_LABEL_PREPARE = "PREPARE"; + private static final String RESULT_LABEL_ABORTED = "ABORTED"; + private static final String RESULT_LABEL_UNKNOWN = "UNKNOWN"; public StarRocksStreamLoadVisitor(StarRocksWriterOptions writerOptions) { this.writerOptions = writerOptions; @@ -59,10 +68,14 @@ public class StarRocksStreamLoadVisitor { throw new IOException("Unable to flush data to StarRocks: unknown result status."); } LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); - if (loadResult.get(keyStatus).equals("Fail")) { + if (RESULT_FAILED.equals(loadResult.get(keyStatus))) { throw new IOException( new StringBuilder("Failed to flush data to StarRocks.\n").append(JSON.toJSONString(loadResult)).toString() ); + } else if (RESULT_LABEL_EXISTED.equals(loadResult.get(keyStatus))) { + LOG.debug(new StringBuilder("StreamLoad response:\n").append(JSON.toJSONString(loadResult)).toString()); + // has to block-checking the state to get the final result + checkLabelState(host, flushData.getLabel()); } } @@ -122,6 +135,52 @@ public class StarRocksStreamLoadVisitor { throw new RuntimeException("Failed to join rows data, unsupported `format` from stream load properties:"); } + @SuppressWarnings("unchecked") + private void checkLabelState(String host, String label) throws IOException { + int idx = 0; + while(true) { + try { + TimeUnit.SECONDS.sleep(Math.min(++idx, 5)); + } catch (InterruptedException ex) { + break; + } + try (CloseableHttpClient httpclient = HttpClients.createDefault()) { + HttpGet httpGet = new HttpGet(new StringBuilder(host).append("/api/").append(writerOptions.getDatabase()).append("/get_load_state?label=").append(label).toString()); + httpGet.setHeader("Authorization", getBasicAuthHeader(writerOptions.getUsername(), writerOptions.getPassword())); + httpGet.setHeader("Connection", "close"); + + try (CloseableHttpResponse resp = httpclient.execute(httpGet)) { + HttpEntity respEntity = getHttpEntity(resp); + if (respEntity == null) { + throw new IOException(String.format("Failed to flush data to StarRocks, Error " + + "could not get the final state of label[%s].\n", label), null); + } + Map result = (Map)JSON.parse(EntityUtils.toString(respEntity)); + String labelState = (String)result.get("state"); + if (null == labelState) { + throw new IOException(String.format("Failed to flush data to StarRocks, Error " + + "could not get the final state of label[%s]. response[%s]\n", label, EntityUtils.toString(respEntity)), null); + } + LOG.info(String.format("Checking label[%s] state[%s]\n", label, labelState)); + switch(labelState) { + case LAEBL_STATE_VISIBLE: + case LAEBL_STATE_COMMITTED: + return; + case RESULT_LABEL_PREPARE: + continue; + case RESULT_LABEL_ABORTED: + throw new StarRocksStreamLoadFailedException(String.format("Failed to flush data to StarRocks, Error " + + "label[%s] state[%s]\n", label, labelState), null, true); + case RESULT_LABEL_UNKNOWN: + default: + throw new IOException(String.format("Failed to flush data to StarRocks, Error " + + "label[%s] state[%s]\n", label, labelState), null); + } + } + } + } + } + @SuppressWarnings("unchecked") private Map doHttpPut(String loadUrl, String label, byte[] data) throws IOException { LOG.info(String.format("Executing stream load to: '%s', size: '%s'", loadUrl, data.length)); @@ -150,16 +209,9 @@ public class StarRocksStreamLoadVisitor { httpPut.setEntity(new ByteArrayEntity(data)); httpPut.setConfig(RequestConfig.custom().setRedirectsEnabled(true).build()); try (CloseableHttpResponse resp = httpclient.execute(httpPut)) { - int code = resp.getStatusLine().getStatusCode(); - if (200 != code) { - LOG.warn("Request failed with code:{}", code); + HttpEntity respEntity = getHttpEntity(resp); + if (respEntity == null) return null; - } - HttpEntity respEntity = resp.getEntity(); - if (null == respEntity) { - LOG.warn("Request failed with empty response."); - return null; - } return (Map)JSON.parse(EntityUtils.toString(respEntity)); } } @@ -171,4 +223,18 @@ public class StarRocksStreamLoadVisitor { return new StringBuilder("Basic ").append(new String(encodedAuth)).toString(); } + private HttpEntity getHttpEntity(CloseableHttpResponse resp) { + int code = resp.getStatusLine().getStatusCode(); + if (200 != code) { + LOG.warn("Request failed with code:{}", code); + return null; + } + HttpEntity respEntity = resp.getEntity(); + if (null == respEntity) { + LOG.warn("Request failed with empty response."); + return null; + } + return respEntity; + } + } diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index f32eccde..d7c290df 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -134,7 +134,7 @@ public class StarRocksWriterManager { flushException = e; } } - } + } }); flushThread.setDaemon(true); flushThread.start(); @@ -167,8 +167,13 @@ public class StarRocksWriterManager { if (i >= writerOptions.getMaxRetries()) { throw new IOException(e); } + if (e instanceof StarRocksStreamLoadFailedException && ((StarRocksStreamLoadFailedException)e).needReCreateLabel()) { + String newLabel = createBatchLabel(); + LOG.warn(String.format("Batch label changed from [%s] to [%s]", flushData.getLabel(), newLabel)); + flushData.setLabel(newLabel); + } try { - Thread.sleep(1000l * (i + 1)); + Thread.sleep(1000l * Math.min(i + 1, 10)); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); throw new IOException("Unable to flush, interrupted while doing another attempt", e); From 9e3e08987dceeae8d5b825404f2eb15d21bf3527 Mon Sep 17 00:00:00 2001 From: "jiafeng.zhang" Date: Tue, 25 Jan 2022 23:37:20 +0800 Subject: [PATCH 139/251] test case and Performance test report test case and Performance test report --- doriswriter/doc/doriswriter.md | 92 ++++++++++++++++--- .../doriswriter/TestDorisWriterLoad.java | 88 ++++++++++++++++++ 2 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 doriswriter/src/test/java/com/alibaba/datax/plugin/writer/doriswriter/TestDorisWriterLoad.java diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index 7a072620..fedc2171 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -9,12 +9,60 @@ DorisWriter是一个支持将大批量数据写入Doris中的一个插件,可 Doris是完全支持Mysql协议的,所以如果你需要读取Doris的数据,可以使用mysqlreader插件完成,这里不单独提供Doris数据读取插件。 -## 2 实现原理 +## 2.支持版本 + +DorisWriter目前支持的Doris版本如下: + +| Doris版本号 | 说明 | +| -------------------- | ----------------------------------------------- | +| Apahce Doris 0.13.0 | 包括百度发行版palo 0.13.15 | +| Apache Doris 0.14.0 | 包括百度发行版palo 0.14.7、0.14.12.1、0.14.13.1 | +| Apache Doris 0.15.0 | 包括百度发行版palo 0.15.1 RC09 | +| Apahce Doris后续版本 | | + +大家在使用过程中如果遇到什么问题,可以通过邮件或者在Doris的[Issues · apache/incubator-doris](https://github.com/apache/incubator-doris/issues)上提问,我们会及时解决,或者可以给Doris的开发组邮箱发送邮件:dev@doris.apache.org,我们也会及时查看回复及修复。 + +## 3 实现原理 DorisWriter 通过Doris原生支持Stream load方式导入数据, DorisWriter会将`reader`读取的数据进行缓存在内存中,拼接成Json文本,然后批量导入至Doris。 -## 3 功能说明 +Stream load 是一个同步的导入方式,用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中。Stream load 同步执行导入并返回导入结果。用户可直接通过请求的返回体判断本次导入是否成功。 -### 3.1 配置样例 +Stream load 主要适用于导入本地文件,或通过程序导入数据流中的数据 + +Stream Load的数据导入流程如下: + +```text + ^ + + | | + | | 1A. User submit load to FE + | | + | +--v-----------+ + | | FE | +5. Return result to user | +--+-----------+ + | | + | | 2. Redirect to BE + | | + | +--v-----------+ + +---+Coordinator BE| 1B. User submit load to BE + +-+-----+----+-+ + | | | + +-----+ | +-----+ + | | | 3. Distrbute data + | | | + +-v-+ +-v-+ +-v-+ + |BE | |BE | |BE | + +---+ +---+ +---+ +``` + +Stream load 中,Doris 会选定一个节点作为 Coordinator 节点。该节点负责接数据并分发数据到其他数据节点。 + +用户通过 HTTP 协议提交导入命令。如果提交到 FE,则 FE 会通过 HTTP redirect 指令将请求转发给某一个 BE。用户也可以直接提交导入命令给某一指定 BE。 + +导入的最终结果由 Coordinator BE 返回给用户。 + +## 4 功能说明 + +### 4.1 配置样例 这里是一份从Stream读取数据后导入至Doris的配置文件。 @@ -83,7 +131,7 @@ DorisWriter 通过Doris原生支持Stream load方式导入数据, DorisWriter } ``` -### 3.2 参数说明 +### 4.2 参数说明 * **jdbcUrl** @@ -147,37 +195,53 @@ DorisWriter 通过Doris原生支持Stream load方式导入数据, DorisWriter * **maxBatchRows** - - 描述:每批次导入数据的最大行数。和 **maxBatchByteSize** 共同控制每批次的导入数量。每批次数据达到两个阈值之一,即开始导入这一批次的数据。 - 必选:否 - 默认值:500000 - * **maxBatchByteSize** - - 描述:每批次导入数据的最大数据量。和 ** maxBatchRows** 共同控制每批次的导入数量。每批次数据达到两个阈值之一,即开始导入这一批次的数据。 - 必选:否 - 默认值:104857600 - * **labelPrefix** - - 描述:每批次导入任务的 label 前缀。最终的 label 将有 `labelPrefix + UUID + 序号` 组成 - 必选:否 - 默认值:`datax_doris_writer_` - * **lineDelimiter** - - 描述:每批次数据包含多行,每行为 Json 格式,每行的的分隔符即为 lineDelimiter。支持多个字节, 例如'\x02\x03'。 - 必选:否 - 默认值:`\n` - * **loadProps** - - 描述:StreamLoad 的请求参数,详情参照StreamLoad介绍页面。 - 必选:否 - 默认值:无 - * **connectTimeout** - 描述:StreamLoad单次请求的超时时间, 单位毫秒(ms)。 - 必选:否 - 默认值:-1 + +### 4.3 doriswriter插件的约束与限制 + +DorisWriter是借助于Apache Doris提供的Stream Load方式来实现数据导入,为了避免频繁的数据插入引发Doris写失败,建议批到的方式,具体参照[常见报错 | Apache Doris](https://doris.apache.org/zh-CN/faq/error.html#e3-tablet-writer-write-failed-tablet-id-27306172-txn-id-28573520-err-235-or-215-or-238),建议将参数列表中的下列参数设大,下面给出建议值: + +1. maxBatchRows:10000,表示每10000条提交导入一次,如果你的数据量没那么可以适当调小 +2. maxBatchByteSize:这个参数表示你每个批到导入数据量大的大小,具体值=maxBatchRows * 单条记录的大小,如果一个批次导入的数据量大小超过这个值将被阻塞导入,导入数据格式是JSON格式所以这个值可以适当放大,通过上面的导入记录数来控制每个批次导入的数据量就可以了 +3. column:这个要和你在Doris里建表的字段顺序一致。 + +## 4.性能测试 + +下面是通过读取Mysql数据表的数据,插入到Doris进行的性能测试结果,仅供参考 + +``` +2022-01-25 23:32:53.638 [job-0] INFO JobContainer - PerfTrace not enable! +2022-01-25 23:32:53.638 [job-0] INFO StandAloneJobContainerCommunicator - Total 2000000 records, 80888896 bytes | Speed 3.86MB/s, 100000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 14.270s | All Task WaitReaderTime 0.147s | Percentage 100.00% +2022-01-25 23:32:53.639 [job-0] INFO JobContainer - +任务启动时刻 : 2022-01-25 23:32:33 +任务结束时刻 : 2022-01-25 23:32:53 +任务总计耗时 : 20s +任务平均流量 : 3.86MB/s +记录写入速度 : 100000rec/s +读出记录总数 : 2000000 +读写失败总数 : 0 +``` + diff --git a/doriswriter/src/test/java/com/alibaba/datax/plugin/writer/doriswriter/TestDorisWriterLoad.java b/doriswriter/src/test/java/com/alibaba/datax/plugin/writer/doriswriter/TestDorisWriterLoad.java new file mode 100644 index 00000000..35b6e3a4 --- /dev/null +++ b/doriswriter/src/test/java/com/alibaba/datax/plugin/writer/doriswriter/TestDorisWriterLoad.java @@ -0,0 +1,88 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Maps; +import com.alibaba.datax.common.util.Configuration; + +import java.io.IOException; +import java.util.Map; + +public class TestDorisWriterLoad { + + + // for test + public static void main(String[] args) throws IOException { + /** + * 下面示例使用的建表语句,要首先有一套Ddoris的环境,创建数据库demo,然后使用下面的建表语句创建表 + * 修改feLoadUrl中的IP地址,username,password,然后运行 + * CREATE TABLE `doris_test` ( + * `k1` varchar(30) NULL , + * `k2` varchar(255) NULL, + * `k3` varchar(200) + * ) ENGINE=OLAP + * Duplicate KEY(k1) + * COMMENT "OLAP" + * DISTRIBUTED BY HASH(k1) BUCKETS 1 + * PROPERTIES ( + * "replication_allocation" = "tag.location.default: 1", + * "in_memory" = "false", + * "storage_format" = "V2" + * ) + */ + String json = "{\n" + + " \"feLoadUrl\": [\"127.0.0.1:8030\"],\n" + + " \"column\": [\"k1\", \"k2\", \"k3\"],\n" + + " \"database\": \"demo\",\n" + + " \"jdbcUrl\": \"\",\n" + + " \"loadProps\": {},\n" + + " \"password\": \"12345\",\n" + + " \"postSql\": [],\n" + + " \"preSql\": [],\n" + + " \"table\": \"doris_test\",\n" + + " \"username\": \"root\"\n" + + "}"; + Configuration configuration = Configuration.from(json); + Key key = new Key(configuration); + + DorisWriterEmitter emitter = new DorisWriterEmitter(key); + DorisFlushBatch flushBatch = new DorisFlushBatch("\n"); + flushBatch.setLabel("test4"); + Map row1 = Maps.newHashMap(); + row1.put("k1", "2021-02-02"); + row1.put("k2", "2021-02-02 00:00:00"); + row1.put("k3", "3"); + String rowStr1 = JSON.toJSONString(row1); + System.out.println("rows1: " + rowStr1); + flushBatch.putData(rowStr1); + + Map row2 = Maps.newHashMap(); + row2.put("k1", "2021-02-03"); + row2.put("k2", "2021-02-03 00:00:00"); + row2.put("k3", "4"); + String rowStr2 = JSON.toJSONString(row2); + System.out.println("rows2: " + rowStr2); + flushBatch.putData(rowStr2); + + for (int i = 0; i < 50000; ++i) { + flushBatch.putData(rowStr2); + } + emitter.doStreamLoad(flushBatch); + } +} From 79db76dd8f597d0eaa00b039cc9b4a39b116aede Mon Sep 17 00:00:00 2001 From: "jiafeng.zhang" Date: Tue, 25 Jan 2022 23:57:15 +0800 Subject: [PATCH 140/251] 1 1 --- doriswriter/doc/doriswriter.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doriswriter/doc/doriswriter.md b/doriswriter/doc/doriswriter.md index fedc2171..a9e7101b 100644 --- a/doriswriter/doc/doriswriter.md +++ b/doriswriter/doc/doriswriter.md @@ -232,6 +232,8 @@ DorisWriter是借助于Apache Doris提供的Stream Load方式来实现数据导 下面是通过读取Mysql数据表的数据,插入到Doris进行的性能测试结果,仅供参考 +测试是单机测试,Mysql 8.0.26,Doris 0.15 (单机),mysql和Doris部署在同一台服务器上,服务器配置:4核 16 GiB + ``` 2022-01-25 23:32:53.638 [job-0] INFO JobContainer - PerfTrace not enable! 2022-01-25 23:32:53.638 [job-0] INFO StandAloneJobContainerCommunicator - Total 2000000 records, 80888896 bytes | Speed 3.86MB/s, 100000 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 14.270s | All Task WaitReaderTime 0.147s | Percentage 100.00% From a1bf9baa3eccd3d2b3f7fa13aabb93f25a0fccee Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 14 Feb 2022 18:49:25 +0800 Subject: [PATCH 141/251] add label-prefix option --- .../starrockswriter/StarRocksWriterOptions.java | 5 +++++ .../manager/StarRocksWriterManager.java | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java index 689c09e1..14ce0332 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/StarRocksWriterOptions.java @@ -33,6 +33,7 @@ public class StarRocksWriterOptions implements Serializable { private static final String KEY_PRE_SQL = "preSql"; private static final String KEY_POST_SQL = "postSql"; private static final String KEY_JDBC_URL = "jdbcUrl"; + private static final String KEY_LABEL_PREFIX = "labelPrefix"; private static final String KEY_MAX_BATCH_ROWS = "maxBatchRows"; private static final String KEY_MAX_BATCH_SIZE = "maxBatchSize"; private static final String KEY_FLUSH_INTERVAL = "flushInterval"; @@ -78,6 +79,10 @@ public class StarRocksWriterOptions implements Serializable { return options.getString(KEY_PASSWORD); } + public String getLabelPrefix() { + return options.getString(KEY_LABEL_PREFIX); + } + public List getLoadUrlList() { return options.getList(KEY_LOAD_URL, String.class); } diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index d7c290df..c28c8647 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -24,6 +24,7 @@ public class StarRocksWriterManager { private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; private final StarRocksWriterOptions writerOptions; + private static final String UNDERSCORE = "_"; private final List buffer = new ArrayList<>(); private int batchCount = 0; @@ -120,7 +121,16 @@ public class StarRocksWriterManager { } public String createBatchLabel() { - return UUID.randomUUID().toString(); + StringBuilder sb = new StringBuilder(); + if (!Strings.isNullOrEmpty(writerOptions.getLabelPrefix())) { + sb.append(writerOptions.getLabelPrefix()).append(UNDERSCORE); + } + return sb.append(writerOptions.getDatabase()) + .append(UNDERSCORE) + .append(writerOptions.getTable()) + .append(UNDERSCORE) + .append(UUID.randomUUID().toString()) + .toString(); } private void startAsyncFlushing() { From df3ea169b018b9cf03e6e32fdbd94c42b4b115c6 Mon Sep 17 00:00:00 2001 From: zyyang Date: Mon, 14 Feb 2022 18:58:17 +0800 Subject: [PATCH 142/251] tdenginewriter rebuiled --- tdenginereader/pom.xml | 2 +- .../com/alibaba/datax/plugin/reader/Key.java | 2 +- .../datax/plugin/reader/TDengineReader.java | 5 +- tdenginewriter/pom.xml | 28 +- .../writer/tdenginewriter/ColumnMeta.java | 24 + .../writer/tdenginewriter/Constants.java | 8 + .../writer/tdenginewriter/DataHandler.java | 5 +- .../tdenginewriter/DataHandlerFactory.java | 10 - .../tdenginewriter/DefaultDataHandler.java | 473 +++++++++++++++--- .../tdenginewriter/JDBCBatchWriter.java | 244 --------- .../writer/tdenginewriter/JniConnection.java | 89 ---- .../plugin/writer/tdenginewriter/Key.java | 16 +- .../tdenginewriter/OpentsdbDataHandler.java | 68 +-- .../writer/tdenginewriter/SchemaManager.java | 351 +++++-------- .../writer/tdenginewriter/TDengineWriter.java | 78 +-- .../TDengineWriterErrorCode.java | 12 +- .../writer/tdenginewriter/TableMeta.java | 22 + .../writer/tdenginewriter/TableType.java | 5 + .../tdenginewriter/TimestampPrecision.java | 5 + ...ugin_writer_tdenginewriter_JniConnection.h | 105 ---- .../DefaultDataHandlerTest.java | 235 +++++++++ .../DefaultDataHandlerTest2.java | 85 ++++ .../writer/tdenginewriter/EngineTest.java | 65 +++ .../tdenginewriter/JniConnectionTest.java | 21 - .../tdenginewriter/SchemaManagerTest.java | 88 ++++ .../tdenginewriter/TDengineWriterTest.java | 69 ++- .../src/test/resources/mysql2tdengine.json | 57 +++ .../src/test/resources/opentsdb2tdengine.json | 36 ++ .../src/test/resources/tdengine2tdengine.json | 51 ++ 29 files changed, 1375 insertions(+), 884 deletions(-) create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java create mode 100644 tdenginewriter/src/test/resources/mysql2tdengine.json create mode 100644 tdenginewriter/src/test/resources/opentsdb2tdengine.json create mode 100644 tdenginewriter/src/test/resources/tdengine2tdengine.json diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml index 8c0f6645..ca444bce 100644 --- a/tdenginereader/pom.xml +++ b/tdenginereader/pom.xml @@ -32,7 +32,7 @@ com.taosdata.jdbc taos-jdbcdriver - 2.0.34 + 2.0.37 diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java index eddf98eb..95b55386 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java @@ -7,7 +7,7 @@ public class Key { // public static final String PORT = "port"; // public static final String DB = "db"; public static final String TABLE = "table"; - public static final String USER = "user"; + public static final String USER = "username"; public static final String PASSWORD = "password"; public static final String CONNECTION = "connection"; // public static final String SQL = "sql"; diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index dfdce7b4..f00d879f 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -190,8 +190,9 @@ public class TDengineReader extends Reader { @Override public void startRead(RecordSender recordSender) { try (Statement stmt = conn.createStatement()) { - for (int i = 0; i < tables.size(); i++) { - String sql = "select " + StringUtils.join(columns, ",") + " from " + tables.get(i) + " where _c0 >= " + startTime + " and _c0 < " + endTime; + for (String table : tables) { + String sql = "select " + StringUtils.join(columns, ",") + " from " + table + + " where _c0 >= " + startTime + " and _c0 < " + endTime; ResultSet rs = stmt.executeQuery(sql); ResultSetMetaData metaData = rs.getMetaData(); while (rs.next()) { diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 054f2ef8..720ecbb8 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -19,11 +19,25 @@ + + + com.alibaba + fastjson + 1.2.58 + + com.taosdata.jdbc taos-jdbcdriver - 2.0.34 + 2.0.37 + + + com.alibaba + fastjson + + + com.alibaba.datax datax-common @@ -36,18 +50,18 @@ - - com.taosdata.jdbc - taos-jdbcdriver - 2.0.34 - - junit junit ${junit-version} test + + com.alibaba.datax + datax-core + 0.0.1-SNAPSHOT + test + org.apache.commons commons-lang3 diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java new file mode 100644 index 00000000..5c77eccd --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java @@ -0,0 +1,24 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class ColumnMeta { + String field; + String type; + int length; + String note; + boolean isTag; + boolean isPrimaryKey; + Object value; + + @Override + public String toString() { + return "ColumnMeta{" + + "field='" + field + '\'' + + ", type='" + type + '\'' + + ", length=" + length + + ", note='" + note + '\'' + + ", isTag=" + isTag + + ", isPrimaryKey=" + isPrimaryKey + + ", value=" + value + + '}'; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java new file mode 100644 index 00000000..d62c8f32 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java @@ -0,0 +1,8 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class Constants { + public static final String DEFAULT_USERNAME = "root"; + public static final String DEFAULT_PASSWORD = "taosdata"; + public static final int DEFAULT_BATCH_SIZE = 1; + public static final boolean DEFAULT_IGNORE_TAGS_UNMATCHED = false; +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java index dcc3ca8c..7afcb080 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -1,12 +1,9 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.plugin.RecordReceiver; - import com.alibaba.datax.common.plugin.TaskPluginCollector; -import java.util.Properties; - public interface DataHandler { - long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector); + int handle(RecordReceiver lineReceiver, TaskPluginCollector collector); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java deleted file mode 100644 index 1f740d7e..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandlerFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -public class DataHandlerFactory { - - public static DataHandler build(String peerPluginName) { - if (peerPluginName.equals("opentsdbreader")) - return new OpentsdbDataHandler(); - return new DefaultDataHandler(); - } -} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index a8704f24..16be4c90 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -1,108 +1,423 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; +import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; -import com.taosdata.jdbc.TSDBDriver; -import com.taosdata.jdbc.TSDBPreparedStatement; +import com.alibaba.datax.common.util.Configuration; +import com.taosdata.jdbc.SchemalessWriter; +import com.taosdata.jdbc.enums.SchemalessProtocolType; +import com.taosdata.jdbc.enums.SchemalessTimestampType; +import com.taosdata.jdbc.utils.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.Properties; +import java.sql.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; -/** - * 默认DataHandler - */ public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); - static { - try { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } + private String username; + private String password; + private String jdbcUrl; + private int batchSize; + private boolean ignoreTagsUnmatched; + + private List tables; + private List columns; + + private Map tableMetas; + private SchemaManager schemaManager; + + public void setTableMetas(Map tableMetas) { + this.tableMetas = tableMetas; + } + + public void setColumnMetas(Map> columnMetas) { + this.columnMetas = columnMetas; + } + + public void setSchemaManager(SchemaManager schemaManager) { + this.schemaManager = schemaManager; + } + + private Map> columnMetas; + + public DefaultDataHandler(Configuration configuration) { + this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); + this.password = configuration.getString(Key.PASSWORD, Constants.DEFAULT_PASSWORD); + this.jdbcUrl = configuration.getString(Key.JDBC_URL); + this.batchSize = configuration.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); + this.tables = configuration.getList(Key.TABLE, String.class); + this.columns = configuration.getList(Key.COLUMN, String.class); + this.ignoreTagsUnmatched = configuration.getBool(Key.IGNORE_TAGS_UNMATCHED, Constants.DEFAULT_IGNORE_TAGS_UNMATCHED); } @Override - public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { - SchemaManager schemaManager = new SchemaManager(properties); - if (!schemaManager.configValid()) { - return 0; - } + public int handle(RecordReceiver lineReceiver, TaskPluginCollector collector) { + int count = 0; + int affectedRows = 0; - try { - Connection conn = getTaosConnection(properties); - if (conn == null) { - return 0; - } - if (schemaManager.shouldGuessSchema()) { - // 无法从配置文件获取表结构信息,尝试从数据库获取 - LOG.info(Msg.get("try_get_schema_from_db")); - boolean success = schemaManager.getFromDB(conn); - if (!success) { - return 0; + try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { + LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); + // prepare table_name -> table_meta + this.schemaManager = new SchemaManager(conn); + this.tableMetas = schemaManager.loadTableMeta(tables); + // prepare table_name -> column_meta + this.columnMetas = schemaManager.loadColumnMetas(tables); + + List recordBatch = new ArrayList<>(); + Record record; + for (int i = 1; (record = lineReceiver.getFromReader()) != null; i++) { + if (i % batchSize != 0) { + recordBatch.add(record); + } else { + affectedRows = writeBatch(conn, recordBatch); + recordBatch.clear(); } - } else { - + count++; } - int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, "1000")); - if (batchSize < 5) { - // batchSize太小,会增加自动类型推断错误的概率,建议改大后重试 - LOG.error(Msg.get("batch_size_too_small")); - return 0; - } - return write(lineReceiver, conn, batchSize, schemaManager, collector); - } catch (Exception e) { - LOG.error("write failed " + e.getMessage()); - e.printStackTrace(); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); } - return 0; - } - - private Connection getTaosConnection(Properties properties) throws SQLException { - // 检查必要参数 - String host = properties.getProperty(Key.HOST); - String port = properties.getProperty(Key.PORT); - String dbname = properties.getProperty(Key.DBNAME); - String user = properties.getProperty(Key.USER); - String password = properties.getProperty(Key.PASSWORD); - if (host == null || port == null || dbname == null || user == null || password == null) { - String keys = String.join(" ", Key.HOST, Key.PORT, Key.DBNAME, Key.USER, Key.PASSWORD); - LOG.error("Required options missing, please check: " + keys); - return null; + if (affectedRows != count) { + LOG.error("write record missing or incorrect happened, affectedRows: " + affectedRows + ", total: " + count); } - String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", host, port, dbname, user, password); - Properties connProps = new Properties(); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); - LOG.info("TDengine connection established, host:{} port:{} dbname:{} user:{}", host, port, dbname, user); - return DriverManager.getConnection(jdbcUrl, connProps); + + return affectedRows; } /** - * 使用SQL批量写入
- * - * @return 成功写入记录数 - * @throws SQLException + * table: [ "stb1", "stb2", "tb1", "tb2", "t1" ] + * stb1[ts,f1,f2] tags:[t1] + * stb2[ts,f1,f2,f3] tags:[t1,t2] + * 1. tables 表的的类型分成:stb(super table)/tb(sub table)/t(original table) + * 2. 对于stb,自动建表/schemaless + * 2.1: data中有tbname字段, 例如:data: [ts, f1, f2, f3, t1, t2, tbname] tbColumn: [ts, f1, f2, t1] => insert into tbname using stb1 tags(t1) values(ts, f1, f2) + * 2.2: data中没有tbname字段,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => schemaless: stb1,t1=t1 f1=f1,f2=f2 ts, 没有批量写 + * 3. 对于tb,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => insert into tb(ts, f1, f2) values(ts, f1, f2) + * 4. 对于t,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, f3, t1, t2] insert into t(ts, f1, f2, f3, t1, t2) values(ts, f1, f2, f3, t1, t2) */ - private long write(RecordReceiver lineReceiver, Connection conn, int batchSize, SchemaManager scm, TaskPluginCollector collector) throws SQLException { - Record record = lineReceiver.getFromReader(); - if (record == null) { - return 0; + public int writeBatch(Connection conn, List recordBatch) { + int affectedRows = 0; + for (String table : tables) { + TableMeta tableMeta = tableMetas.get(table); + switch (tableMeta.tableType) { + case SUP_TABLE: { + if (columns.contains("tbname")) + affectedRows += writeBatchToSupTableBySQL(conn, table, recordBatch); + else + affectedRows += writeBatchToSupTableBySchemaless(conn, table, recordBatch); + } + break; + case SUB_TABLE: + affectedRows += writeBatchToSubTable(conn, table, recordBatch); + break; + case NML_TABLE: + default: + affectedRows += writeBatchToNormalTable(conn, table, recordBatch); + } } - String pq = String.format("INSERT INTO ? USING %s TAGS(%s) (%s) values (%s)", scm.getStable(), scm.getTagValuesPlaceHolder(), scm.getJoinedFieldNames(), scm.getFieldValuesPlaceHolder()); - LOG.info("Prepared SQL: {}", pq); - try (TSDBPreparedStatement stmt = (TSDBPreparedStatement) conn.prepareStatement(pq)) { - JDBCBatchWriter batchWriter = new JDBCBatchWriter(conn, stmt, scm, batchSize, collector); - do { - batchWriter.append(record); - } while ((record = lineReceiver.getFromReader()) != null); - batchWriter.flush(); - return batchWriter.getCount(); + return affectedRows; + } + + /** + * insert into record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + */ + private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder("insert into"); + for (Record record : recordBatch) { + sb.append(" ").append(record.getColumn(indexOf("tbname")).asString()) + .append(" using ").append(table) + .append(" tags") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))) + .append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))); + } + String sql = sb.toString(); + + return executeUpdate(conn, sql); + } + + private int executeUpdate(Connection conn, String sql) throws DataXException { + int count; + try (Statement stmt = conn.createStatement()) { + LOG.debug(">>> " + sql); + count = stmt.executeUpdate(sql); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + return count; + } + + private String buildColumnValue(ColumnMeta colMeta, Record record) { + Column column = record.getColumn(indexOf(colMeta.field)); + switch (column.getType()) { + case DATE: + return "'" + column.asString() + "'"; + case BYTES: + case STRING: + if (colMeta.type.equals("TIMESTAMP")) + return "\"" + column.asString() + "\""; + String value = column.asString(); + return "\'" + Utils.escapeSingleQuota(value) + "\'"; + case NULL: + case BAD: + return "NULL"; + case BOOL: + case DOUBLE: + case INT: + case LONG: + default: + return column.asString(); } } + + /** + * table: ["stb1"], column: ["ts", "f1", "f2", "t1"] + * data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => schemaless: stb1,t1=t1 f1=f1,f2=f2 ts + */ + private int writeBatchToSupTableBySchemaless(Connection conn, String table, List recordBatch) { + int count = 0; + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); + + List columnMetaList = this.columnMetas.get(table); + ColumnMeta ts = columnMetaList.stream().filter(colMeta -> colMeta.isPrimaryKey).findFirst().get(); + + List lines = new ArrayList<>(); + for (Record record : recordBatch) { + StringBuilder sb = new StringBuilder(); + sb.append(table).append(",") + .append(columnMetaList.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).map(colMeta -> { + String value = record.getColumn(indexOf(colMeta.field)).asString(); + if (value.contains(" ")) + value = value.replace(" ", "\\ "); + return colMeta.field + "=" + value; + }).collect(Collectors.joining(","))) + .append(" ") + .append(columnMetaList.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag && !colMeta.isPrimaryKey; + }).map(colMeta -> { + return colMeta.field + "=" + buildSchemalessColumnValue(colMeta, record); +// return colMeta.field + "=" + record.getColumn(indexOf(colMeta.field)).asString(); + }).collect(Collectors.joining(","))) + .append(" "); + // timestamp + Column column = record.getColumn(indexOf(ts.field)); + Object tsValue = column.getRawData(); + if (column.getType() == Column.Type.DATE && tsValue instanceof Date) { + long time = column.asDate().getTime(); + switch (timestampPrecision) { + case NANOSEC: + sb.append(time * 1000000); + break; + case MICROSEC: + sb.append(time * 1000); + break; + case MILLISEC: + default: + sb.append(time); + } + } else if (column.getType() == Column.Type.STRING) { + sb.append(Utils.parseTimestamp(column.asString())); + } else { + sb.append(column.asLong()); + } + String line = sb.toString(); + LOG.debug(">>> " + line); + lines.add(line); + count++; + } + + SchemalessWriter writer = new SchemalessWriter(conn); + SchemalessTimestampType timestampType; + switch (timestampPrecision) { + case NANOSEC: + timestampType = SchemalessTimestampType.NANO_SECONDS; + break; + case MICROSEC: + timestampType = SchemalessTimestampType.MICRO_SECONDS; + break; + case MILLISEC: + timestampType = SchemalessTimestampType.MILLI_SECONDS; + break; + default: + timestampType = SchemalessTimestampType.NOT_CONFIGURED; + } + try { + writer.write(lines, SchemalessProtocolType.LINE, timestampType); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + + LOG.warn("schemalessWriter does not return affected rows!"); + return count; + } + + private long dateAsLong(Column column) { + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); + long time = column.asDate().getTime(); + switch (timestampPrecision) { + case NANOSEC: + return time * 1000000; + case MICROSEC: + return time * 1000; + case MILLISEC: + default: + return time; + } + } + + private String buildSchemalessColumnValue(ColumnMeta colMeta, Record record) { + Column column = record.getColumn(indexOf(colMeta.field)); + switch (column.getType()) { + case DATE: + if (colMeta.type.equals("TIMESTAMP")) + return dateAsLong(column) + "i64"; + return "L'" + column.asString() + "'"; + case BYTES: + case STRING: + if (colMeta.type.equals("TIMESTAMP")) + return column.asString() + "i64"; + String value = column.asString(); + if (colMeta.type.startsWith("BINARY")) + return "'" + Utils.escapeSingleQuota(value) + "'"; + if (colMeta.type.startsWith("NCHAR")) + return "L'" + Utils.escapeSingleQuota(value) + "'"; + case NULL: + case BAD: + return "NULL"; + case DOUBLE: { + if (colMeta.type.equals("FLOAT")) + return column.asString() + "f32"; + if (colMeta.type.equals("DOUBLE")) + return column.asString() + "f64"; + } + case INT: + case LONG: { + if (colMeta.type.equals("TINYINT")) + return column.asString() + "i8"; + if (colMeta.type.equals("SMALLINT")) + return column.asString() + "i16"; + if (colMeta.type.equals("INT")) + return column.asString() + "i32"; + if (colMeta.type.equals("BIGINT")) + return column.asString() + "i64"; + } + case BOOL: + default: + return column.asString(); + } + } + + /** + * table: ["tb1"], column: [tbname, ts, f1, f2, t1] + * if contains("tbname") and tbname != tb1 continue; + * else if t1 != record[idx(t1)] or t2 != record[idx(t2)]... continue; + * else + * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) + */ + private int writeBatchToSubTable(Connection conn, String table, List recordBatch) { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder(); + sb.append("insert into ").append(table).append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values"); + int validRecords = 0; + for (Record record : recordBatch) { + if (columns.contains("tbname") && !table.equals(record.getColumn(indexOf("tbname")).asString())) + continue; + + boolean tagsAllMatch = columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).allMatch(colMeta -> { + return record.getColumn(indexOf(colMeta.field)).asString().equals(colMeta.value.toString()); + }); + + if (ignoreTagsUnmatched && !tagsAllMatch) + continue; + + sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(", ", "(", ") "))); + validRecords++; + } + + if (validRecords == 0) { + LOG.warn("no valid records in this batch"); + return 0; + } + + String sql = sb.toString(); + return executeUpdate(conn, sql); + } + + /** + * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] + * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) + */ + private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder(); + sb.append("insert into ").append(table) + .append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values "); + + for (Record record : recordBatch) { + sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))); + } + + String sql = sb.toString(); + return executeUpdate(conn, sql); + } + + private int indexOf(String colName) throws DataXException { + for (int i = 0; i < columns.size(); i++) { + if (columns.get(i).equals(colName)) + return i; + } + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, + "cannot find col: " + colName + " in columns: " + columns); + } + } \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java deleted file mode 100644 index 53ab9bb9..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JDBCBatchWriter.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.TaskPluginCollector; -import com.taosdata.jdbc.TSDBPreparedStatement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.sql.Connection; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 使用JDBC原生写入接口批量写入。
- * 有两个限制条件导致批量写入的代码逻辑过于复杂,以至于需要开发新的类来封装。
- * 1. 用户必须提前把需要批量写入的数据搜集到ArrayList中 - * 2. 每批写入的表名必须相同。 - * 这个类的实现逻辑是: - * 1. 先把属于同一子表的Record缓存起来 - * 2. 缓存的数量达到batchSize阈值,自动执行一次批量写入 - * 3. 最后一批数据需要用户手动flush才能写入 - */ -public class JDBCBatchWriter { - public static final Logger LOG = LoggerFactory.getLogger(JDBCBatchWriter.class); - private TSDBPreparedStatement stmt; - private SchemaManager scm; - private Connection conn; - private int batchSize; - private TaskPluginCollector collector; - - // 缓存Record, key为tableName - Map> buf = new HashMap<>(); - // 缓存表的标签值, key为tableName - Map tableTagValues = new HashMap<>(); - private long sucCount = 0; - private final int tsColIndex; - private List fieldList; - // 每个record至少应该包含的列数,用于校验数据 - private int minColNum = 0; - private Map fieldIndexMap; - private List fieldTypes = null; - - public JDBCBatchWriter(Connection conn, TSDBPreparedStatement stmt, SchemaManager scm, int batchSize, TaskPluginCollector collector) { - this.conn = conn; - this.stmt = stmt; - this.scm = scm; - this.batchSize = batchSize; - this.collector = collector; - this.tsColIndex = scm.getTsColIndex(); - this.fieldList = scm.getFieldList(); - this.fieldIndexMap = scm.getFieldIndexMap(); - this.minColNum = 1 + fieldList.size() + scm.getDynamicTagCount(); - - } - - public void initFiledTypesAndTargetTable(List records) throws SQLException { - if (fieldTypes != null) { - return; - } - guessFieldTypes(records); - if (scm.shouldCreateTable()) { - scm.createSTable(conn, fieldTypes); - } - } - - public void append(Record record) throws SQLException { - int columnNum = record.getColumnNumber(); - if (columnNum < minColNum) { - // 实际列数小于期望列数 - collector.collectDirtyRecord(record, Msg.get("column_number_error")); - return; - } - String[] tagValues = scm.getTagValuesFromRecord(record); - if (tagValues == null) { - // 标签列包含null - collector.collectDirtyRecord(record, Msg.get("tag_value_error")); - return; - } - if (!scm.hasTimestamp(record)) { - // 时间戳列为null或类型错误 - collector.collectDirtyRecord(record, Msg.get("ts_value_error")); - return; - } - String tableName = scm.computeTableName(tagValues); - if (buf.containsKey(tableName)) { - List lis = buf.get(tableName); - lis.add(record); - if (lis.size() == batchSize) { - if (fieldTypes == null) { - initFiledTypesAndTargetTable(lis); - } - executeBatch(tableName); - lis.clear(); - } - } else { - List lis = new ArrayList<>(batchSize); - lis.add(record); - buf.put(tableName, lis); - tableTagValues.put(tableName, tagValues); - } - } - - /** - * 只有String类型比较特别,测试发现值为null的列会转成String类型。所以Column的类型为String并不代表这一列的类型真的是String。 - * - * @param records - */ - private void guessFieldTypes(List records) { - fieldTypes = new ArrayList<>(fieldList.size()); - for (int i = 0; i < fieldList.size(); ++i) { - int colIndex = fieldIndexMap.get(fieldList.get(i)); - boolean ok = false; - for (int j = 0; j < records.size() && !ok; ++j) { - Column column = records.get(j).getColumn(colIndex); - Column.Type type = column.getType(); - switch (type) { - case LONG: - case DOUBLE: - case DATE: - case BOOL: - case BYTES: - if (column.getRawData() != null) { - fieldTypes.add(type); - ok = true; - } - break; - case STRING: - // 只有非null且非空的String列,才会被真的当作String类型。 - String value = column.asString(); - if (value != null && !"".equals(value)) { - fieldTypes.add(type); - ok = true; - } - break; - default: - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); - } - } - if (!ok) { - // 根据采样的%d条数据,无法推断第%d列的数据类型 - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, String.format(Msg.get("infer_column_type_error"), records.size(), i + 1)); - } - } - LOG.info("Field Types: {}", fieldTypes); - } - - /** - * 执行单表批量写入 - * - * @param tableName - * @throws SQLException - */ - private void executeBatch(String tableName) throws SQLException { - // 表名 - stmt.setTableName(tableName); - List records = buf.get(tableName); - // 标签 - String[] tagValues = tableTagValues.get(tableName); - LOG.debug("executeBatch {}", String.join(",", tagValues)); - for (int i = 0; i < tagValues.length; ++i) { - stmt.setTagNString(i, tagValues[i]); - } - // 时间戳 - ArrayList tsList = records.stream().map(r -> r.getColumn(tsColIndex).asDate().getTime()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setTimestamp(0, tsList); - // 字段 - for (int i = 0; i < fieldList.size(); ) { - String fieldName = fieldList.get(i); - int index = fieldIndexMap.get(fieldName); - switch (fieldTypes.get(i)) { - case LONG: - ArrayList lisLong = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setLong(++i, lisLong); - break; - case DOUBLE: - ArrayList lisDouble = records.stream().map(r -> r.getColumn(index).asDouble()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setDouble(++i, lisDouble); - break; - case STRING: - ArrayList lisString = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setNString(++i, lisString, 64); - break; - case DATE: - ArrayList lisTs = records.stream().map(r -> r.getColumn(index).asBigInteger().longValue()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setTimestamp(++i, lisTs); - break; - case BOOL: - ArrayList lisBool = records.stream().map(r -> r.getColumn(index).asBoolean()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setBoolean(++i, lisBool); - break; - case BYTES: - ArrayList lisBytes = records.stream().map(r -> r.getColumn(index).asString()).collect(Collectors.toCollection(ArrayList::new)); - stmt.setString(++i, lisBytes, 64); - break; - default: - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, fieldTypes.get(i).toString()); - } - } - // 执行 - stmt.columnDataAddBatch(); - stmt.columnDataExecuteBatch(); - // 更新计数器 - sucCount += records.size(); - } - - /** - * 把缓存的Record全部写入 - */ - public void flush() throws SQLException { - if (fieldTypes == null) { - List records = new ArrayList<>(); - for (List lis : buf.values()) { - records.addAll(lis); - if (records.size() > 100) { - break; - } - } - if (records.size() > 0) { - initFiledTypesAndTargetTable(records); - } else { - return; - } - } - for (String tabName : buf.keySet()) { - if (buf.get(tabName).size() > 0) { - executeBatch(tabName); - } - } - stmt.columnDataCloseBatch(); - } - - /** - * @return 成功写入的数据量 - */ - public long getCount() { - return sucCount; - } -} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java deleted file mode 100644 index 0aabe32a..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnection.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import java.util.Properties; - -public class JniConnection { - - private static final long JNI_NULL_POINTER = 0L; - private static final int JNI_SUCCESSFUL = 0; - public static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir"; - public static final String PROPERTY_KEY_LOCALE = "locale"; - public static final String PROPERTY_KEY_CHARSET = "charset"; - public static final String PROPERTY_KEY_TIME_ZONE = "timezone"; - - private long conn; - - static { - System.loadLibrary("taos"); - } - - public JniConnection(Properties props) throws Exception { - initImp(props.getProperty(PROPERTY_KEY_CONFIG_DIR, null)); - - String locale = props.getProperty(PROPERTY_KEY_LOCALE); - if (setOptions(0, locale) < 0) { - throw new Exception("Failed to set locale: " + locale + ". System default will be used."); - } - String charset = props.getProperty(PROPERTY_KEY_CHARSET); - if (setOptions(1, charset) < 0) { - throw new Exception("Failed to set charset: " + charset + ". System default will be used."); - } - String timezone = props.getProperty(PROPERTY_KEY_TIME_ZONE); - if (setOptions(2, timezone) < 0) { - throw new Exception("Failed to set timezone: " + timezone + ". System default will be used."); - } - } - - public void open(String host, int port, String dbname, String user, String password) throws Exception { - if (this.conn != JNI_NULL_POINTER) { - close(); - this.conn = JNI_NULL_POINTER; - } - - this.conn = connectImp(host, port, dbname, user, password); - if (this.conn == JNI_NULL_POINTER) { - String errMsg = getErrMsgImp(0); - throw new Exception(errMsg); - } - } - - public void insertOpentsdbJson(String json) throws Exception { - if (this.conn == JNI_NULL_POINTER) { - throw new Exception("JNI connection is NULL"); - } - - long result = insertOpentsdbJson(json, this.conn); - int errCode = getErrCodeImp(this.conn, result); - if (errCode != JNI_SUCCESSFUL) { - String errMsg = getErrMsgImp(result); - freeResultSetImp(this.conn, result); - throw new Exception(errMsg); - } - freeResultSetImp(this.conn, result); - } - - public void close() throws Exception { - int code = this.closeConnectionImp(this.conn); - if (code != 0) { - throw new Exception("JNI closeConnection failed"); - } - this.conn = JNI_NULL_POINTER; - } - - private static native void initImp(String configDir); - - private static native int setOptions(int optionIndex, String optionValue); - - private native long connectImp(String host, int port, String dbName, String user, String password); - - private native int getErrCodeImp(long connection, long pSql); - - private native String getErrMsgImp(long pSql); - - private native void freeResultSetImp(long connection, long pSql); - - private native int closeConnectionImp(long connection); - - private native long insertOpentsdbJson(String json, long pSql); - -} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index 7fb383e6..1d7ee214 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -1,14 +1,12 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; public class Key { - public static final String HOST = "host"; - public static final String PORT = "port"; - public static final String DBNAME = "dbName"; - public static final String USER = "username"; + public static final String USERNAME = "username"; public static final String PASSWORD = "password"; + public static final String CONNECTION = "connection"; public static final String BATCH_SIZE = "batchSize"; - public static final String STABLE = "stable"; - public static final String TAG_COLUMN = "tagColumn"; - public static final String FIELD_COLUMN = "fieldColumn"; - public static final String TIMESTAMP_COLUMN = "timestampColumn"; -} + public static final String TABLE = "table"; + public static final String JDBC_URL = "jdbcUrl"; + public static final String COLUMN = "column"; + public static final String IGNORE_TAGS_UNMATCHED = "ignoreTagsUnmatched"; +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java index e1b8f5dd..2fb5a98f 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java @@ -5,50 +5,50 @@ import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.taosdata.jdbc.SchemalessWriter; +import com.taosdata.jdbc.enums.SchemalessProtocolType; +import com.taosdata.jdbc.enums.SchemalessTimestampType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Properties; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; public class OpentsdbDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(OpentsdbDataHandler.class); - private static final String DEFAULT_BATCH_SIZE = "1"; + private SchemalessWriter writer; + + private String jdbcUrl; + private String user; + private String password; + int batchSize; + + public OpentsdbDataHandler(Configuration config) { + // opentsdb json protocol use JNI and schemaless API to write + this.jdbcUrl = config.getString(Key.JDBC_URL); + this.user = config.getString(Key.USERNAME, "root"); + this.password = config.getString(Key.PASSWORD, "taosdata"); + this.batchSize = config.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); + } @Override - public long handle(RecordReceiver lineReceiver, Properties properties, TaskPluginCollector collector) { - // opentsdb json protocol use JNI and schemaless API to write - String host = properties.getProperty(Key.HOST); - int port = Integer.parseInt(properties.getProperty(Key.PORT)); - String dbname = properties.getProperty(Key.DBNAME); - String user = properties.getProperty(Key.USER); - String password = properties.getProperty(Key.PASSWORD); - - JniConnection conn = null; - long count = 0; - try { - conn = new JniConnection(properties); - conn.open(host, port, dbname, user, password); - LOG.info("TDengine connection established, host: " + host + ", port: " + port + ", dbname: " + dbname + ", user: " + user); - int batchSize = Integer.parseInt(properties.getProperty(Key.BATCH_SIZE, DEFAULT_BATCH_SIZE)); - count = writeOpentsdb(lineReceiver, conn, batchSize); + public int handle(RecordReceiver lineReceiver, TaskPluginCollector collector) { + int count = 0; + try (Connection conn = DriverManager.getConnection(jdbcUrl, user, password);) { + LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + user + "] established."); + writer = new SchemalessWriter(conn); + count = write(lineReceiver, batchSize); } catch (Exception e) { - LOG.error(e.getMessage()); - e.printStackTrace(); - } finally { - try { - if (conn != null) - conn.close(); - } catch (Exception e) { - e.printStackTrace(); - } - LOG.info("TDengine connection closed"); + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); } return count; } - private long writeOpentsdb(RecordReceiver lineReceiver, JniConnection conn, int batchSize) { - long recordIndex = 1; + private int write(RecordReceiver lineReceiver, int batchSize) throws DataXException { + int recordIndex = 1; try { Record record; StringBuilder sb = new StringBuilder(); @@ -56,14 +56,14 @@ public class OpentsdbDataHandler implements DataHandler { if (batchSize == 1) { String jsonData = recordToString(record); LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); } else if (recordIndex % batchSize == 1) { sb.append("[").append(recordToString(record)).append(","); } else if (recordIndex % batchSize == 0) { sb.append(recordToString(record)).append("]"); String jsonData = sb.toString(); LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); sb.delete(0, sb.length()); } else { sb.append(recordToString(record)).append(","); @@ -72,11 +72,11 @@ public class OpentsdbDataHandler implements DataHandler { } if (sb.length() != 0 && sb.charAt(0) == '[') { String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); + System.err.println(jsonData); LOG.debug(">>> " + jsonData); - conn.insertOpentsdbJson(jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); } } catch (Exception e) { - LOG.error("TDengineWriter ERROR: " + e.getMessage()); throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); } return recordIndex - 1; diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index d67a6585..877b9b6d 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -1,9 +1,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.exception.DataXException; -import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,260 +10,163 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; -import java.util.stream.Collectors; public class SchemaManager { private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); - private String stable; // 目标超表名 - private Map fixedTagValue = new HashMap<>(); // 固定标签值 标签名 -> 标签值 - private Map tagIndexMap = new HashMap<>(); // 动态标签值 标签名 -> 列索引 - private Map fieldIndexMap = new HashMap<>(); // 字段名 -> 字段索引 - private String tsColName; // 时间戳列名 - private int tsColIndex = -1; // 时间戳列索引 - private List fieldList = new ArrayList<>(); - private List tagList = new ArrayList<>(); - private boolean canInferSchemaFromConfig = false; + private final Connection conn; + private TimestampPrecision precision; - - public SchemaManager() { + SchemaManager(Connection conn) { + this.conn = conn; } - public SchemaManager(Properties properties) { - getFromConfig(properties); - } + public TimestampPrecision loadDatabasePrecision() throws DataXException { + if (this.precision != null) + return this.precision; - private String mapDataxType(Column.Type type) { - switch (type) { - case LONG: - return "BIGINT"; - case DOUBLE: - return "DOUBLE"; - case STRING: - return "NCHAR(64)"; - case DATE: - return "TIMESTAMP"; - case BOOL: - return "BOOL"; - case BYTES: - return "BINARY(64)"; - default: - throw DataXException.asDataXException(TDengineWriterErrorCode.TYPE_ERROR, type.toString()); - } - } - - public void setStable(String stable) { - stable = stable; - } - - public String getStable() { - return stable; - } - - private void getFromConfig(Properties properties) { - stable = properties.getProperty(Key.STABLE); - if (stable == null) { - LOG.error("Config error: no stable"); - return; - } - for (Object key : properties.keySet()) { - String k = (String) key; - String v = properties.getProperty(k); - - String[] ps = k.split("\\."); - if (ps.length == 1) { - continue; - } - if (k.startsWith(Key.TAG_COLUMN)) { - String tagName = ps[1]; - try { - Integer tagIndex = Integer.parseInt(v); - this.tagIndexMap.put(tagName, tagIndex); - tagList.add(tagName); - } catch (NumberFormatException e) { - fixedTagValue.put(tagName, v); - tagList.add(tagName); - } - } else if (k.startsWith(Key.FIELD_COLUMN)) { - String fieldName = ps[1]; - Integer fileIndex = Integer.parseInt(v); - fieldIndexMap.put(fieldName, fileIndex); - } else if (k.startsWith(Key.TIMESTAMP_COLUMN)) { - tsColName = ps[1]; - tsColIndex = Integer.parseInt(v); - } - } - List sortedFieldName = fieldIndexMap.entrySet().stream().sorted((x, y) -> x.getValue().compareTo(y.getValue())).map(e -> e.getKey()).collect(Collectors.toList()); - fieldList.addAll(sortedFieldName); // 排序的目的是保证自动建表时列的顺序和输入数据的列的顺序保持一致 - canInferSchemaFromConfig = tsColIndex > -1 && !(fixedTagValue.isEmpty() && tagIndexMap.isEmpty()) && !fieldIndexMap.isEmpty(); - LOG.info("Config file parsed result:fixedTags=[{}] ,tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", fixedTagValue.keySet()), String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); - } - - public boolean shouldGuessSchema() { - return !canInferSchemaFromConfig; - } - - public boolean shouldCreateTable() { - return canInferSchemaFromConfig; - } - - public boolean configValid() { - boolean valid = (tagList.size() > 0 && fieldList.size() > 0 && tsColIndex > -1) || (tagList.size() == 0 && fieldList.size() == 0 && tsColIndex == -1); - if (!valid) { - LOG.error("Config error: tagColumn, fieldColumn and timestampColumn must be present together or absent together."); - } - return valid; - } - - /** - * 通过执行`describe dbname.stable`命令,获取表的schema.
- * describe命名返回有4列内容,分布是:Field,Type,Length,Note
- * - * @return 成功返回true,如果超表不存在或其他错误则返回false - */ - public boolean getFromDB(Connection conn) { - try { - List stables = getSTables(conn); - if (!stables.contains(stable)) { - LOG.error("super table {} not exist, fail to get schema from database.", stable); - return false; - } - } catch (SQLException e) { - LOG.error(e.getMessage()); - e.printStackTrace(); - return false; - } try (Statement stmt = conn.createStatement()) { - ResultSet rs = stmt.executeQuery("describe " + stable); - int colIndex = 0; + ResultSet rs = stmt.executeQuery("select database()"); + String dbname = null; while (rs.next()) { - String name = rs.getString(1); - String type = rs.getString(2); - String note = rs.getString(4); - if ("TIMESTAMP".equals(type)) { - tsColName = name; - tsColIndex = colIndex; - } else if ("TAG".equals(note)) { - tagIndexMap.put(name, colIndex); - tagList.add(name); - } else { - fieldIndexMap.put(name, colIndex); - fieldList.add(name); - } - colIndex++; + dbname = rs.getString("database()"); + } + if (dbname == null) + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, + "Database not specified or available"); + + rs = stmt.executeQuery("show databases"); + while (rs.next()) { + String name = rs.getString("name"); + if (!name.equalsIgnoreCase(dbname)) + continue; + String precision = rs.getString("precision"); + switch (precision) { + case "ns": + this.precision = TimestampPrecision.NANOSEC; + break; + case "us": + this.precision = TimestampPrecision.MICROSEC; + break; + case "ms": + default: + this.precision = TimestampPrecision.MILLISEC; + } } - LOG.info("table info:tags=[{}], fields=[{}], tsColName={}, tsIndex={}", String.join(",", tagIndexMap.keySet()), String.join(",", fieldList), tsColName, tsColIndex); - return true; } catch (SQLException e) { - LOG.error(e.getMessage()); - e.printStackTrace(); - return false; + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); } + return this.precision; } - public static List getSTables(Connection conn) throws SQLException { - List stables = new ArrayList<>(); + public Map loadTableMeta(List tables) throws DataXException { + Map tableMetas = new HashMap(); + try (Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery("show stables"); while (rs.next()) { - String name = rs.getString(1); - stables.add(name); + TableMeta tableMeta = buildSupTableMeta(rs); + if (!tables.contains(tableMeta.tbname)) + continue; + tableMetas.put(tableMeta.tbname, tableMeta); } - } - return stables; - } - public void createSTable(Connection conn, List fieldTypes) throws SQLException { - StringBuilder sb = new StringBuilder(); - sb.append("CREATE STABLE IF NOT EXISTS ").append(stable).append("("); - sb.append(tsColName).append(" ").append("TIMESTAMP,"); - for (int i = 0; i < fieldList.size(); ++i) { - String fieldName = fieldList.get(i); - Column.Type dxType = fieldTypes.get(i); - sb.append(fieldName).append(' '); - String tdType = mapDataxType(dxType); - sb.append(tdType).append(','); - } - sb.deleteCharAt(sb.length() - 1); - sb.append(") TAGS("); - for (String tagName : tagList) { - sb.append(tagName).append(" NCHAR(64),"); - } - sb.deleteCharAt(sb.length() - 1); - sb.append(")"); - String q = sb.toString(); - LOG.info("run sql:" + q); - try (Statement stmt = conn.createStatement()) { - stmt.execute(q); - } - } - - public String[] getTagValuesFromRecord(Record record) { - String[] tagValues = new String[tagList.size()]; - for (int i = 0; i < tagList.size(); ++i) { - if (fixedTagValue.containsKey(tagList.get(i))) { - tagValues[i] = fixedTagValue.get(tagList.get(i)); - } else { - int tagIndex = tagIndexMap.get(tagList.get(i)); - tagValues[i] = record.getColumn(tagIndex).asString(); + rs = stmt.executeQuery("show tables"); + while (rs.next()) { + TableMeta tableMeta = buildSubTableMeta(rs); + if (!tables.contains(tableMeta.tbname)) + continue; + tableMetas.put(tableMeta.tbname, tableMeta); } - if (tagValues[i] == null) { - return null; + + for (String tbname : tables) { + if (!tableMetas.containsKey(tbname)) { + LOG.error("table metadata of " + tbname + " is empty!"); + } } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); } - return tagValues; + return tableMetas; } - public boolean hasTimestamp(Record record) { - Column column = record.getColumn(tsColIndex); - if (column.getType() == Column.Type.DATE && column.asDate() != null) { - return true; - } else { - return false; + public Map> loadColumnMetas(List tables) throws DataXException { + Map> ret = new HashMap<>(); + + for (String table : tables) { + List columnMetaList = new ArrayList<>(); + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("describe " + table); + for (int i = 0; rs.next(); i++) { + ColumnMeta columnMeta = buildColumnMeta(rs, i == 0); + columnMetaList.add(columnMeta); + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + + if (columnMetaList.isEmpty()) { + LOG.error("column metadata of " + table + " is empty!"); + continue; + } + + columnMetaList.stream().filter(colMeta -> colMeta.isTag).forEach(colMeta -> { + String sql = "select " + colMeta.field + " from " + table; + Object value = null; + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery(sql); + for (int i = 0; rs.next(); i++) { + value = rs.getObject(colMeta.field); + if (i > 0) { + value = null; + break; + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + colMeta.value = value; + }); + + LOG.debug("load column metadata of " + table + ": " + Arrays.toString(columnMetaList.toArray())); + ret.put(table, columnMetaList); } + return ret; } - public Map getFieldIndexMap() { - return fieldIndexMap; + private TableMeta buildSupTableMeta(ResultSet rs) throws SQLException { + TableMeta tableMeta = new TableMeta(); + tableMeta.tableType = TableType.SUP_TABLE; + tableMeta.tbname = rs.getString("name"); + tableMeta.columns = rs.getInt("columns"); + tableMeta.tags = rs.getInt("tags"); + tableMeta.tables = rs.getInt("tables"); + + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + return tableMeta; } - public List getFieldList() { - return fieldList; + private TableMeta buildSubTableMeta(ResultSet rs) throws SQLException { + TableMeta tableMeta = new TableMeta(); + String stable_name = rs.getString("stable_name"); + tableMeta.tableType = StringUtils.isBlank(stable_name) ? TableType.NML_TABLE : TableType.SUB_TABLE; + tableMeta.tbname = rs.getString("table_name"); + tableMeta.columns = rs.getInt("columns"); + tableMeta.stable_name = StringUtils.isBlank(stable_name) ? null : stable_name; + + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + return tableMeta; } - public String getJoinedFieldNames() { - return tsColName + ", " + String.join(", ", fieldList); + private ColumnMeta buildColumnMeta(ResultSet rs, boolean isPrimaryKey) throws SQLException { + ColumnMeta columnMeta = new ColumnMeta(); + columnMeta.field = rs.getString("Field"); + columnMeta.type = rs.getString("Type"); + columnMeta.length = rs.getInt("Length"); + columnMeta.note = rs.getString("Note"); + columnMeta.isTag = columnMeta.note != null && columnMeta.note.equals("TAG"); + columnMeta.isPrimaryKey = isPrimaryKey; + return columnMeta; } - public int getTsColIndex() { - return tsColIndex; - } - - public String getTagValuesPlaceHolder() { - return tagList.stream().map(x -> "?").collect(Collectors.joining(",")); - } - - public String getFieldValuesPlaceHolder() { - return "?, " + fieldList.stream().map(x -> "?").collect(Collectors.joining(", ")); - } - - /** - * 计算子表表名 - *

    - *
  1. 将标签的value 组合成为如下的字符串: tag_value1!tag_value2!tag_value3。
  2. - *
  3. 计算该字符串的 MD5 散列值 "md5_val"。
  4. - *
  5. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。
  6. - *
- * - * @param tagValues - * @return - */ - public String computeTableName(String[] tagValues) { - String s = String.join("!", tagValues); - return "t_" + DigestUtils.md5Hex(s); - } - - public int getDynamicTagCount() { - return tagIndexMap.size(); - } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java index 79e5238c..7cc76a77 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -1,37 +1,56 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; - +import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -import java.util.Properties; -import java.util.Set; public class TDengineWriter extends Writer { private static final String PEER_PLUGIN_NAME = "peerPluginName"; - static { - try { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - public static class Job extends Writer.Job { private Configuration originalConfig; + private static final Logger LOG = LoggerFactory.getLogger(Job.class); @Override public void init() { this.originalConfig = super.getPluginJobConf(); this.originalConfig.set(PEER_PLUGIN_NAME, getPeerPluginName()); + + // check user + String user = this.originalConfig.getString(Key.USERNAME); + if (StringUtils.isBlank(user)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.USERNAME + "] is not set."); + + // check password + String password = this.originalConfig.getString(Key.PASSWORD); + if (StringUtils.isBlank(password)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.PASSWORD + "] is not set."); + + // check connection + List connection = this.originalConfig.getList(Key.CONNECTION); + if (connection == null || connection.isEmpty()) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.CONNECTION + "] is not set."); + if (connection.size() > 1) + LOG.warn("connection.size is " + connection.size() + " and only connection[0] will be used."); + Configuration conn = Configuration.from(connection.get(0).toString()); + String jdbcUrl = conn.getString(Key.JDBC_URL); + if (StringUtils.isBlank(jdbcUrl)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.JDBC_URL + "] of connection is not set."); + + // check column } @Override @@ -42,22 +61,30 @@ public class TDengineWriter extends Writer { @Override public List split(int mandatoryNumber) { List writerSplitConfigs = new ArrayList<>(); + + List conns = this.originalConfig.getList(Key.CONNECTION); for (int i = 0; i < mandatoryNumber; i++) { - writerSplitConfigs.add(this.originalConfig); + Configuration clone = this.originalConfig.clone(); + Configuration conf = Configuration.from(conns.get(0).toString()); + String jdbcUrl = conf.getString(Key.JDBC_URL); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conf.getList(Key.TABLE)); + clone.remove(Key.CONNECTION); + writerSplitConfigs.add(clone); } + return writerSplitConfigs; } } public static class Task extends Writer.Task { - private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private static final Logger LOG = LoggerFactory.getLogger(Task.class); private Configuration writerSliceConfig; @Override public void init() { this.writerSliceConfig = getPluginJobConf(); - } @Override @@ -67,23 +94,16 @@ public class TDengineWriter extends Writer { @Override public void startWrite(RecordReceiver lineReceiver) { - Set keys = this.writerSliceConfig.getKeys(); - Properties properties = new Properties(); - for (String key : keys) { - String value = this.writerSliceConfig.getString(key); - properties.setProperty(key, value); - } - if (!keys.contains(Key.USER)) { - properties.setProperty(Key.USER, "root"); - } - if (!keys.contains(Key.PASSWORD)) { - properties.setProperty(Key.PASSWORD, "taosdata"); - } - LOG.debug("========================properties==========================\n" + properties); String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); LOG.debug("start to handle record from: " + peerPluginName); - DataHandler handler = DataHandlerFactory.build(peerPluginName); - long records = handler.handle(lineReceiver, properties, getTaskPluginCollector()); + + DataHandler handler; + if (peerPluginName.equals("opentsdbreader")) + handler = new OpentsdbDataHandler(this.writerSliceConfig); + else + handler = new DefaultDataHandler(this.writerSliceConfig); + + long records = handler.handle(lineReceiver, getTaskPluginCollector()); LOG.debug("handle data finished, records: " + records); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java index 994f1e89..469449e6 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -3,13 +3,16 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.spi.ErrorCode; public enum TDengineWriterErrorCode implements ErrorCode { - RUNTIME_EXCEPTION("TDengineWriter-00", "运行时异常"), - TYPE_ERROR("TDengineWriter-00", "Datax类型无法正确映射到TDengine类型"); + + REQUIRED_VALUE("TDengineWriter-00", "缺失必要的值"), + ILLEGAL_VALUE("TDengineWriter-01", "值非法"), + RUNTIME_EXCEPTION("TDengineWriter-02", "运行时异常"), + TYPE_ERROR("TDengineWriter-03", "Datax类型无法正确映射到TDengine类型"); private final String code; private final String description; - private TDengineWriterErrorCode(String code, String description) { + TDengineWriterErrorCode(String code, String description) { this.code = code; this.description = description; } @@ -26,7 +29,6 @@ public enum TDengineWriterErrorCode implements ErrorCode { @Override public String toString() { - return String.format("Code:[%s], Description:[%s]. ", this.code, - this.description); + return String.format("Code:[%s], Description:[%s]. ", this.code, this.description); } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java new file mode 100644 index 00000000..2a6b0536 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java @@ -0,0 +1,22 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class TableMeta { + TableType tableType; + String tbname; + int columns; + int tags; + int tables; + String stable_name; + + @Override + public String toString() { + return "TableMeta{" + + "tableType=" + tableType + + ", tbname='" + tbname + '\'' + + ", columns=" + columns + + ", tags=" + tags + + ", tables=" + tables + + ", stable_name='" + stable_name + '\'' + + '}'; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java new file mode 100644 index 00000000..6c97ac3f --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public enum TableType { + SUP_TABLE, SUB_TABLE, NML_TABLE +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java new file mode 100644 index 00000000..46564d6a --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public enum TimestampPrecision { + MILLISEC, MICROSEC, NANOSEC +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h deleted file mode 100644 index 4bdf3639..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/com_alibaba_datax_plugin_writer_tdenginewriter_JniConnection.h +++ /dev/null @@ -1,105 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_alibaba_datax_plugin_writer_JniConnection */ - -#ifndef _Included_com_alibaba_datax_plugin_writer_JniConnection -#define _Included_com_alibaba_datax_plugin_writer_JniConnection -#ifdef __cplusplus -extern "C" { -#endif -#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER -#define com_alibaba_datax_plugin_writer_JniConnection_JNI_NULL_POINTER 0LL -#undef com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL -#define com_alibaba_datax_plugin_writer_JniConnection_JNI_SUCCESSFUL 0L -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: initImp - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_initImp - (JNIEnv *, jclass, jstring); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: setOptions - * Signature: (ILjava/lang/String;)I - */ -JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_setOptions - (JNIEnv *, jclass, jint, jstring); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: getTsCharset - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getTsCharset - (JNIEnv *, jclass); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: connectImp - * Signature: (Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)J - */ -JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_connectImp - (JNIEnv *, jobject, jstring, jint, jstring, jstring, jstring); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: executeQueryImp - * Signature: ([BJ)J - */ -JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_executeQueryImp - (JNIEnv *, jobject, jbyteArray, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: getErrCodeImp - * Signature: (JJ)I - */ -JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrCodeImp - (JNIEnv *, jobject, jlong, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: getErrMsgImp - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgImp - (JNIEnv *, jobject, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: getErrMsgByCode - * Signature: (J)Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getErrMsgByCode - (JNIEnv *, jobject, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: getAffectedRowsImp - * Signature: (JJ)I - */ -JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_getAffectedRowsImp - (JNIEnv *, jobject, jlong, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: closeConnectionImp - * Signature: (J)I - */ -JNIEXPORT jint JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_closeConnectionImp - (JNIEnv *, jobject, jlong); - -/* - * Class: com_alibaba_datax_plugin_writer_JniConnection - * Method: insertOpentsdbJson - * Signature: (Ljava/lang/String;J)J - */ -JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_insertOpentsdbJson - (JNIEnv *, jobject, jstring, jlong); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java new file mode 100644 index 00000000..733698a7 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -0,0 +1,235 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.LongColumn; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.core.transport.record.DefaultRecord; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class DefaultDataHandlerTest { + + private static final String host = "192.168.56.105"; + private static Connection conn; + + @Test + public void writeSupTableBySQL() { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + (i + 10))); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSupTableBySQL_2() { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + (i + 10))); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSubTableWithTableName() { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"tb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + i)); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(1, count); + } + + @Test + public void writeSubTableWithoutTableName() { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"tb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"," + + "\"ignoreTagsUnmatched\": \"true\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(1, count); + } + + @Test + public void writeNormalTable() { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"weather\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"," + + "\"ignoreTagsUnmatched\": \"true\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); + stmt.execute("create table stb2(ts timestamp, f1 int, f2 int, f3 int) tags(t1 int, t2 int)"); + stmt.execute("create table tb1 using stb1 tags(1)"); + stmt.execute("create table tb2 using stb1 tags(2)"); + stmt.execute("create table tb3 using stb2 tags(1,1)"); + stmt.execute("create table tb4 using stb2 tags(2,2)"); + stmt.execute("create table weather(ts timestamp, f1 int, f2 int, f3 int, t1 int, t2 int)"); + } + } + + @AfterClass + public static void afterClass() throws SQLException { + if (conn != null) { + conn.close(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java new file mode 100644 index 00000000..48baad1d --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java @@ -0,0 +1,85 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.LongColumn; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.core.transport.record.DefaultRecord; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class DefaultDataHandlerTest2 { + + private static final String host = "192.168.1.93"; + private static Connection conn; + + @Test + public void writeSupTableBySchemaless() throws SQLException { + // given + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS://" + host + ":6030/scm_test\"," + + "\"batchSize\": \"1000\"" + + "}"); + + String jdbcUrl = configuration.getString("jdbcUrl"); + Connection connection = DriverManager.getConnection(jdbcUrl, "root", "taosdata"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new StringColumn("t" + i + " 22")); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(connection); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(connection, recordList); + + // then + Assert.assertEquals(10, count); + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); + } + } + + @AfterClass + public static void afterClass() throws SQLException { + if (conn != null) { + conn.close(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java new file mode 100644 index 00000000..985c8047 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java @@ -0,0 +1,65 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Assert; +import org.junit.Test; + +import java.sql.*; + +public class EngineTest { + + @Test + public void opentsdb2tdengine() throws SQLException { + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/opentsdb2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + + // assert + String jdbcUrl = "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP"; + try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("select count(*) from weather_temperature"); + int rows = 0; + while (rs.next()) { + rows = rs.getInt("count(*)"); + } + Assert.assertEquals(5, rows); + stmt.close(); + } + } + + @Test + public void mysql2tdengine() { + // given + // MYSQL SQL: + // create table t(id int primary key AUTO_INCREMENT, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double,ts timestamp, dt datetime,f7 nchar(64)) + // insert into t(f1,f2,f3,f4,f5,f6,ts,dt,f7) values(1,2,3,4,5,6,'2022-01-28 12:00:00','2022-01-28 12:00:00', 'beijing'); + // TDengine SQL: + // create table t(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double, dt timestamp,f7 nchar(64)); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/mysql2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + } + + @Test + public void tdengine2tdengine() { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/tdengine2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + } +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java deleted file mode 100644 index 09c3df26..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/JniConnectionTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import org.junit.Test; - -import java.util.Properties; - -public class JniConnectionTest { - - @Test - public void test() throws Exception { - JniConnection connection = new JniConnection(new Properties()); - - connection.open("192.168.56.105", 6030, "test", "root", "taosdata"); - - String json = "{\"metric\":\"weather_temperature\",\"timestamp\":1609430400000,\"value\":123,\"tags\":{\"location\":\"beijing\",\"id\":\"t123\"}}"; - connection.insertOpentsdbJson(json); - - connection.close(); - } - -} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java new file mode 100644 index 00000000..6df0de1d --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java @@ -0,0 +1,88 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.fastjson.util.TypeUtils; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class SchemaManagerTest { + + private static Connection conn; + + @Test + public void loadTableMeta() throws SQLException { + // given + SchemaManager schemaManager = new SchemaManager(conn); + List tables = Arrays.asList("stb1", "stb2", "tb1", "tb3", "weather"); + + // when + Map tableMetaMap = schemaManager.loadTableMeta(tables); + + // then + TableMeta stb1 = tableMetaMap.get("stb1"); + Assert.assertEquals(TableType.SUP_TABLE, stb1.tableType); + Assert.assertEquals("stb1", stb1.tbname); + Assert.assertEquals(3, stb1.columns); + Assert.assertEquals(1, stb1.tags); + Assert.assertEquals(2, stb1.tables); + + TableMeta tb3 = tableMetaMap.get("tb3"); + Assert.assertEquals(TableType.SUB_TABLE, tb3.tableType); + Assert.assertEquals("tb3", tb3.tbname); + Assert.assertEquals(4, tb3.columns); + Assert.assertEquals("stb2", tb3.stable_name); + + TableMeta weather = tableMetaMap.get("weather"); + Assert.assertEquals(TableType.NML_TABLE, weather.tableType); + Assert.assertEquals("weather", weather.tbname); + Assert.assertEquals(6, weather.columns); + Assert.assertNull(weather.stable_name); + } + + @Test + public void loadColumnMetas() { + // given + SchemaManager schemaManager = new SchemaManager(conn); + List tables = Arrays.asList("stb1", "stb2", "tb1", "tb3", "weather"); + + // when + Map> columnMetaMap = schemaManager.loadColumnMetas(tables); + + // then + List stb1 = columnMetaMap.get("stb1"); + Assert.assertEquals(4, stb1.size()); + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://192.168.56.105:6041", "root", "taosdata"); + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 int)"); + stmt.execute("create table stb2(ts timestamp, f1 int, f2 int, f3 int) tags(t1 int, t2 int)"); + stmt.execute("insert into tb1 using stb1 tags(1) values(now, 1, 2)"); + stmt.execute("insert into tb2 using stb1 tags(2) values(now, 1, 2)"); + stmt.execute("insert into tb3 using stb2 tags(1,1) values(now, 1, 2, 3)"); + stmt.execute("insert into tb4 using stb2 tags(2,2) values(now, 1, 2, 3)"); + stmt.execute("create table weather(ts timestamp, f1 int, f2 int, f3 int, t1 int, t2 int)"); + } + } + + @AfterClass + public static void afterClass() throws SQLException { + if (conn != null) { + conn.close(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java index 62bf7040..813f6131 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java @@ -1,31 +1,62 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; +import com.alibaba.datax.common.util.Configuration; +import org.junit.Assert; +import org.junit.Before; import org.junit.Test; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; +import java.util.List; public class TDengineWriterTest { + TDengineWriter.Job job; - @Test - public void testGetSchema() throws ClassNotFoundException, SQLException { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); - Connection conn = DriverManager.getConnection(jdbcUrl); - SchemaManager schemaManager = new SchemaManager(); - schemaManager.setStable("test1"); - schemaManager.getFromDB(conn); + @Before + public void before() { + job = new TDengineWriter.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"batchSize\": \"1000\"" + + "}"); + job.setPluginJobConf(configuration); } @Test - public void dropTestTable() throws ClassNotFoundException, SQLException { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - String jdbcUrl = String.format("jdbc:TAOS://%s:%s/%s?user=%s&password=%s", "wozai.fun", "6030", "test", "root", "taosdata"); - Connection conn = DriverManager.getConnection(jdbcUrl); - Statement stmt = conn.createStatement(); - stmt.execute("drop table market_snapshot"); + public void jobInit() { + // when + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + Assert.assertEquals(new Integer(1000), conf.getInt("batchSize")); + Assert.assertEquals("ts", conf.getString("column[0]")); + Assert.assertEquals("f2", conf.getString("column[2]")); } -} + + @Test + public void jobSplit() { + // when + job.init(); + List configurationList = job.split(10); + + // assert + Assert.assertEquals(10, configurationList.size()); + for (Configuration conf : configurationList) { + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + Assert.assertEquals(new Integer(1000), conf.getInt("batchSize")); + Assert.assertEquals("ts", conf.getString("column[0]")); + Assert.assertEquals("f2", conf.getString("column[2]")); + + } + } + +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/mysql2tdengine.json b/tdenginewriter/src/test/resources/mysql2tdengine.json new file mode 100644 index 00000000..38485533 --- /dev/null +++ b/tdenginewriter/src/test/resources/mysql2tdengine.json @@ -0,0 +1,57 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "123456", + "column": [ + "*" + ], + "splitPk": "id", + "connection": [ + { + "table": [ + "t" + ], + "jdbcUrl": [ + "jdbc:mysql://192.168.56.105:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "t1" + ], + "connection": [ + { + "table": [ + "st" + ], + "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/opentsdb2tdengine.json b/tdenginewriter/src/test/resources/opentsdb2tdengine.json new file mode 100644 index 00000000..11264c98 --- /dev/null +++ b/tdenginewriter/src/test/resources/opentsdb2tdengine.json @@ -0,0 +1,36 @@ +{ + "job":{ + "content":[{ + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.56.105:4242", + "column": ["weather_temperature"], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000 + } + } + }], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/tdengine2tdengine.json b/tdenginewriter/src/test/resources/tdengine2tdengine.json new file mode 100644 index 00000000..f0d0092d --- /dev/null +++ b/tdenginewriter/src/test/resources/tdengine2tdengine.json @@ -0,0 +1,51 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "current", + "voltage", + "phase", + "groupid", + "location" + ], + "beginDateTime": "2017-07-14 10:40:00", + "endDateTime": "2017-08-14 10:40:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "host": "192.168.56.105", + "port": 6030, + "dbName": "test2", + "username": "root", + "password": "taosdata", + "batchSize": 1000, + "stable": "meters" + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file From 0554bd1bea980c1b19bb19a1a32074027eff5f3b Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 14 Feb 2022 19:23:20 +0800 Subject: [PATCH 143/251] change the linking charactor of stream load label --- .../starrockswriter/manager/StarRocksWriterManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index c28c8647..40acbd74 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -24,7 +24,7 @@ public class StarRocksWriterManager { private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; private final StarRocksWriterOptions writerOptions; - private static final String UNDERSCORE = "_"; + private static final String DOT = "."; private final List buffer = new ArrayList<>(); private int batchCount = 0; @@ -123,12 +123,12 @@ public class StarRocksWriterManager { public String createBatchLabel() { StringBuilder sb = new StringBuilder(); if (!Strings.isNullOrEmpty(writerOptions.getLabelPrefix())) { - sb.append(writerOptions.getLabelPrefix()).append(UNDERSCORE); + sb.append(writerOptions.getLabelPrefix()).append(DOT); } return sb.append(writerOptions.getDatabase()) - .append(UNDERSCORE) + .append(DOT) .append(writerOptions.getTable()) - .append(UNDERSCORE) + .append(DOT) .append(UUID.randomUUID().toString()) .toString(); } From 721ed5136dd3d71c8de83ba4b40d60b56b5114b5 Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 14 Feb 2022 20:15:14 +0800 Subject: [PATCH 144/251] change the link charactor of the stream load label --- .../starrockswriter/manager/StarRocksWriterManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index 40acbd74..405b248b 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -24,7 +24,7 @@ public class StarRocksWriterManager { private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; private final StarRocksWriterOptions writerOptions; - private static final String DOT = "."; + private static final String HYPHEN = "-"; private final List buffer = new ArrayList<>(); private int batchCount = 0; @@ -123,12 +123,12 @@ public class StarRocksWriterManager { public String createBatchLabel() { StringBuilder sb = new StringBuilder(); if (!Strings.isNullOrEmpty(writerOptions.getLabelPrefix())) { - sb.append(writerOptions.getLabelPrefix()).append(DOT); + sb.append(writerOptions.getLabelPrefix()).append(HYPHEN); } return sb.append(writerOptions.getDatabase()) - .append(DOT) + .append(HYPHEN) .append(writerOptions.getTable()) - .append(DOT) + .append(HYPHEN) .append(UUID.randomUUID().toString()) .toString(); } From 67dd21edfee646ac6fbfae0d15b3a03fd6926ea4 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 16 Feb 2022 10:06:06 +0800 Subject: [PATCH 145/251] change --- tdenginewriter/pom.xml | 14 ++- .../writer/tdenginewriter/DataHandler.java | 1 - .../tdenginewriter/DefaultDataHandler.java | 54 ++++++++--- .../plugin/writer/tdenginewriter/Msg.java | 20 ---- .../writer/tdenginewriter/SchemaManager.java | 2 +- tdenginewriter/src/main/resources/plugin.json | 4 +- .../main/resources/plugin_job_template.json | 40 ++++---- .../resources/tdenginewritermsg.properties | 6 -- .../tdenginewritermsg_en_US.properties | 6 -- .../tdenginewritermsg_zh_CN.properties | 6 -- .../DefaultDataHandlerTest2.java | 2 + .../writer/tdenginewriter/EngineTest.java | 65 ------------- .../writer/tdenginewriter/MessageTest.java | 25 ----- .../tdenginewriter/Mysql2TDengineTest.java | 70 ++++++++++++++ .../tdenginewriter/Opentsdb2TDengineTest.java | 36 +++++++ .../tdenginewriter/Rdbms2TDengineTest.java | 4 + .../tdenginewriter/TDengine2TDengineTest.java | 68 ++++++++++++++ .../TDengine2TDengineTest3.java | 62 ++++++++++++ .../TDengine2TDengineTest4.java | 57 +++++++++++ .../{mysql2tdengine.json => m2t-1.json} | 27 ++++-- tdenginewriter/src/test/resources/t2t-1.json | 94 +++++++++++++++++++ tdenginewriter/src/test/resources/t2t-2.json | 92 ++++++++++++++++++ tdenginewriter/src/test/resources/t2t-3.json | 92 ++++++++++++++++++ tdenginewriter/src/test/resources/t2t-4.json | 72 ++++++++++++++ .../src/test/resources/tdengine2tdengine.json | 51 ---------- 25 files changed, 743 insertions(+), 227 deletions(-) delete mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java delete mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg.properties delete mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties delete mode 100644 tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java rename tdenginewriter/src/test/resources/{mysql2tdengine.json => m2t-1.json} (63%) create mode 100644 tdenginewriter/src/test/resources/t2t-1.json create mode 100644 tdenginewriter/src/test/resources/t2t-2.json create mode 100644 tdenginewriter/src/test/resources/t2t-3.json create mode 100644 tdenginewriter/src/test/resources/t2t-4.json delete mode 100644 tdenginewriter/src/test/resources/tdengine2tdengine.json diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 720ecbb8..459ad0b7 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -38,6 +38,12 @@ + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + + com.alibaba.datax datax-common @@ -63,10 +69,12 @@ test - org.apache.commons - commons-lang3 - ${commons-lang3-version} + mysql + mysql-connector-java + 5.1.49 + test + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java index 7afcb080..f22d4d6c 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -4,6 +4,5 @@ import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; public interface DataHandler { - int handle(RecordReceiver lineReceiver, TaskPluginCollector collector); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 16be4c90..addda9cf 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -14,10 +14,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.*; -import java.util.ArrayList; +import java.util.*; import java.util.Date; -import java.util.List; -import java.util.Map; import java.util.stream.Collectors; public class DefaultDataHandler implements DataHandler { @@ -83,6 +81,11 @@ public class DefaultDataHandler implements DataHandler { } count++; } + + if (!recordBatch.isEmpty()) { + affectedRows = writeBatch(conn, recordBatch); + recordBatch.clear(); + } } catch (SQLException e) { throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); } @@ -302,15 +305,6 @@ public class DefaultDataHandler implements DataHandler { if (colMeta.type.equals("TIMESTAMP")) return dateAsLong(column) + "i64"; return "L'" + column.asString() + "'"; - case BYTES: - case STRING: - if (colMeta.type.equals("TIMESTAMP")) - return column.asString() + "i64"; - String value = column.asString(); - if (colMeta.type.startsWith("BINARY")) - return "'" + Utils.escapeSingleQuota(value) + "'"; - if (colMeta.type.startsWith("NCHAR")) - return "L'" + Utils.escapeSingleQuota(value) + "'"; case NULL: case BAD: return "NULL"; @@ -331,6 +325,16 @@ public class DefaultDataHandler implements DataHandler { if (colMeta.type.equals("BIGINT")) return column.asString() + "i64"; } + case BYTES: + case STRING: + if (colMeta.type.equals("TIMESTAMP")) + return column.asString() + "i64"; + String value = column.asString(); + value = value.replace("\"", "\\\""); + if (colMeta.type.startsWith("BINARY")) + return "\"" + value + "\""; + if (colMeta.type.startsWith("NCHAR")) + return "L\"" + value + "\""; case BOOL: default: return column.asString(); @@ -363,7 +367,9 @@ public class DefaultDataHandler implements DataHandler { boolean tagsAllMatch = columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { return colMeta.isTag; }).allMatch(colMeta -> { - return record.getColumn(indexOf(colMeta.field)).asString().equals(colMeta.value.toString()); + Column column = record.getColumn(indexOf(colMeta.field)); + boolean equals = equals(column, colMeta); + return equals; }); if (ignoreTagsUnmatched && !tagsAllMatch) @@ -386,6 +392,28 @@ public class DefaultDataHandler implements DataHandler { return executeUpdate(conn, sql); } + private boolean equals(Column column, ColumnMeta colMeta) { + switch (column.getType()) { + case BOOL: + return column.asBoolean().equals(Boolean.valueOf(colMeta.value.toString())); + case INT: + case LONG: + return column.asLong().equals(Long.valueOf(colMeta.value.toString())); + case DOUBLE: + return column.asDouble().equals(Double.valueOf(colMeta.value.toString())); + case NULL: + return colMeta.value == null; + case DATE: + return column.asDate().getTime() == ((Timestamp) colMeta.value).getTime(); + case BAD: + case BYTES: + return Arrays.equals(column.asBytes(), (byte[]) colMeta.value); + case STRING: + default: + return column.asString().equals(colMeta.value.toString()); + } + } + /** * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java deleted file mode 100644 index 89730d35..00000000 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Msg.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import java.util.Locale; -import java.util.ResourceBundle; - -/** - * i18n message util - */ -public class Msg { - private static ResourceBundle bundle; - - static { - bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); - } - - public static String get(String key) { - return bundle.getString(key); - } - -} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index 877b9b6d..63d67a2a 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -81,7 +81,7 @@ public class SchemaManager { for (String tbname : tables) { if (!tableMetas.containsKey(tbname)) { - LOG.error("table metadata of " + tbname + " is empty!"); + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, "table metadata of " + tbname + " is empty!"); } } } catch (SQLException e) { diff --git a/tdenginewriter/src/main/resources/plugin.json b/tdenginewriter/src/main/resources/plugin.json index e54f65ff..10d8e2cf 100644 --- a/tdenginewriter/src/main/resources/plugin.json +++ b/tdenginewriter/src/main/resources/plugin.json @@ -3,7 +3,7 @@ "class": "com.alibaba.datax.plugin.writer.tdenginewriter.TDengineWriter", "description": { "useScene": "data migration to tdengine", - "mechanism": "use JNI or taos-jdbc to write data to tdengine." + "mechanism": "use taos-jdbcdriver to write data." }, - "developer": "zyyang-taosdata" + "developer": "support@taosdata.com" } \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json index 39c9c969..3d303305 100644 --- a/tdenginewriter/src/main/resources/plugin_job_template.json +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -1,24 +1,20 @@ { - "name": "tdenginewriter", - "parameter": { - "host": "127.0.0.1", - "port": 6030, - "dbname": "test", - "user": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "weather", - "tagColumn": { - "station": 0 - }, - "fieldColumn": { - "latitude": 1, - "longtitude": 2, - "tmax": 4, - "tmin": 5 - }, - "timestampColumn":{ - "date": 3 - } - } + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "" + ], + "connection": [ + { + "table": [ + "" + ], + "jdbcUrl": "" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } } \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg.properties b/tdenginewriter/src/main/resources/tdenginewritermsg.properties deleted file mode 100644 index 48d862e7..00000000 --- a/tdenginewriter/src/main/resources/tdenginewritermsg.properties +++ /dev/null @@ -1,6 +0,0 @@ -try_get_schema_from_db=fail to get structure info of target table from configure file and will try to get it from database -batch_size_too_small='batchSize' is too small, please increase it and try again -column_number_error=number of columns is less than expected -tag_value_error=tag columns include 'null' value -ts_value_error=timestamp column type error or null -infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties deleted file mode 100644 index 48d862e7..00000000 --- a/tdenginewriter/src/main/resources/tdenginewritermsg_en_US.properties +++ /dev/null @@ -1,6 +0,0 @@ -try_get_schema_from_db=fail to get structure info of target table from configure file and will try to get it from database -batch_size_too_small='batchSize' is too small, please increase it and try again -column_number_error=number of columns is less than expected -tag_value_error=tag columns include 'null' value -ts_value_error=timestamp column type error or null -infer_column_type_error=fail to infer column type: sample count %d, column index %d \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties b/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties deleted file mode 100644 index 38d2cbb6..00000000 --- a/tdenginewriter/src/main/resources/tdenginewritermsg_zh_CN.properties +++ /dev/null @@ -1,6 +0,0 @@ -try_get_schema_from_db=\u65e0\u6cd5\u4ece\u914d\u7f6e\u6587\u4ef6\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\uff0c\u5c1d\u8bd5\u4ece\u6570\u636e\u5e93\u83b7\u53d6 -batch_size_too_small=batchSize\u592a\u5c0f\uff0c\u4f1a\u589e\u52a0\u81ea\u52a8\u7c7b\u578b\u63a8\u65ad\u9519\u8bef\u7684\u6982\u7387\uff0c\u5efa\u8bae\u6539\u5927\u540e\u91cd\u8bd5 -column_number_error=\u5b9e\u9645\u5217\u6570\u5c0f\u4e8e\u671f\u671b\u5217\u6570 -tag_value_error=\u6807\u7b7e\u5217\u5305\u542bnull -ts_value_error=\u65f6\u95f4\u6233\u5217\u4e3anull\u6216\u7c7b\u578b\u9519\u8bef -infer_column_type_error=\u6839\u636e\u91c7\u6837\u7684%d\u6761\u6570\u636e\uff0c\u65e0\u6cd5\u63a8\u65ad\u7b2c%d\u5217\u7684\u6570\u636e\u7c7b\u578b diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java index 48baad1d..1ed32d63 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java @@ -27,6 +27,8 @@ public class DefaultDataHandlerTest2 { @Test public void writeSupTableBySchemaless() throws SQLException { + + // given Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java deleted file mode 100644 index 985c8047..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/EngineTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import com.alibaba.datax.core.Engine; -import org.junit.Assert; -import org.junit.Test; - -import java.sql.*; - -public class EngineTest { - - @Test - public void opentsdb2tdengine() throws SQLException { - // when - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/opentsdb2tdengine.json"}; - System.setProperty("datax.home", "../target/datax/datax"); - try { - Engine.entry(params); - } catch (Throwable e) { - e.printStackTrace(); - } - - // assert - String jdbcUrl = "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP"; - try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - ResultSet rs = stmt.executeQuery("select count(*) from weather_temperature"); - int rows = 0; - while (rs.next()) { - rows = rs.getInt("count(*)"); - } - Assert.assertEquals(5, rows); - stmt.close(); - } - } - - @Test - public void mysql2tdengine() { - // given - // MYSQL SQL: - // create table t(id int primary key AUTO_INCREMENT, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double,ts timestamp, dt datetime,f7 nchar(64)) - // insert into t(f1,f2,f3,f4,f5,f6,ts,dt,f7) values(1,2,3,4,5,6,'2022-01-28 12:00:00','2022-01-28 12:00:00', 'beijing'); - // TDengine SQL: - // create table t(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double, dt timestamp,f7 nchar(64)); - - // when - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/mysql2tdengine.json"}; - System.setProperty("datax.home", "../target/datax/datax"); - try { - Engine.entry(params); - } catch (Throwable e) { - e.printStackTrace(); - } - } - - @Test - public void tdengine2tdengine() { - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/tdengine2tdengine.json"}; - System.setProperty("datax.home", "../target/datax/datax"); - try { - Engine.entry(params); - } catch (Throwable e) { - e.printStackTrace(); - } - } -} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java deleted file mode 100644 index b1b7ddd8..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/MessageTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import org.junit.Test; - -import java.util.Locale; -import java.util.ResourceBundle; - -import org.junit.Assert; - -public class MessageTest { - @Test - public void testChineseMessage() { - Locale local = new Locale("zh", "CN"); - ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", local); - String msg = bundle.getString("try_get_schema_fromdb"); - Assert.assertEquals("无法从配置文件获取表结构信息,尝试从数据库获取", msg); - } - - @Test - public void testDefaultMessage() { - ResourceBundle bundle = ResourceBundle.getBundle("tdenginewritermsg", Locale.getDefault()); - String msg = bundle.getString("try_get_schema_fromdb"); - System.out.println(msg); - } -} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java new file mode 100644 index 00000000..4a662711 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java @@ -0,0 +1,70 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Random; + +public class Mysql2TDengineTest { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static final Random random = new Random(System.currentTimeMillis()); + + @Test + public void mysql2tdengine() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/m2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Before + public void before() throws SQLException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url = "jdbc:mysql://" + host1 + ":3306/?useSSL=false&useUnicode=true&charset=UTF-8&generateSimpleParameterMetadata=true"; + try (Connection conn = DriverManager.getConnection(url, "root", "123456")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("use db1"); + stmt.execute("create table stb1(id int primary key AUTO_INCREMENT, " + + "f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, " + + "ts timestamp, dt datetime," + + "f7 nchar(100), f8 varchar(100))"); + for (int i = 1; i <= 10; i++) { + String sql = "insert into stb1(f1, f2, f3, f4, f5, f6, ts, dt, f7, f8) values(" + + i + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextFloat() + "," + random.nextDouble() + ", " + + "'" + ts + "', '" + ts + "', " + + "'中国北京朝阳望京abc', '中国北京朝阳望京adc')"; + stmt.execute(sql); + } + + stmt.close(); + } + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(" + + "ts timestamp, dt timestamp, " + + "f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, " + + "f7 nchar(100), f8 nchar(100))"); + + stmt.close(); + } + + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java new file mode 100644 index 00000000..879eec26 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java @@ -0,0 +1,36 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Assert; +import org.junit.Test; + +import java.sql.*; + +public class Opentsdb2TDengineTest { + + @Test + public void opentsdb2tdengine() throws SQLException { + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/opentsdb2tdengine.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + + // assert + String jdbcUrl = "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP"; + try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("select count(*) from weather_temperature"); + int rows = 0; + while (rs.next()) { + rows = rs.getInt("count(*)"); + } + Assert.assertEquals(5, rows); + stmt.close(); + } + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java new file mode 100644 index 00000000..6a1170ea --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java @@ -0,0 +1,4 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class Rdbms2TDengineTest { +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java new file mode 100644 index 00000000..0110be48 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java @@ -0,0 +1,68 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.*; +import java.util.Random; + +public class TDengine2TDengineTest { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static final String db1 = "db1"; + private static final String stb1 = "stb1"; + private static final String db2 = "db2"; + private static final String stb2 = "stb2"; + private static Random random = new Random(System.currentTimeMillis()); + + @Test + public void case_01() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case_02() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Before + public void before() throws SQLException { + final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists " + db1); + stmt.execute("create database if not exists " + db1); + stmt.execute("create table " + db1 + "." + stb1 + " (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + for (int i = 0; i < 10; i++) { + String sql = "insert into " + db1 + ".t" + (i + 1) + " using " + db1 + "." + stb1 + " tags(now+" + i + "s," + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextFloat() + "," + random.nextDouble() + "," + + random.nextBoolean() + ",'abc123ABC','北京朝阳望京') values(now+" + i + "s, " + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextFloat() + "," + random.nextDouble() + "," + + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; + stmt.execute(sql); + } + } + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists " + db2); + stmt.execute("create database if not exists " + db2); + stmt.execute("create table " + db2 + "." + stb2 + " (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + stmt.close(); + } + } +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java new file mode 100644 index 00000000..991f7582 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java @@ -0,0 +1,62 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Random; + +public class TDengine2TDengineTest3 { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static Random random = new Random(System.currentTimeMillis()); + + @Test + public void case_03() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-3.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Before + public void before() throws SQLException { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("create table db1.stb1 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + for (int i = 1; i <= 10; i++) { + String sql = "insert into db1.t" + i + " using db1.stb1 tags('" + ts + "'," + i + ",2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京') " + + "values(now+" + i + "s, " + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; + stmt.execute(sql); + } + } + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + + stmt.execute("create table db2.t1 using db2.stb2 tags('" + ts + "',1,2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京')"); + stmt.close(); + } + + } +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java new file mode 100644 index 00000000..46ce0fdf --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java @@ -0,0 +1,57 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Random; + +public class TDengine2TDengineTest4 { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static Random random = new Random(System.currentTimeMillis()); + + @Test + public void case_04() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-4.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Before + public void before() throws SQLException { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("create table db1.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); + for (int i = 1; i <= 10; i++) { + String sql = "insert into db1.weather values(now+" + i + "s, " + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; + stmt.execute(sql); + } + } + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); + stmt.close(); + } + + } +} diff --git a/tdenginewriter/src/test/resources/mysql2tdengine.json b/tdenginewriter/src/test/resources/m2t-1.json similarity index 63% rename from tdenginewriter/src/test/resources/mysql2tdengine.json rename to tdenginewriter/src/test/resources/m2t-1.json index 38485533..dcacb4b2 100644 --- a/tdenginewriter/src/test/resources/mysql2tdengine.json +++ b/tdenginewriter/src/test/resources/m2t-1.json @@ -8,16 +8,25 @@ "username": "root", "password": "123456", "column": [ - "*" + "ts", + "dt", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8" ], "splitPk": "id", "connection": [ { "table": [ - "t" + "stb1" ], "jdbcUrl": [ - "jdbc:mysql://192.168.56.105:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" + "jdbc:mysql://192.168.56.105:3306/db1?useSSL=false&useUnicode=true&characterEncoding=utf8" ] } ] @@ -30,16 +39,22 @@ "password": "taosdata", "column": [ "ts", + "dt", "f1", "f2", - "t1" + "f3", + "f4", + "f5", + "f6", + "f7", + "f8" ], "connection": [ { "table": [ - "st" + "stb2" ], - "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP" + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" } ], "batchSize": 1000, diff --git a/tdenginewriter/src/test/resources/t2t-1.json b/tdenginewriter/src/test/resources/t2t-1.json new file mode 100644 index 00000000..5ca04d9a --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-1.json @@ -0,0 +1,94 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-2.json b/tdenginewriter/src/test/resources/t2t-2.json new file mode 100644 index 00000000..18130b6e --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-2.json @@ -0,0 +1,92 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-3.json b/tdenginewriter/src/test/resources/t2t-3.json new file mode 100644 index 00000000..e0a22959 --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-3.json @@ -0,0 +1,92 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "t1" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-4.json b/tdenginewriter/src/test/resources/t2t-4.json new file mode 100644 index 00000000..9f1533b1 --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-4.json @@ -0,0 +1,72 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/tdengine2tdengine.json b/tdenginewriter/src/test/resources/tdengine2tdengine.json deleted file mode 100644 index f0d0092d..00000000 --- a/tdenginewriter/src/test/resources/tdengine2tdengine.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "job": { - "content": [ - { - "reader": { - "name": "tdenginereader", - "parameter": { - "username": "root", - "password": "taosdata", - "connection": [ - { - "table": [ - "meters" - ], - "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" - } - ], - "column": [ - "ts", - "current", - "voltage", - "phase", - "groupid", - "location" - ], - "beginDateTime": "2017-07-14 10:40:00", - "endDateTime": "2017-08-14 10:40:00", - "splitInterval": "1d" - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "192.168.56.105", - "port": 6030, - "dbName": "test2", - "username": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "meters" - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} \ No newline at end of file From d722f302eb6f2df01832493fbf12b17462fc766b Mon Sep 17 00:00:00 2001 From: hffariel Date: Mon, 14 Feb 2022 20:23:19 +0800 Subject: [PATCH 146/251] remove db and table info from stream load label --- .../starrockswriter/manager/StarRocksWriterManager.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java index 405b248b..7162e413 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksWriterManager.java @@ -24,7 +24,6 @@ public class StarRocksWriterManager { private final StarRocksStreamLoadVisitor starrocksStreamLoadVisitor; private final StarRocksWriterOptions writerOptions; - private static final String HYPHEN = "-"; private final List buffer = new ArrayList<>(); private int batchCount = 0; @@ -123,13 +122,9 @@ public class StarRocksWriterManager { public String createBatchLabel() { StringBuilder sb = new StringBuilder(); if (!Strings.isNullOrEmpty(writerOptions.getLabelPrefix())) { - sb.append(writerOptions.getLabelPrefix()).append(HYPHEN); + sb.append(writerOptions.getLabelPrefix()); } - return sb.append(writerOptions.getDatabase()) - .append(HYPHEN) - .append(writerOptions.getTable()) - .append(HYPHEN) - .append(UUID.randomUUID().toString()) + return sb.append(UUID.randomUUID().toString()) .toString(); } From 0680ce2e9708dc790f19e04a0cf4cf74e7e89e8f Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 18 Feb 2022 14:13:03 +0800 Subject: [PATCH 147/251] change --- tdenginewriter/pom.xml | 9 ++ .../tdenginewriter/DefaultDataHandler.java | 16 ++- .../tdenginewriter/DM2TDengineTest.java | 122 ++++++++++++++++++ .../DefaultDataHandlerTest.java | 82 ++++++++++-- .../DefaultDataHandlerTest2.java | 87 ------------- .../tdenginewriter/Opentsdb2TDengineTest.java | 2 +- .../tdenginewriter/Rdbms2TDengineTest.java | 4 - .../tdenginewriter/TDengine2TDengineTest.java | 99 +++++++++++--- .../TDengine2TDengineTest3.java | 62 --------- .../TDengine2TDengineTest4.java | 57 -------- .../src/test/resources/dm-schema.sql | 13 ++ tdenginewriter/src/test/resources/dm2t-1.json | 62 +++++++++ tdenginewriter/src/test/resources/dm2t-2.json | 62 +++++++++ tdenginewriter/src/test/resources/dm2t-3.json | 76 +++++++++++ tdenginewriter/src/test/resources/dm2t-4.json | 61 +++++++++ .../{opentsdb2tdengine.json => o2t-1.json} | 0 tdenginewriter/src/test/resources/t2t-4.json | 2 +- 17 files changed, 572 insertions(+), 244 deletions(-) create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java delete mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java create mode 100644 tdenginewriter/src/test/resources/dm-schema.sql create mode 100644 tdenginewriter/src/test/resources/dm2t-1.json create mode 100644 tdenginewriter/src/test/resources/dm2t-2.json create mode 100644 tdenginewriter/src/test/resources/dm2t-3.json create mode 100644 tdenginewriter/src/test/resources/dm2t-4.json rename tdenginewriter/src/test/resources/{opentsdb2tdengine.json => o2t-1.json} (100%) diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 459ad0b7..9dd3aa02 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -74,6 +74,15 @@ 5.1.49 test + + + com.dameng + dm-jdbc + 1.8 + system + /Users/yangzy/IdeaProjects/DataX/tdenginewriter/src/test/resources/DmJdbcDriver18.jar + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index addda9cf..4068be42 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -180,9 +180,21 @@ public class DefaultDataHandler implements DataHandler { private String buildColumnValue(ColumnMeta colMeta, Record record) { Column column = record.getColumn(indexOf(colMeta.field)); + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); switch (column.getType()) { - case DATE: - return "'" + column.asString() + "'"; + case DATE: { + Date value = column.asDate(); + switch (timestampPrecision) { + case MILLISEC: + return "" + (value.getTime()); + case MICROSEC: + return "" + (value.getTime() * 1000); + case NANOSEC: + return "" + (value.getTime() * 1000_000); + default: + return "'" + column.asString() + "'"; + } + } case BYTES: case STRING: if (colMeta.type.equals("TIMESTAMP")) diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java new file mode 100644 index 00000000..0eb91deb --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java @@ -0,0 +1,122 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +public class DM2TDengineTest { + + private String host1 = "192.168.0.72"; + private String host2 = "192.168.1.93"; + private final Random random = new Random(System.currentTimeMillis()); + + @Test + public void dm2t_case01() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case02() throws Throwable { + // given + createSupAndSubTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case03() throws Throwable { + // given + createTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-3.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case04() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-4.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createSupTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f2 smallint, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200)) tags(f1 tinyint,f3 int)"); + stmt.close(); + } + } + + private void createSupAndSubTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f2 smallint, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200)) tags(f1 tinyint,f3 int)"); + for (int i = 0; i < 10; i++) { + stmt.execute("create table db2.t" + (i + 1) + "_" + i + " using db2.stb2 tags(" + (i + 1) + "," + i + ")"); + } + stmt.close(); + } + } + + private void createTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200))"); + stmt.close(); + } + } + + @Before + public void before() throws SQLException, ClassNotFoundException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long ts = System.currentTimeMillis(); + + final String url = "jdbc:dm://" + host1 + ":5236"; + try (Connection conn = DriverManager.getConnection(url, "TESTUSER", "test123456")) { + conn.setAutoCommit(true); + Statement stmt = conn.createStatement(); + stmt.execute("drop table if exists stb1"); + stmt.execute("create table stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 NUMERIC(10,2), f8 BIT, f9 VARCHAR(100), f10 VARCHAR2(200))"); + for (int i = 0; i < 10; i++) { + String sql = "insert into stb1 values('" + sdf.format(new Date(ts + i * 1000)) + "'," + (i + 1) + "," + + random.nextInt(100) + "," + i + ",4,5.55,6.666,7.77," + (random.nextBoolean() ? 1 : 0) + + ",'abcABC123','北京朝阳望京DM')"; + stmt.execute(sql); + } + } + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index 733698a7..3657a4f7 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -22,12 +22,13 @@ import java.util.stream.IntStream; public class DefaultDataHandlerTest { - private static final String host = "192.168.56.105"; + private static final String host = "192.168.1.93"; private static Connection conn; @Test - public void writeSupTableBySQL() { + public void writeSupTableBySQL() throws SQLException { // given + createSupAndSubTable(); Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + @@ -55,6 +56,7 @@ public class DefaultDataHandlerTest { Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -63,8 +65,9 @@ public class DefaultDataHandlerTest { } @Test - public void writeSupTableBySQL_2() { + public void writeSupTableBySQL_2() throws SQLException { // given + createSupAndSubTable(); Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + @@ -91,6 +94,7 @@ public class DefaultDataHandlerTest { Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -99,8 +103,49 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithTableName() { + public void writeSupTableBySchemaless() throws SQLException { // given + createSupTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS://" + host + ":6030/scm_test\"," + + "\"batchSize\": \"1000\"" + + "}"); + String jdbcUrl = configuration.getString("jdbcUrl"); + Connection connection = DriverManager.getConnection(jdbcUrl, "root", "taosdata"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new StringColumn("t" + i + " 22")); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(connection); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(connection, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSubTableWithTableName() throws SQLException { + // given + createSupAndSubTable(); Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + @@ -128,6 +173,7 @@ public class DefaultDataHandlerTest { Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -136,8 +182,9 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithoutTableName() { + public void writeSubTableWithoutTableName() throws SQLException { // given + createSupAndSubTable(); Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + @@ -165,6 +212,7 @@ public class DefaultDataHandlerTest { Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -173,8 +221,9 @@ public class DefaultDataHandlerTest { } @Test - public void writeNormalTable() { + public void writeNormalTable() throws SQLException { // given + createSupAndSubTable(); Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + @@ -202,6 +251,7 @@ public class DefaultDataHandlerTest { Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -209,10 +259,8 @@ public class DefaultDataHandlerTest { Assert.assertEquals(10, count); } - @BeforeClass - public static void beforeClass() throws SQLException { - conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); - try (Statement stmt = conn.createStatement()) { + private void createSupAndSubTable() throws SQLException { + try(Statement stmt = conn.createStatement()){ stmt.execute("drop database if exists scm_test"); stmt.execute("create database if not exists scm_test"); stmt.execute("use scm_test"); @@ -226,6 +274,20 @@ public class DefaultDataHandlerTest { } } + private void createSupTable() throws SQLException { + try (Statement stmt = conn.createStatement()){ + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); + } + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); + } + @AfterClass public static void afterClass() throws SQLException { if (conn != null) { diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java deleted file mode 100644 index 1ed32d63..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest2.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import com.alibaba.datax.common.element.DateColumn; -import com.alibaba.datax.common.element.LongColumn; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.element.StringColumn; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.core.transport.record.DefaultRecord; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class DefaultDataHandlerTest2 { - - private static final String host = "192.168.1.93"; - private static Connection conn; - - @Test - public void writeSupTableBySchemaless() throws SQLException { - - - // given - Configuration configuration = Configuration.from("{" + - "\"username\": \"root\"," + - "\"password\": \"taosdata\"," + - "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + - "\"table\":[\"stb1\"]," + - "\"jdbcUrl\":\"jdbc:TAOS://" + host + ":6030/scm_test\"," + - "\"batchSize\": \"1000\"" + - "}"); - - String jdbcUrl = configuration.getString("jdbcUrl"); - Connection connection = DriverManager.getConnection(jdbcUrl, "root", "taosdata"); - long current = System.currentTimeMillis(); - List recordList = IntStream.range(1, 11).mapToObj(i -> { - Record record = new DefaultRecord(); - record.addColumn(new DateColumn(current + 1000 * i)); - record.addColumn(new LongColumn(1)); - record.addColumn(new LongColumn(2)); - record.addColumn(new StringColumn("t" + i + " 22")); - return record; - }).collect(Collectors.toList()); - - // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); - List tables = configuration.getList("table", String.class); - SchemaManager schemaManager = new SchemaManager(connection); - Map tableMetas = schemaManager.loadTableMeta(tables); - Map> columnMetas = schemaManager.loadColumnMetas(tables); - handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); - handler.setSchemaManager(schemaManager); - - int count = handler.writeBatch(connection, recordList); - - // then - Assert.assertEquals(10, count); - } - - @BeforeClass - public static void beforeClass() throws SQLException { - conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); - try (Statement stmt = conn.createStatement()) { - stmt.execute("drop database if exists scm_test"); - stmt.execute("create database if not exists scm_test"); - stmt.execute("use scm_test"); - stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); - } - } - - @AfterClass - public static void afterClass() throws SQLException { - if (conn != null) { - conn.close(); - } - } -} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java index 879eec26..ad326f7e 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java @@ -11,7 +11,7 @@ public class Opentsdb2TDengineTest { @Test public void opentsdb2tdengine() throws SQLException { // when - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/opentsdb2tdengine.json"}; + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/o2t-1.json"}; System.setProperty("datax.home", "../target/datax/datax"); try { Engine.entry(params); diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java deleted file mode 100644 index 6a1170ea..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Rdbms2TDengineTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -public class Rdbms2TDengineTest { -} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java index 0110be48..9e954633 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java @@ -5,20 +5,21 @@ import org.junit.Before; import org.junit.Test; import java.sql.*; +import java.text.SimpleDateFormat; import java.util.Random; public class TDengine2TDengineTest { private static final String host1 = "192.168.56.105"; private static final String host2 = "192.168.1.93"; - private static final String db1 = "db1"; - private static final String stb1 = "stb1"; - private static final String db2 = "db2"; - private static final String stb2 = "stb2"; - private static Random random = new Random(System.currentTimeMillis()); + private static final Random random = new Random(System.currentTimeMillis()); @Test public void case_01() throws Throwable { + // given + createSupTable(); + + // when String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-1.json"}; System.setProperty("datax.home", "../target/datax/datax"); Engine.entry(params); @@ -26,24 +27,93 @@ public class TDengine2TDengineTest { @Test public void case_02() throws Throwable { + // given + createSupTable(); + + // when String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-2.json"}; System.setProperty("datax.home", "../target/datax/datax"); Engine.entry(params); } + @Test + public void case_03() throws Throwable { + // given + createSupAndSubTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-3.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case_04() throws Throwable { + // given + createTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-4.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); + stmt.close(); + } + } + + private void createSupTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + stmt.close(); + } + } + + private void createSupAndSubTable() throws SQLException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + final String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + + stmt.execute("create table db2.t1 using db2.stb2 tags('" + ts + "',1,2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京')"); + stmt.close(); + } + } + @Before public void before() throws SQLException { final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { Statement stmt = conn.createStatement(); - stmt.execute("drop database if exists " + db1); - stmt.execute("create database if not exists " + db1); - stmt.execute("create table " + db1 + "." + stb1 + " (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("create table db1.stb1 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); for (int i = 0; i < 10; i++) { - String sql = "insert into " + db1 + ".t" + (i + 1) + " using " + db1 + "." + stb1 + " tags(now+" + i + "s," + + String sql = "insert into db1.t" + (i + 1) + " using db1.stb1 tags(now+" + i + "s," + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextFloat() + "," + random.nextDouble() + "," + random.nextBoolean() + ",'abc123ABC','北京朝阳望京') values(now+" + i + "s, " + @@ -53,16 +123,5 @@ public class TDengine2TDengineTest { stmt.execute(sql); } } - - final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; - try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - stmt.execute("drop database if exists " + db2); - stmt.execute("create database if not exists " + db2); - stmt.execute("create table " + db2 + "." + stb2 + " (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + - " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + - "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); - stmt.close(); - } } } diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java deleted file mode 100644 index 991f7582..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest3.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import com.alibaba.datax.core.Engine; -import org.junit.Before; -import org.junit.Test; - -import java.sql.*; -import java.text.SimpleDateFormat; -import java.util.Random; - -public class TDengine2TDengineTest3 { - - private static final String host1 = "192.168.56.105"; - private static final String host2 = "192.168.1.93"; - private static Random random = new Random(System.currentTimeMillis()); - - @Test - public void case_03() throws Throwable { - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-3.json"}; - System.setProperty("datax.home", "../target/datax/datax"); - Engine.entry(params); - } - - @Before - public void before() throws SQLException { - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - String ts = sdf.format(new Date(System.currentTimeMillis())); - - final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; - try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - - stmt.execute("drop database if exists db1"); - stmt.execute("create database if not exists db1"); - stmt.execute("create table db1.stb1 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + - "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + - "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); - for (int i = 1; i <= 10; i++) { - String sql = "insert into db1.t" + i + " using db1.stb1 tags('" + ts + "'," + i + ",2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京') " + - "values(now+" + i + "s, " + random.nextInt(100) + "," + random.nextInt(100) + "," + - random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextFloat() + "," + - random.nextDouble() + "," + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; - stmt.execute(sql); - } - } - - final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; - try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - stmt.execute("drop database if exists db2"); - stmt.execute("create database if not exists db2"); - stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + - " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + - "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); - - stmt.execute("create table db2.t1 using db2.stb2 tags('" + ts + "',1,2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京')"); - stmt.close(); - } - - } -} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java deleted file mode 100644 index 46ce0fdf..00000000 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest4.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.alibaba.datax.plugin.writer.tdenginewriter; - -import com.alibaba.datax.core.Engine; -import org.junit.Before; -import org.junit.Test; - -import java.sql.*; -import java.text.SimpleDateFormat; -import java.util.Random; - -public class TDengine2TDengineTest4 { - - private static final String host1 = "192.168.56.105"; - private static final String host2 = "192.168.1.93"; - private static Random random = new Random(System.currentTimeMillis()); - - @Test - public void case_04() throws Throwable { - String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-4.json"}; - System.setProperty("datax.home", "../target/datax/datax"); - Engine.entry(params); - } - - @Before - public void before() throws SQLException { - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - String ts = sdf.format(new Date(System.currentTimeMillis())); - - final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; - try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - - stmt.execute("drop database if exists db1"); - stmt.execute("create database if not exists db1"); - stmt.execute("create table db1.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + - "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); - for (int i = 1; i <= 10; i++) { - String sql = "insert into db1.weather values(now+" + i + "s, " + random.nextInt(100) + "," + random.nextInt(100) + "," + - random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextFloat() + "," + - random.nextDouble() + "," + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; - stmt.execute(sql); - } - } - - final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; - try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { - Statement stmt = conn.createStatement(); - stmt.execute("drop database if exists db2"); - stmt.execute("create database if not exists db2"); - stmt.execute("create table db2.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + - "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); - stmt.close(); - } - - } -} diff --git a/tdenginewriter/src/test/resources/dm-schema.sql b/tdenginewriter/src/test/resources/dm-schema.sql new file mode 100644 index 00000000..fcac83e2 --- /dev/null +++ b/tdenginewriter/src/test/resources/dm-schema.sql @@ -0,0 +1,13 @@ +select tablespace_name from dba_data_files; + +create tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 32 autoextend on next 1 maxsize 1024; + +create user TESTUSER identified by test123456 default tablespace test; + +grant dba to TESTUSER; + +select * from user_tables; + +drop table if exists stb1; + +create table stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double, f7 NUMERIC(10,2), f8 BIT, f9 VARCHAR(100), f10 VARCHAR2(200)); diff --git a/tdenginewriter/src/test/resources/dm2t-1.json b/tdenginewriter/src/test/resources/dm2t-1.json new file mode 100644 index 00000000..183786bf --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-1.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-2.json b/tdenginewriter/src/test/resources/dm2t-2.json new file mode 100644 index 00000000..dfea82bf --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-2.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024, + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "t1_0" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-3.json b/tdenginewriter/src/test/resources/dm2t-3.json new file mode 100644 index 00000000..cd96a536 --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-3.json @@ -0,0 +1,76 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "splitPk": "f1", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024, + "where": "1 = 1" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-4.json b/tdenginewriter/src/test/resources/dm2t-4.json new file mode 100644 index 00000000..5f169d5b --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-4.json @@ -0,0 +1,61 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select * from stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/opentsdb2tdengine.json b/tdenginewriter/src/test/resources/o2t-1.json similarity index 100% rename from tdenginewriter/src/test/resources/opentsdb2tdengine.json rename to tdenginewriter/src/test/resources/o2t-1.json diff --git a/tdenginewriter/src/test/resources/t2t-4.json b/tdenginewriter/src/test/resources/t2t-4.json index 9f1533b1..b7716363 100644 --- a/tdenginewriter/src/test/resources/t2t-4.json +++ b/tdenginewriter/src/test/resources/t2t-4.json @@ -10,7 +10,7 @@ "connection": [ { "table": [ - "weather" + "stb1" ], "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" } From c2a76420cc07fa20f190b118570f99477eed830f Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 18 Feb 2022 14:16:22 +0800 Subject: [PATCH 148/251] change --- tdenginewriter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 9dd3aa02..9ce6899b 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -80,7 +80,7 @@ dm-jdbc 1.8 system - /Users/yangzy/IdeaProjects/DataX/tdenginewriter/src/test/resources/DmJdbcDriver18.jar + ${project.basedir}/src/test/resources/DmJdbcDriver18.jar From e3f9e1219e5f01de7ed234bc5108ce25b5133848 Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 18 Feb 2022 18:34:34 +0800 Subject: [PATCH 149/251] change fastjson version --- tdenginewriter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 9ce6899b..97c750db 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -23,7 +23,7 @@ com.alibaba fastjson - 1.2.58 + 1.2.78 From fad2760ca2fd3dc9ff57e85d02c7d7f6b87f78d0 Mon Sep 17 00:00:00 2001 From: zyyang Date: Sun, 20 Feb 2022 11:27:37 +0800 Subject: [PATCH 150/251] add s2t test case --- .../tdenginewriter/Stream2TDengineTest.java | 69 ++++++ .../src/test/resources/defaultJob.json | 211 ++++++++++++++++++ .../src/test/resources/dm-schema.sql | 27 ++- 3 files changed, 302 insertions(+), 5 deletions(-) create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java create mode 100644 tdenginewriter/src/test/resources/defaultJob.json diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java new file mode 100644 index 00000000..cfd77fdf --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java @@ -0,0 +1,69 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class Stream2TDengineTest { + + private String host2 = "192.168.56.105"; + private String precision; + + @Test + public void s2t_case1() throws Throwable { + // given + createSupTable("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void s2t_case2() throws Throwable { + // given + createSupTable("us"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void s2t_case3() throws Throwable { + // given + createSupTable("ns"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + void createSupTable(String precision) throws SQLException { + + final String url = "jdbc:TAOS-RS://" + host2 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2 precision '" + precision + "'"); + stmt.execute("create table db2.stb2(ts1 timestamp, ts2 timestamp,ts3 timestamp,ts4 timestamp,ts5 timestamp," + + "ts6 timestamp,ts7 timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double," + + "f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp,t2 timestamp,t3 timestamp,t4 timestamp," + + "t5 timestamp,t6 timestamp,t7 timestamp, t8 tinyint, t9 smallint, t10 int, t11 bigint, t12 float," + + "t13 double, t14 bool, t15 binary(100), t16 nchar(100))"); + + stmt.close(); + } + + } + +} diff --git a/tdenginewriter/src/test/resources/defaultJob.json b/tdenginewriter/src/test/resources/defaultJob.json new file mode 100644 index 00000000..2548fc94 --- /dev/null +++ b/tdenginewriter/src/test/resources/defaultJob.json @@ -0,0 +1,211 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "date", + "value": "2022-02-20 12:00:02.123", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:03.123456", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:04.123456789", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" + }, + { + "type": "string", + "value": "2022-02-20 12:00:05.123" + }, + { + "type": "string", + "value": "2022-02-20 12:00:06.123456" + }, + { + "type": "string", + "value": "2022-02-20 12:00:07.123456789" + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "long", + "random": "0, 100" + }, + { + "type": "long", + "random": "0, 1000" + }, + { + "type": "long", + "random": "0, 10000" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "double", + "random": "10, 20" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "random": "0, 10" + }, + { + "type": "string", + "random": "0, 10" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "date", + "value": "2022-02-20 12:00:02.123", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:03.123456", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:04.123456789", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" + }, + { + "type": "string", + "value": "2022-02-20 12:00:05.123" + }, + { + "type": "string", + "value": "2022-02-20 12:00:06.123456" + }, + { + "type": "string", + "value": "2022-02-20 12:00:07.123456789" + }, + { + "type": "long", + "value": 1 + }, + { + "type": "long", + "value": 2 + }, + { + "type": "long", + "value": 3 + }, + { + "type": "long", + "value": 4 + }, + { + "type": "double", + "value": 5.55 + }, + { + "type": "double", + "value": 6.666666 + }, + { + "type": "bool", + "value": true + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } + ], + "sliceRecordCount": 10 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts1", + "ts2", + "ts3", + "ts4", + "ts5", + "ts6", + "ts7", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10", + "t11", + "t12", + "t13", + "t14", + "t15", + "t16" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db2" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm-schema.sql b/tdenginewriter/src/test/resources/dm-schema.sql index fcac83e2..d9985b1b 100644 --- a/tdenginewriter/src/test/resources/dm-schema.sql +++ b/tdenginewriter/src/test/resources/dm-schema.sql @@ -1,13 +1,30 @@ -select tablespace_name from dba_data_files; +select tablespace_name +from dba_data_files; -create tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 32 autoextend on next 1 maxsize 1024; +create +tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 32 autoextend on next 1 maxsize 1024; -create user TESTUSER identified by test123456 default tablespace test; +create +user TESTUSER identified by test123456 default tablespace test; grant dba to TESTUSER; -select * from user_tables; +select * +from user_tables; drop table if exists stb1; -create table stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double, f7 NUMERIC(10,2), f8 BIT, f9 VARCHAR(100), f10 VARCHAR2(200)); +create table stb1 +( + ts timestamp, + f1 tinyint, + f2 smallint, + f3 int, + f4 bigint, + f5 float, + f6 double, + f7 NUMERIC(10, 2), + f8 BIT, + f9 VARCHAR(100), + f10 VARCHAR2(200) +); From c96256c9a270992293eba61e95379ee2df4201cd Mon Sep 17 00:00:00 2001 From: zyyang Date: Sun, 20 Feb 2022 15:20:19 +0800 Subject: [PATCH 151/251] change doc-CN --- tdenginewriter/doc/tdenginewriter-CN.md | 433 ++++++++---------------- 1 file changed, 141 insertions(+), 292 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index a868f8f2..910425c1 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -4,21 +4,40 @@ ## 1 快速介绍 -TDengineWriter插件实现了写入数据到TDengine数据库功能。可用于离线同步其它数据库的数据到TDengine。 +TDengineWriter插件实现了写入数据到TDengine数据库目标表的功能。底层实现上,TDengineWriter通过JDBC连接TDengine,按照TDengine的SQL语法,执行insert语句/schemaless语句,将数据写入TDengine。 + +TDengineWriter可以作为数据迁移工具供DBA将其它数据库的数据导入到TDengine。 + + ## 2 实现原理 -TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据reader的类型解析数据。目前有两种写入方式: +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,通过JDBC Driver连接TDengine,执行insert语句/schemaless语句,将数据写入TDengine。 -1. 对于OpenTSDBReader, TDengineWriter通过JNI方式调用TDengine客户端库文件(taos.lib或taos.dll)中的方法,使用[schemaless的方式](https://www.taosdata.com/cn/documentation/insert#schemaless)写入。 +在TDengine中,table可以分成超级表、子表、普通表三种类型,超级表和子表包括colum和tag,子表的tag列的值为固定值,普通表与关系型数据库中表的概念一致。(详细请参考:[数据模型](https://www.taosdata.com/docs/cn/v2.0/architecture#model) ) + +TDengineWriter支持向超级表、子表、普通表中写入数据,按照table的类型和column参数中是否包含tbname,使用以下方法进行写入: + +1. table为超级表,column中指定tbname:使用自动建表的insert语句,使用tbname作为子表的名称。 +2. table为超级表,column中未指定tbname:使用schemaless写入,TDengine会根据超级表名、tag值计算一个子表名称。 +3. table为子表:使用insert语句写入,ignoreTagUnmatched参数为true时,忽略record中tag值与table的tag值不一致的数据。 +4. table为普通表:使用insert语句写入。 -2. 对于其它数据源,会根据配置生成SQL语句, 通过[taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java)批量写入。 -这样区分的原因是OpenTSDBReader将opentsdb的数据统一读取为json字符串,Writer端接收到的数据只有1列。而其它Reader插件一般会把数据放在不同列。 ## 3 功能说明 -### 3.1 从OpenTSDB到TDengine -#### 3.1.1 配置样例 +### 3.1 配置样例 + +配置一个写入TDengine的作业 + +先在TDengine上创建超级表: + +```sql +create database if not exists test; +create table test.weather (ts timestamp, temperature int, humidity double) tags(is_normal bool, device_id binary(100), address nchar(100)); +``` + +使用下面的Job配置,将数据写入TDengine: ```json { @@ -26,286 +45,65 @@ TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,根据rea "content": [ { "reader": { - "name": "opentsdbreader", + "name": "streamreader", "parameter": { - "endpoint": "http://192.168.1.180:4242", "column": [ - "weather_temperature" + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } ], - "beginDateTime": "2021-01-01 00:00:00", - "endDateTime": "2021-01-01 01:00:00" + "sliceRecordCount": 1 } }, "writer": { "name": "tdenginewriter", "parameter": { - "host": "192.168.1.180", - "port": 6030, - "dbName": "test", "username": "root", - "password": "taosdata" - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - -#### 3.1.2 参数说明 - -| 参数 | 描述 | 是否必选 | 默认值 | -| --------- | -------------------- | -------- | -------- | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| username | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbName | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1 | - - -#### 3.1.3 类型转换 - -目前,由于OpenTSDBReader将opentsdb的数据统一读取为json字符串,TDengineWriter 在做Opentsdb到TDengine的迁移时,按照以下类型进行处理: - -| OpenTSDB数据类型 | DataX 内部类型 | TDengine 数据类型 | -| ---------------- | -------------- | ----------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | - -### 3.2 从MongoDB到TDengine - -#### 3.2.1 配置样例 -```json -{ - "job": { - "setting": { - "speed": { - "channel": 2 - } - }, - "content": [ - { - "reader": { - "name": "mongodbreader", - "parameter": { - "address": [ - "127.0.0.1:27017" - ], - "userName": "user", - "mechanism": "SCRAM-SHA-1", - "userPassword": "password", - "authDb": "admin", - "dbName": "test", - "collectionName": "stock", - "column": [ - { - "name": "stockID", - "type": "string" - }, - { - "name": "tradeTime", - "type": "date" - }, - { - "name": "lastPrice", - "type": "double" - }, - { - "name": "askPrice1", - "type": "double" - }, - { - "name": "bidPrice1", - "type": "double" - }, - { - "name": "volume", - "type": "int" - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "localhost", - "port": 6030, - "dbName": "test", - "username": "root", - "password": "taosdata", - "stable": "stock", - "tagColumn": { - "industry": "energy", - "stockID": 0 - }, - "fieldColumn": { - "lastPrice": 2, - "askPrice1": 3, - "bidPrice1": 4, - "volume": 5 - }, - "timestampColumn": { - "tradeTime": 1 - } - } - } - } - ] - } -} -``` - -**注:本配置的writer部分同样适用于关系型数据库** - - -#### 3.2.2 参数说明 -| 参数 | 描述 | 是否必选 | 默认值 | 备注 | -| --------------- | -------------------- | ---------------- | -------- | ------------------ | -| host | TDengine实例的host | 是 | 无 | -| port | TDengine实例的port | 是 | 无 | -| username | TDengine实例的用户名 | 否 | root | -| password | TDengine实例的密码 | 否 | taosdata | -| dbName | 目的数据库的名称 | 是 | 无 | -| batchSize | 每次批量插入多少记录 | 否 | 1000 | -| stable | 目标超级表的名称 | 是(OpenTSDB除外) | 无 | -| tagColumn | 格式:{tagName1: tagInd1, tagName2: tagInd2}, 标签列在写插件收到的Record中的位置和列名 | 否 | 无 | 位置索引均从0开始, tagInd如果为字符串, 表示固定标签值,不需要从源数据中获取 | -| fieldColumn | 格式:{fdName1: fdInd1, fdName2: fdInd2}, 字段列在写插件收到的Record中的位置和列名 | 否 | 无 | | -| timestampColumn | 格式:{tsColName: tsColIndex}, 时间戳列在写插件收到的Record中的位置和列名 | 否 | 无 | 时间戳列只能有一个 | - -示例配置中tagColumn有一个industry,它的值是一个固定的字符串“energy”, 作用是给导入的所有数据加一个值为"energy"的固定标签industry。这个应用场景可以是:在源库中,有多个设备采集的数据分表存储,设备名就是表名,可以用这个机制把设备名称转化为标签。 - -#### 3.2.3 自动建表规则 -##### 3.2.3.1 超级表创建规则 - -如果配置了tagColumn、 fieldColumn和timestampColumn将会在插入第一条数据前,自动创建超级表。
-数据列的类型从第1条记录自动推断, 标签列默认类型为`NCHAR(64)`, 比如示例配置,可能生成以下建表语句: - -```sql -CREATE STABLE IF NOT EXISTS market_snapshot ( - tadetime TIMESTAMP, - lastprice DOUBLE, - askprice1 DOUBLE, - bidprice1 DOUBLE, - volume INT -) -TAGS( - industry NCHAR(64), - stockID NCHAR(64) -); -``` - -##### 3.2.3.2 子表创建规则 - -子表结构与超级表相同,子表表名生成规则: -1. 将标签的value 组合成为如下的字符串: `tag_value1!tag_value2!tag_value3`。 -2. 计算该字符串的 MD5 散列值 "md5_val"。 -3. "t_md5val"作为子表名。其中的 "t" 是固定的前缀。 - -#### 3.2.4 用户提前建表 - -如果你已经创建好目标超级表,那么tagColumn、 fieldColumn和timestampColumn三个字段均可省略, 插件将通过执行通过`describe stableName`获取表结构的信息。 -此时要求接收到的Record中Column的顺序和执行`describe stableName`返回的列顺序相同, 比如通过`describe stableName`返回以下内容: -``` - Field | Type | Length | Note | -================================================================================= - ts | TIMESTAMP | 8 | | - current | DOUBLE | 8 | | - location | BINARY | 10 | TAG | -``` -那么插件收到的数据第1列必须代表时间戳,第2列必须代表电流,第3列必须代表位置。 - -#### 3.2.5 注意事项 - -1. tagColumn、 fieldColumn和timestampColumn三个字段用于描述目标表的结构信息,这三个配置字段必须同时存在或同时省略。 -2. 如果存在以上三个配置,且目标表也已经存在,则两者必须一致。**一致性**由用户自己保证,插件不做检查。不一致可能会导致插入失败或插入数据错乱。 - -#### 3.2.6 类型转换 - -| MongoDB 数据类型 | DataX 内部类型 | TDengine 数据类型 | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY(64) | - -### 3.3 从关系型数据库到TDengine -writer部分的配置规则和上述MongoDB的示例是一样的,这里给出一个MySQL的示例。 - -#### 3.3.1 MySQL中表结构 -```sql -CREATE TABLE IF NOT EXISTS weather( - station varchar(100), - latitude DOUBLE, - longtitude DOUBLE, - `date` DATE, - TMAX int, - TMIN int -) -``` - -#### 3.3.2 配置文件示例 - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "mysqlreader", - "parameter": { - "username": "root", - "password": "passw0rd", + "password": "taosdata", "column": [ - "*" + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" ], - "splitPk": "station", "connection": [ { "table": [ "weather" ], - "jdbcUrl": [ - "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" - ] + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "127.0.0.1", - "port": 6030, - "dbName": "test", - "username": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "weather", - "tagColumn": { - "station": 0 - }, - "fieldColumn": { - "latitude": 1, - "longtitude": 2, - "tmax": 4, - "tmin": 5 - }, - "timestampColumn":{ - "date": 3 - } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true } } } @@ -319,6 +117,72 @@ CREATE TABLE IF NOT EXISTS weather( } ``` +### 3.2 参数说明 + +* jdbcUrl + * 描述:数据源的JDBC连接信息,TDengine的JDBC信息请参考:[Java连接器的使用](https://www.taosdata.com/docs/cn/v2.0/connector/java#url) + * 必选:是 + * 默认值:无 +* username + * 描述:用户名 + * 必选:是 + * 默认值:无 +* password + * 描述:用户名的密码 + * 必选:是 + * 默认值:无 +* table + * 描述:表名的集合,table应该包含column参数中的所有列(tbname除外)。注意,column中的tbname会被当作TDengine中子表名使用。 + * 必选:是 + * 默认值:无 +* column + * 描述:字段名的集合,字段的顺序应该与record中column的 + * 必选:是 + * 默认值:无 +* batchSize + * 描述: + * 必选:否 + * 默认值:1 +* ignoreTagsUnmatched + * 描述:当table为TDengine中的一张子表,table具有tag值。如果数据的tag值与table的tag值不想等,数据不写入到table中。 + * 必选:否 + * 默认值:false + + +### 3.3 类型转换 + +datax中的数据类型,可以映射到TDengine的数据类型 + +| DataX 内部类型 | TDengine 数据类型 | +| -------------- | ----------------------------------------- | +| INT | TINYINT, SMALLINT, INT | +| LONG | TIMESTAMP, TINYINT, SMALLINT, INT, BIGINT | +| DOUBLE | FLOAT, DOUBLE | +| STRING | TIMESTAMP, BINARY, NCHAR | +| BOOL | BOOL | +| DATE | TIMESTAMP | +| BYTES | BINARY | + + + +### 3.4 各数据源到TDengine的参考示例 + +下面是一些数据源到TDengine进行数据迁移的示例 + +| 数据迁移示例 | 配置的示例 | +| ------------------ | ------------------------------------------------------------ | +| TDengine到TDengine | [超级表到超级表,指定tbname](../src/test/resources/t2t-1.json) | +| TDengine到TDengine | [超级表到超级表,不指定tbname](../src/test/resources/t2t-2.json) | +| TDengine到TDengine | [超级表到子表](../src/test/resources/t2t-3.json) | +| TDengine到TDengine | [普通表到普通表](../src/test/resources/t2t-4.json) | +| RDBMS到TDengine | [普通表到超级表,指定tbname](../src/test/resources/dm2t-1.json) | +| RDBMS到TDengine | [普通表到超级表,不指定tbname](../src/test/resources/dm2t-2.json) | +| RDBMS到TDengine | [普通表到子表](../src/test/resources/dm2t-3.json) | +| RDBMS到TDengine | [普通表到普通表](../src/test/resources/dm2t-4.json) | +| OpenTSDB到TDengine | [metric到普通表](../src/test/resources/o2t-1.json) | + + + ## 4 性能报告 @@ -362,44 +226,29 @@ CREATE TABLE IF NOT EXISTS weather( 说明: -1. 这里的单表,主键类型为 bigint(20),自增。 -2. batchSize 和 通道个数,对性能影响较大。 -3. 16通道,4096批量提交时,出现 full gc 2次。 +1. #### 4.2.4 性能测试小结 + + ## 5 约束限制 -1. 本插件自动创建超级表时NCHAR类型的长度固定为64,对于包含长度大于64的字符串的数据源,将不支持。 -2. 标签列不能包含null值,如果包含会被过滤掉。 +1. + + ## FAQ -### 如何选取要同步的数据的范围? - -数据范围的选取在Reader插件端配置,对于不同的Reader插件配置方法往往不同。比如对于mysqlreader, 可以用sql语句指定数据范围。对于opentsdbreader, 用beginDateTime和endDateTime两个配置项指定数据范围。 - -### 如何一次导入多张源表? - -如果Reader插件支持一次读多张表,Writer插件就能一次导入多张表。如果Reader不支持多多张表,可以建多个job,分别导入。Writer插件只负责写数据。 - ### 一张源表导入之后对应TDengine中多少张表? 这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 ### 源表和目标表的字段顺序一致吗? -TDengine要求每个表第一列是时间戳列,后边是普通字段,最后是标签列。如果源表不是这个顺序,插件在自动建表时会自动调整。 +是的,TDengineWriter按照column中字段的顺序解析来自datax的数据。 ### 插件如何确定各列的数据类型? 根据收到的第一批数据自动推断各列的类型。 - -### 为什么插入10年前的数据会抛异常`TDengine ERROR (2350): failed to execute batch bind` ? - -因为创建数据库的时候,默认保留10年的数据。可以手动指定要保留多长时间的数据,比如:`CREATE DATABASE power KEEP 36500;`。 - -### 如果编译的时候某些插件的依赖找不到怎么办? - -如果这个插件不是必须的,可以注释掉根目录下的pom.xml中的对应插件。 \ No newline at end of file From 7436176b27a6f3120b05e7b8cf73826ab95e2112 Mon Sep 17 00:00:00 2001 From: zyyang Date: Sun, 20 Feb 2022 16:49:48 +0800 Subject: [PATCH 152/251] change doc --- tdenginewriter/doc/tdenginewriter-CN.md | 10 +- tdenginewriter/doc/tdenginewriter.md | 439 ++++++++---------------- 2 files changed, 141 insertions(+), 308 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index 910425c1..d06669b9 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -140,7 +140,7 @@ create table test.weather (ts timestamp, temperature int, humidity double) tags( * 必选:是 * 默认值:无 * batchSize - * 描述: + * 描述:每batchSize条record为一个batch进行写入 * 必选:否 * 默认值:1 * ignoreTagsUnmatched @@ -241,14 +241,6 @@ datax中的数据类型,可以映射到TDengine的数据类型 ## FAQ -### 一张源表导入之后对应TDengine中多少张表? - -这是由tagColumn决定的,如果所有tag列的值都相同,那么目标表只有一个。源表有多少不同的tag组合,目标超级表就有多少子表。 - ### 源表和目标表的字段顺序一致吗? 是的,TDengineWriter按照column中字段的顺序解析来自datax的数据。 - -### 插件如何确定各列的数据类型? - -根据收到的第一批数据自动推断各列的类型。 diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md index 6f19c112..ba6d1ea8 100644 --- a/tdenginewriter/doc/tdenginewriter.md +++ b/tdenginewriter/doc/tdenginewriter.md @@ -4,18 +4,42 @@ ## 1 Quick Introduction -TDengineWriter Plugin writes data to [TDengine](https://www.taosdata.com/en/). It can be used to offline synchronize data from other databases to TDengine. +The TDengineWriter plugin enables writing data to the target table of the TDengine database. At the bottom level, TDengineWriter connects TDengine through JDBC, executes insert statement /schemaless statement according to TDengine SQL syntax, and writes data to TDengine. + +TDengineWriter can be used as a data migration tool for DBAs to import data from other databases into TDengine. + + ## 2 Implementation -TDengineWriter get records from DataX Framework that are generated from reader side. It has two whiting strategies: +TDengineWriter obtains the protocol data generated by Reader through DataX framework, connects to TDengine through JDBC Driver, executes insert statement /schemaless statement, and writes the data to TDengine. + +In TDengine, table can be divided into super table, sub-table and ordinary table. Super table and sub-table include Colum and Tag. The value of tag column of sub-table is fixed value. (details please refer to: [data model](https://www.taosdata.com/docs/cn/v2.0/architecture#model)) + +The TDengineWriter can write data to super tables, sub-tables, and ordinary tables using the following methods based on the type of the table and whether the column parameter contains TBName: + +1. Table is a super table and column specifies tbname: use the automatic insert statement to create the table and use tbname as the name of the sub-table. + +2. Table is a super table and column does not contain tbname: use schemaless to write the table. TDengine will auto-create a tbname based on the super table name and tag value. + +3. Table is a sub-table: Use insert statement to write, ignoreTagUnmatched parameter is true, ignore data in record whose tag value is inconsistent with that of table. + +4. Table is a common table: use insert statement to write data. + -1. For data from OpenTSDBReader which is in json format, to leverage the new feature of TDengine Server that support writing json data directly called [schemaless writing](https://www.taosdata.com/cn/documentation/insert#schemaless), we use JNI to call functions in `taos.lib` or `taos.dll`.(Since the feature was not included in taos-jdbcdrive until version 2.0.36). -2. For other data sources, we use [taos-jdbcdriver](https://www.taosdata.com/cn/documentation/connector/java) to write data. If the target table is not exists beforehand, then it will be created automatically according to your configuration. ## 3 Features Introduction -### 3.1 From OpenTSDB to TDengine -#### 3.1.1 Sample Setting +### 3.1 Sample +Configure a job to write to TDengine + +Create a supertable on TDengine: + +```sql +create database if not exists test; +create table test.weather (ts timestamp, temperature int, humidity double) tags(is_normal bool, device_id binary(100), address nchar(100)); +``` + +Write data to TDengine using the following Job configuration: ```json { @@ -23,286 +47,65 @@ TDengineWriter get records from DataX Framework that are generated from reader s "content": [ { "reader": { - "name": "opentsdbreader", + "name": "streamreader", "parameter": { - "endpoint": "http://192.168.1.180:4242", "column": [ - "weather_temperature" + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } ], - "beginDateTime": "2021-01-01 00:00:00", - "endDateTime": "2021-01-01 01:00:00" + "sliceRecordCount": 1 } }, "writer": { "name": "tdenginewriter", "parameter": { - "host": "192.168.1.180", - "port": 6030, - "dbName": "test", "username": "root", - "password": "taosdata" - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} -``` - -#### 3.1.2 Configuration - -| Parameter | Description | Required | Default | -| --------- | ------------------------------ | -------- | -------- | -| host | host of TDengine | Yes | | -| port | port of TDengine | Yes | | -| username | use name of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbName | name of target database | No | | -| batchSize | batch size of insert operation | No | 1 | - - -#### 3.1.3 Type Convert - -| OpenTSDB Type | DataX Type | TDengine Type | -| ---------------- | ---------- | ------------- | -| timestamp | Date | timestamp | -| Integer(value) | Double | double | -| Float(value) | Double | double | -| String(value) | String | binary | -| Integer(tag) | String | binary | -| Float(tag) | String | binary | -| String(tag) | String | binary | - -### 3.2 From MongoDB to TDengine - -#### 3.2.1 Sample Setting -```json -{ - "job": { - "setting": { - "speed": { - "channel": 2 - } - }, - "content": [ - { - "reader": { - "name": "mongodbreader", - "parameter": { - "address": [ - "127.0.0.1:27017" - ], - "userName": "user", - "mechanism": "SCRAM-SHA-1", - "userPassword": "password", - "authDb": "admin", - "dbName": "test", - "collectionName": "stock", - "column": [ - { - "name": "stockID", - "type": "string" - }, - { - "name": "tradeTime", - "type": "date" - }, - { - "name": "lastPrice", - "type": "double" - }, - { - "name": "askPrice1", - "type": "double" - }, - { - "name": "bidPrice1", - "type": "double" - }, - { - "name": "volume", - "type": "int" - } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "localhost", - "port": 6030, - "dbName": "test", - "username": "root", - "password": "taosdata", - "stable": "stock", - "tagColumn": { - "industry": "energy", - "stockID": 0 - }, - "fieldColumn": { - "lastPrice": 2, - "askPrice1": 3, - "bidPrice1": 4, - "volume": 5 - }, - "timestampColumn": { - "tradeTime": 1 - } - } - } - } - ] - } -} -``` - -**Note:the writer part of this setting can also apply to other data source except for OpenTSDB ** - - -#### 3.2.2 Configuration - -| Parameter | Description | Required | Default | Remark | -| --------------- | --------------------------------------------------------------- | ------------------------ | -------- | ------------------- | -| host | host ofTDengine | Yes | | -| port | port of TDengine | Yes | | -| username | username of TDengine | No | root | -| password | password of TDengine | No | taosdata | -| dbName | name of target database | Yes | | -| batchSize | batch size of insert operation | No | 1000 | -| stable | name of target super table | Yes(except for OpenTSDB) | | -| tagColumn | name and position of tag columns in the record from reader, format:{tagName1: tagInd1, tagName2: tagInd2} | No | | index starts with 0 | -| fieldColumn | name and position of data columns in the record from reader, format: {fdName1: fdInd1, fdName2: fdInd2} | No | | | -| timestampColumn | name and position of timestamp column in the record from reader | No | | | - -**Note**: You see that the value of tagColumn "industry" is a fixed string, this ia a good feature of this plugin. Think about this scenario: you have many tables with the structure and one table corresponds to one device. You want to use the device number as a tag in the target super table, then this feature is designed for you. - -#### 3.2.3 Auto table creating -##### 3.2.3.1 Rules - -If all of `tagColumn`, `fieldColumn` and `timestampColumn` are offered in writer configuration, then target super table will be created automatically. -The type of tag columns will always be `NCHAR(64)`. The sample setting above will produce following sql: - -```sql -CREATE STABLE IF NOT EXISTS market_snapshot ( - tadetime TIMESTAMP, - lastprice DOUBLE, - askprice1 DOUBLE, - bidprice1 DOUBLE, - volume INT -) -TAGS( - industry NCHAR(64), - stockID NCHAR(64) -); -``` - -##### 3.2.3.2 Sub-table Creating Rules - -The structure of sub-tables are the same with structure of super table. The names of sub-tables are generated by rules below: -1. combine value of tags like this:`tag_value1!tag_value2!tag_value3`. -2. compute md5 hash hex of above string, named `md5val` -3. use "t_md5val" as sub-table name, in which "t" is fixed prefix. - -#### 3.2.4 Use Pre-created Table - -If you have created super table firstly, then all of tagColumn, fieldColumn and timestampColumn can be omitted. The writer plugin will get table schema by executing `describe stableName`. -The order of columns of records received by this plugin must be the same as the order of columns returned by `describe stableName`. For example, if you have super table as below: -``` - Field | Type | Length | Note | -================================================================================= - ts | TIMESTAMP | 8 | | - current | DOUBLE | 8 | | - location | BINARY | 10 | TAG | -``` -Then the first columns received by this writer plugin must represent timestamp, the second column must represent current with type double, the third column must represent location with internal type string. - -#### 3.2.5 Remarks - -1. Config keys --tagColumn, fieldColumn and timestampColumn, must be presented or omitted at the same time. -2. If above three config keys exist and the target table also exists, then the order of columns defined by the config file and the existed table must be the same. - -#### 3.2.6 Type Convert - -| MongoDB Type | DataX Type | TDengine Type | -| ---------------- | -------------- | ----------------- | -| int, Long | Long | BIGINT | -| double | Double | DOUBLE | -| string, array | String | NCHAR(64) | -| date | Date | TIMESTAMP | -| boolean | Boolean | BOOL | -| bytes | Bytes | BINARY(64) | - -### 3.3 From Relational Database to TDengine - -Take MySQl as example. - -#### 3.3.1 Table Structure in MySQL -```sql -CREATE TABLE IF NOT EXISTS weather( - station varchar(100), - latitude DOUBLE, - longtitude DOUBLE, - `date` DATE, - TMAX int, - TMIN int -) -``` - -#### 3.3.2 Sample Setting - -```json -{ - "job": { - "content": [ - { - "reader": { - "name": "mysqlreader", - "parameter": { - "username": "root", - "password": "passw0rd", + "password": "taosdata", "column": [ - "*" + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" ], - "splitPk": "station", "connection": [ { "table": [ "weather" ], - "jdbcUrl": [ - "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8" - ] + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" } - ] - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "host": "127.0.0.1", - "port": 6030, - "dbName": "test", - "username": "root", - "password": "taosdata", - "batchSize": 1000, - "stable": "weather", - "tagColumn": { - "station": 0 - }, - "fieldColumn": { - "latitude": 1, - "longtitude": 2, - "tmax": 4, - "tmin": 5 - }, - "timestampColumn":{ - "date": 3 - } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true } } } @@ -316,41 +119,79 @@ CREATE TABLE IF NOT EXISTS weather( } ``` +### 3.2 Configuration -## 4 Performance Test +* jdbcUrl + * Descrption: Data source JDBC connection information, TDengine JDBC information please refer to: [Java connector](https://www.taosdata.com/docs/cn/v2.0/connector/java#url) + * Required: yes + * Default: none +* username + * Descrption: username + * Required: yes + * Default: none + +* password + * Descrption: password of username + * Required: yes + * Default: none + +* table + * Descrption: A list of table names that should contain all of the columns in the column parameter (except tbname). Note that tbname in column is used as the TDengine sub-table name. + * Required: yes + * Default: none + +* column + * Descrption: A list of field names, the order of the fields should be the column in the record + * Required: yes + * Default: none + +* batchSize + * Descrption: Each batchSize record is written to a batch + * Required: no + * Default: 1 + +* ignoreTagsUnmatched + * Descrption: When table is a sub-table in TDengine, table has a tag value. If the tag value of the data and the tag value of the table are not equal, the data is not written to the table. + * Required: no + * Default: false + + +#### 3.3 Type Convert + +Data types in datax that can be mapped to data types in TDengine + +| DataX Type | TDengine Type | +| ---------- | ----------------------------------------- | +| INT | TINYINT, SMALLINT, INT | +| LONG | TIMESTAMP, TINYINT, SMALLINT, INT, BIGINT | +| DOUBLE | FLOAT, DOUBLE | +| STRING | TIMESTAMP, BINARY, NCHAR | +| BOOL | BOOL | +| DATE | TIMESTAMP | +| BYTES | BINARY | + +### 3.2 From MongoDB to TDengine + +Here are some examples of data sources migrating to TDengine + +| Sample | Configuration | +| -------------------- | ------------------------------------------------------------ | +| TDengine to TDengine | [super table to super table with tbname](../src/test/resources/t2t-1.json) | +| TDengine to TDengine | [super table to super table without tbname](../src/test/resources/t2t-2.json) | +| TDengine to TDengine | [super table to sub-table](../src/test/resources/t2t-3.json) | +| TDengine to TDengine | [table to table](../src/test/resources/t2t-4.json) | +| RDBMS to TDengine | [table to super table with tbname](../src/test/resources/dm2t-1.json) | +| RDBMS to TDengine | [table to super table without tbname](../src/test/resources/dm2t-2.json) | +| RDBMS to TDengine | [table to sub-table](../src/test/resources/dm2t-3.json) | +| RDBMS to TDengine | [table to table](../src/test/resources/dm2t-4.json) | +| OpenTSDB to TDengine | [metric to table](../src/test/resources/o2t-1.json) | + +## 4 Restriction -## 5 Restriction -1. NCHAR type has fixed length 64 when auto creating stable. -2. Rows have null tag values will be dropped. ## FAQ -### How to filter on source table? - -It depends on reader plugin. For different reader plugins, the way may be different. - -### How to import multiple source tables at once? - -It depends on reader plugin. If the reader plugin supports reading multiple tables at once, then there is no problem. - -### How many sub-tables will be produced? - -The number of sub-tables is determined by tagColumns, equals to the number of different combinations of tag values. - ### Do columns in source table and columns in target table must be in the same order? -No. TDengine require the first column has timestamp type,which is followed by data columns, followed by tag columns. The writer plugin will create super table in this column order, regardless of origin column orders. - -### How dose the plugin infer the data type of incoming data? - -By the first batch of records it received. - -### Why can't I insert data of 10 years ago? Do this will get error: `TDengine ERROR (2350): failed to execute batch bind`. - -Because the database you created only keep 10 years data by default, you can create table like this: `CREATE DATABASE power KEEP 36500;`, in order to enlarge the time period to 100 years. - - -### What should I do if some dependencies of a plugin can't be found? - -I this plugin is not necessary for you, just remove it from pom.xml under project's root directory. +Yes, TDengineWriter parses the data from the Datax in the order of the fields in the column. From 788cca5ab95d485881c883114f9021887b24229f Mon Sep 17 00:00:00 2001 From: zyyang Date: Mon, 21 Feb 2022 13:43:57 +0800 Subject: [PATCH 153/251] change --- .../tdenginewriter/Stream2TDengineTest.java | 4 ++-- .../src/test/resources/defaultJob.json | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java index cfd77fdf..e54bcbde 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java @@ -12,7 +12,6 @@ import java.sql.Statement; public class Stream2TDengineTest { private String host2 = "192.168.56.105"; - private String precision; @Test public void s2t_case1() throws Throwable { @@ -56,7 +55,8 @@ public class Stream2TDengineTest { stmt.execute("drop database if exists db2"); stmt.execute("create database if not exists db2 precision '" + precision + "'"); stmt.execute("create table db2.stb2(ts1 timestamp, ts2 timestamp,ts3 timestamp,ts4 timestamp,ts5 timestamp," + - "ts6 timestamp,ts7 timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, f6 double," + + "ts6 timestamp,ts7 timestamp, ts8 timestamp, ts9 timestamp, ts10 timestamp, f1 tinyint, f2 smallint," + + "f3 int, f4 bigint, f5 float, f6 double," + "f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp,t2 timestamp,t3 timestamp,t4 timestamp," + "t5 timestamp,t6 timestamp,t7 timestamp, t8 tinyint, t9 smallint, t10 int, t11 bigint, t12 float," + "t13 double, t14 bool, t15 binary(100), t16 nchar(100))"); diff --git a/tdenginewriter/src/test/resources/defaultJob.json b/tdenginewriter/src/test/resources/defaultJob.json index 2548fc94..2a36dfd0 100644 --- a/tdenginewriter/src/test/resources/defaultJob.json +++ b/tdenginewriter/src/test/resources/defaultJob.json @@ -41,6 +41,18 @@ "type": "string", "value": "2022-02-20 12:00:07.123456789" }, + { + "type": "long", + "value": 1645329608000 + }, + { + "type": "long", + "value": 1645329609000000 + }, + { + "type": "long", + "value": 1645329610000000000 + }, { "type": "long", "random": "0, 10" @@ -75,7 +87,7 @@ }, { "type": "string", - "random": "0, 10" + "random": "10, 50" }, { "type": "date", @@ -162,6 +174,9 @@ "ts5", "ts6", "ts7", + "ts8", + "ts9", + "ts10", "f1", "f2", "f3", From e1590952ec56402a753a0feb8344eef581efcc93 Mon Sep 17 00:00:00 2001 From: dingbo Date: Mon, 21 Feb 2022 14:37:14 +0800 Subject: [PATCH 154/251] add TDengine to README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fe5d122c..3cc8f799 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | | Elasticsearch | | √ |[写](https://github.com/alibaba/DataX/blob/master/elasticsearchwriter/doc/elasticsearchwriter.md)| | 时间序列数据库 | OpenTSDB | √ | |[读](https://github.com/alibaba/DataX/blob/master/opentsdbreader/doc/opentsdbreader.md)| | | TSDB | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/tsdbreader/doc/tsdbreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/tsdbwriter/doc/tsdbhttpwriter.md)| +| | TDengine | √ | √ |[读](https://github.com/taosdata/DataX/blob/master/tdenginereader/doc/tdenginereader.md) 、[写](https://github.com/taosdata/DataX/blob/master/tdenginewriter/doc/tdenginewriter-CN.md)| # 阿里云DataWorks数据集成 From b55d26dca7630cbcb12fea7e54424268828f3332 Mon Sep 17 00:00:00 2001 From: zyyang Date: Mon, 21 Feb 2022 17:05:56 +0800 Subject: [PATCH 155/251] tdengine writer rebuild --- tdenginewriter/pom.xml | 15 --------------- .../writer/tdenginewriter/DM2TDengineTest.java | 2 ++ .../tdenginewriter/DefaultDataHandlerTest.java | 6 ++---- .../writer/tdenginewriter/Mysql2TDengineTest.java | 2 ++ .../tdenginewriter/Opentsdb2TDengineTest.java | 2 ++ .../writer/tdenginewriter/SchemaManagerTest.java | 7 ++----- .../tdenginewriter/Stream2TDengineTest.java | 3 ++- .../tdenginewriter/TDengine2TDengineTest.java | 2 ++ 8 files changed, 14 insertions(+), 25 deletions(-) diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 97c750db..05fcd4d8 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -68,21 +68,6 @@ 0.0.1-SNAPSHOT test
- - mysql - mysql-connector-java - 5.1.49 - test - - - - com.dameng - dm-jdbc - 1.8 - system - ${project.basedir}/src/test/resources/DmJdbcDriver18.jar - - diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java index 0eb91deb..2ee02ff3 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java @@ -2,6 +2,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.sql.*; @@ -9,6 +10,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; +@Ignore public class DM2TDengineTest { private String host1 = "192.168.0.72"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index 3657a4f7..75debe3c 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -6,10 +6,7 @@ import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.element.StringColumn; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.core.transport.record.DefaultRecord; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.*; import java.sql.Connection; import java.sql.DriverManager; @@ -20,6 +17,7 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; +@Ignore public class DefaultDataHandlerTest { private static final String host = "192.168.1.93"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java index 4a662711..8cbc2d90 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java @@ -2,12 +2,14 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Random; +@Ignore public class Mysql2TDengineTest { private static final String host1 = "192.168.56.105"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java index ad326f7e..0d212e8a 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java @@ -2,10 +2,12 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import java.sql.*; +@Ignore public class Opentsdb2TDengineTest { @Test diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java index 6df0de1d..fac1e0f7 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java @@ -1,10 +1,6 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; -import com.alibaba.fastjson.util.TypeUtils; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.*; import java.sql.Connection; import java.sql.DriverManager; @@ -14,6 +10,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +@Ignore public class SchemaManagerTest { private static Connection conn; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java index e54bcbde..613d2aa9 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java @@ -1,7 +1,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; -import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.sql.Connection; @@ -9,6 +9,7 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +@Ignore public class Stream2TDengineTest { private String host2 = "192.168.56.105"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java index 9e954633..18efdc14 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java @@ -2,12 +2,14 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Random; +@Ignore public class TDengine2TDengineTest { private static final String host1 = "192.168.56.105"; From ea488d20c4fff89588b5c76a2cfb8048e014e4c1 Mon Sep 17 00:00:00 2001 From: Zhiyu Yang <69311263+zyyang-taosdata@users.noreply.github.com> Date: Thu, 24 Feb 2022 16:59:25 +0800 Subject: [PATCH 156/251] Update DefaultDataHandler.java --- .../writer/tdenginewriter/DefaultDataHandler.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 4068be42..970be3a5 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -47,6 +47,16 @@ public class DefaultDataHandler implements DataHandler { private Map> columnMetas; + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + public DefaultDataHandler(Configuration configuration) { this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); this.password = configuration.getString(Key.PASSWORD, Constants.DEFAULT_PASSWORD); @@ -460,4 +470,4 @@ public class DefaultDataHandler implements DataHandler { "cannot find col: " + colName + " in columns: " + columns); } -} \ No newline at end of file +} From 740bf010e82db0c2a2afa96dde91a8cfdf913619 Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 25 Feb 2022 10:11:54 +0800 Subject: [PATCH 157/251] [TS-1219]: incremental synchronization scripts of datax --- ...tdenginereader.md => tdenginereader-CN.md} | 17 +- tdenginereader/pom.xml | 34 +++ .../com/alibaba/datax/plugin/reader/Key.java | 19 -- .../datax/plugin/reader/TDengineReader.java | 216 ++++++++---------- .../reader/TDengineReaderErrorCode.java | 7 +- .../datax/plugin/reader/TDengine2DMTest.java | 87 +++++++ .../plugin/reader/TDengineReaderTest.java | 106 ++++++--- tdenginereader/src/test/resources/t2dm.json | 50 ++++ tdenginewriter/pom.xml | 16 +- .../tdenginewriter/DefaultDataHandler.java | 10 + .../plugin/writer/tdenginewriter/Key.java | 3 + .../writer/tdenginewriter/SchemaManager.java | 2 +- .../writer/tdenginewriter/TDengineWriter.java | 2 +- .../tdenginewriter/DM2TDengineTest.java | 2 +- .../resources/incremental_sync/clean_env.sh | 9 + .../incremental_sync/dm2t-update.json | 63 +++++ .../resources/incremental_sync/dm2t_sync.sh | 57 +++++ .../test/resources/incremental_sync/upload.sh | 5 + 18 files changed, 511 insertions(+), 194 deletions(-) rename tdenginereader/doc/{tdenginereader.md => tdenginereader-CN.md} (88%) delete mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java create mode 100644 tdenginereader/src/test/resources/t2dm.json create mode 100755 tdenginewriter/src/test/resources/incremental_sync/clean_env.sh create mode 100644 tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json create mode 100755 tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh create mode 100755 tdenginewriter/src/test/resources/incremental_sync/upload.sh diff --git a/tdenginereader/doc/tdenginereader.md b/tdenginereader/doc/tdenginereader-CN.md similarity index 88% rename from tdenginereader/doc/tdenginereader.md rename to tdenginereader/doc/tdenginereader-CN.md index 3c683a64..fe0e4877 100644 --- a/tdenginereader/doc/tdenginereader.md +++ b/tdenginereader/doc/tdenginereader-CN.md @@ -37,8 +37,7 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 "phase" ], "beginDateTime": "2017-07-14 10:40:00", - "endDateTime": "2017-08-14 10:40:00", - "splitInterval": "1d" + "endDateTime": "2017-08-14 10:40:00" } }, "writer": { @@ -79,17 +78,12 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 * 必选:是
* 默认值:无
* **beginDateTime** - * 描述:数据的开始时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
- * 必选:是
+ * 描述:数据的开始时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss,如果不填为全量同步
+ * 必选:否
* 默认值:无
* **endDateTime** - * 描述:数据的结束时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss
- * 必选:是
- * 默认值:无
-* **splitInterval** - * 描述:按照splitInterval来划分task, 每splitInterval创建一个task。例如,20d代表按照每20天的数据划分为1个task。 - 可以配置的时间单位为:d(天), h(小时), m(分钟), s(秒)
- * 必选:是
+ * 描述:数据的结束时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss,如果不填为全量同步
+ * 必选:否
* 默认值:无
### 3.3 类型转换 @@ -106,7 +100,6 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 | BINARY | Bytes | | NCHAR | String | - ## 4 性能报告 ### 4.1 环境准备 diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml index ca444bce..69ea0c0d 100644 --- a/tdenginereader/pom.xml +++ b/tdenginereader/pom.xml @@ -29,10 +29,29 @@ + + com.alibaba + fastjson + 1.2.78 + + + + com.alibaba.datax.tdenginewriter + tdenginewriter + 0.0.1-SNAPSHOT + compile + + com.taosdata.jdbc taos-jdbcdriver 2.0.37 + + + com.alibaba + fastjson + + @@ -47,6 +66,21 @@ 0.0.1-SNAPSHOT compile + + + com.alibaba.datax + datax-core + 0.0.1-SNAPSHOT + test + + + + com.dameng + dm-jdbc + 1.8 + system + ${project.basedir}/src/test/resources/DmJdbcDriver18.jar + diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java deleted file mode 100644 index 95b55386..00000000 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/Key.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.alibaba.datax.plugin.reader; - -public class Key { - - public static final String JDBC_URL = "jdbcUrl"; -// public static final String HOST = "host"; -// public static final String PORT = "port"; -// public static final String DB = "db"; - public static final String TABLE = "table"; - public static final String USER = "username"; - public static final String PASSWORD = "password"; - public static final String CONNECTION = "connection"; -// public static final String SQL = "sql"; - public static final String BEGIN_DATETIME = "beginDateTime"; - public static final String END_DATETIME = "endDateTime"; - public static final String SPLIT_INTERVAL = "splitInterval"; - public static final String COLUMN = "column"; - public static final String MANDATORY_ENCODING = "mandatoryEncoding"; -} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index f00d879f..6c2f1223 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -1,13 +1,11 @@ package com.alibaba.datax.plugin.reader; -import com.alibaba.datax.common.constant.CommonConstant; import com.alibaba.datax.common.element.*; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordSender; import com.alibaba.datax.common.spi.Reader; import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.alibaba.fastjson.JSON; +import com.alibaba.datax.plugin.writer.tdenginewriter.Key; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,84 +20,77 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class TDengineReader extends Reader { + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static class Job extends Reader.Job { - private static final Logger LOG = LoggerFactory.getLogger(Job.class); private Configuration originalConfig; @Override public void init() { this.originalConfig = super.getPluginJobConf(); - // check user - String user = this.originalConfig.getString(Key.USER); - if (StringUtils.isBlank(user)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.USER + "] is not set."); + // check username + String username = this.originalConfig.getString(Key.USERNAME); + if (StringUtils.isBlank(username)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.USERNAME + "] is not set."); // check password String password = this.originalConfig.getString(Key.PASSWORD); if (StringUtils.isBlank(password)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.PASSWORD + "] is not set."); - - SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); - // check beginDateTime - String beginDatetime = this.originalConfig.getString(Key.BEGIN_DATETIME); - if (StringUtils.isBlank(beginDatetime)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] is not set."); - Long start; - try { - start = format.parse(beginDatetime).getTime(); - } catch (ParseException e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); - } - - // check endDateTime - String endDatetime = this.originalConfig.getString(Key.END_DATETIME); - if (StringUtils.isBlank(endDatetime)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.END_DATETIME + "] is not set."); - Long end; - try { - end = format.parse(endDatetime).getTime(); - } catch (ParseException e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.END_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); - } - if (start >= end) - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); - - // check splitInterval - String splitInterval = this.originalConfig.getString(Key.SPLIT_INTERVAL); - Long split; - if (StringUtils.isBlank(splitInterval)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] is not set."); - try { - split = parseSplitInterval(splitInterval); - } catch (Exception e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.SPLIT_INTERVAL + "] should be like: \"123d|h|m|s\", error: " + e.getMessage()); - } - - this.originalConfig.set(Key.BEGIN_DATETIME, start); - this.originalConfig.set(Key.END_DATETIME, end); - this.originalConfig.set(Key.SPLIT_INTERVAL, split); + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.PASSWORD + "] is not set."); // check connection List connection = this.originalConfig.getList(Key.CONNECTION); if (connection == null || connection.isEmpty()) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set."); + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.CONNECTION + "] is not set."); for (int i = 0; i < connection.size(); i++) { Configuration conn = Configuration.from(connection.get(i).toString()); List table = conn.getList(Key.TABLE); if (table == null || table.isEmpty()) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); String jdbcUrl = conn.getString(Key.JDBC_URL); if (StringUtils.isBlank(jdbcUrl)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); } - // check column List column = this.originalConfig.getList(Key.COLUMN); if (column == null || column.isEmpty()) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set or is empty."); + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.CONNECTION + "] is not set or is empty."); + + SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); + // check beginDateTime + String beginDatetime = this.originalConfig.getString(Key.BEGIN_DATETIME); + long start = Long.MIN_VALUE; + if (!StringUtils.isBlank(beginDatetime)) { + try { + start = format.parse(beginDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.BEGIN_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + } + // check endDateTime + String endDatetime = this.originalConfig.getString(Key.END_DATETIME); + long end = Long.MAX_VALUE; + if (!StringUtils.isBlank(endDatetime)) { + try { + end = format.parse(endDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.END_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + } + if (start >= end) + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); + } @Override @@ -110,78 +101,58 @@ public class TDengineReader extends Reader { @Override public List split(int adviceNumber) { List configurations = new ArrayList<>(); - // do split - Long start = this.originalConfig.getLong(Key.BEGIN_DATETIME); - Long end = this.originalConfig.getLong(Key.END_DATETIME); - Long split = this.originalConfig.getLong(Key.SPLIT_INTERVAL); - List conns = this.originalConfig.getList(Key.CONNECTION); - - for (Long ts = start; ts < end; ts += split) { - for (int i = 0; i < conns.size(); i++) { - Configuration clone = this.originalConfig.clone(); - clone.remove(Key.SPLIT_INTERVAL); - - clone.set(Key.BEGIN_DATETIME, ts); - clone.set(Key.END_DATETIME, Math.min(ts + split, end)); - - Configuration conf = Configuration.from(conns.get(i).toString()); - String jdbcUrl = conf.getString(Key.JDBC_URL); - clone.set(Key.JDBC_URL, jdbcUrl); - clone.set(Key.TABLE, conf.getList(Key.TABLE)); - - // 抽取 jdbcUrl 中的 ip/port 进行资源使用的打标,以提供给 core 做有意义的 shuffle 操作 - clone.set(CommonConstant.LOAD_BALANCE_RESOURCE_MARK, DataBaseType.parseIpFromJdbcUrl(jdbcUrl)); - clone.remove(Key.CONNECTION); - - configurations.add(clone); - LOG.info("Configuration: {}", JSON.toJSONString(clone)); - } + List connectionList = this.originalConfig.getList(Key.CONNECTION); + for (Object conn : connectionList) { + Configuration clone = this.originalConfig.clone(); + Configuration conf = Configuration.from(conn.toString()); + String jdbcUrl = conf.getString(Key.JDBC_URL); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conf.getList(Key.TABLE)); + clone.remove(Key.CONNECTION); + configurations.add(clone); } + + LOG.info("Configuration: {}", configurations); return configurations; } } public static class Task extends Reader.Task { private static final Logger LOG = LoggerFactory.getLogger(Task.class); - private Connection conn; - private Long startTime; - private Long endTime; + private Configuration readerSliceConfig; + private Connection conn; private List tables; private List columns; - private String mandatoryEncoding; + + private String startTime; + private String endTime; @Override public void init() { - Configuration readerSliceConfig = super.getPluginJobConf(); - LOG.info("getPluginJobConf: {}", JSON.toJSONString(readerSliceConfig)); + this.readerSliceConfig = super.getPluginJobConf(); + LOG.info("getPluginJobConf: {}", readerSliceConfig); String url = readerSliceConfig.getString(Key.JDBC_URL); if (StringUtils.isBlank(url)) throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.JDBC_URL + "] is not set."); - - tables = readerSliceConfig.getList(Key.TABLE, String.class); - columns = readerSliceConfig.getList(Key.COLUMN, String.class); - - String user = readerSliceConfig.getString(Key.USER); + String user = readerSliceConfig.getString(Key.USERNAME); String password = readerSliceConfig.getString(Key.PASSWORD); - try { - conn = DriverManager.getConnection(url, user, password); + this.conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { throw DataXException.asDataXException(TDengineReaderErrorCode.CONNECTION_FAILED, - "The parameter [" + Key.JDBC_URL + "] : " + url + " failed to connect since: " + e.getMessage()); + "The parameter [" + Key.JDBC_URL + "] : " + url + " failed to connect since: " + e.getMessage(), e); } - this.mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); - - startTime = readerSliceConfig.getLong(Key.BEGIN_DATETIME); - endTime = readerSliceConfig.getLong(Key.END_DATETIME); + this.tables = readerSliceConfig.getList(Key.TABLE, String.class); + this.columns = readerSliceConfig.getList(Key.COLUMN, String.class); + this.startTime = readerSliceConfig.getString(Key.BEGIN_DATETIME); + this.endTime = readerSliceConfig.getString(Key.END_DATETIME); } - @Override public void destroy() { @@ -189,18 +160,31 @@ public class TDengineReader extends Reader { @Override public void startRead(RecordSender recordSender) { + try (Statement stmt = conn.createStatement()) { for (String table : tables) { - String sql = "select " + StringUtils.join(columns, ",") + " from " + table - + " where _c0 >= " + startTime + " and _c0 < " + endTime; + StringBuilder sb = new StringBuilder(); + sb.append("select ").append(StringUtils.join(columns, ",")) + .append(" from ").append(table).append(" "); + + if (StringUtils.isBlank(startTime)) { + sb.append("where _c0 >= ").append(Long.MIN_VALUE); + } else { + sb.append("where _c0 >= '").append(startTime).append("'"); + } + if (!StringUtils.isBlank(endTime)) { + sb.append(" and _c0 < '").append(endTime).append("'"); + } + + String sql = sb.toString(); ResultSet rs = stmt.executeQuery(sql); - ResultSetMetaData metaData = rs.getMetaData(); while (rs.next()) { - transportOneRecord(recordSender, rs, metaData, metaData.getColumnCount(), this.mandatoryEncoding); + Record record = buildRecord(recordSender, rs, "UTF-8"); + recordSender.sendToWriter(record); } } } catch (SQLException e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + throw DataXException.asDataXException(TDengineReaderErrorCode.RUNTIME_EXCEPTION, e.getMessage(), e); } finally { try { if (conn != null) @@ -211,17 +195,11 @@ public class TDengineReader extends Reader { } } - private Record transportOneRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { - Record record = buildRecord(recordSender, rs, metaData, columnCount, mandatoryEncoding); - recordSender.sendToWriter(record); - return record; - } - - private Record buildRecord(RecordSender recordSender, ResultSet rs, ResultSetMetaData metaData, int columnCount, String mandatoryEncoding) { + private Record buildRecord(RecordSender recordSender, ResultSet rs, String mandatoryEncoding) { Record record = recordSender.createRecord(); - try { - for (int i = 1; i <= columnCount; i++) { + ResultSetMetaData metaData = rs.getMetaData(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { int columnType = metaData.getColumnType(i); switch (columnType) { case Types.SMALLINT: @@ -261,16 +239,16 @@ public class TDengineReader extends Reader { } } - private static final long second = 1000; - private static final long minute = 60 * second; - private static final long hour = 60 * minute; - private static final long day = 24 * hour; - private static Long parseSplitInterval(String splitInterval) throws Exception { + final long second = 1000; + final long minute = 60 * second; + final long hour = 60 * minute; + final long day = 24 * hour; + Pattern compile = Pattern.compile("^(\\d+)([dhms])$"); Matcher matcher = compile.matcher(splitInterval); while (matcher.find()) { - Long value = Long.valueOf(matcher.group(1)); + long value = Long.parseLong(matcher.group(1)); if (value == 0) throw new Exception("invalid splitInterval: 0"); char unit = matcher.group(2).charAt(0); diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java index 68bc11e7..b784ab06 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java @@ -4,9 +4,10 @@ import com.alibaba.datax.common.spi.ErrorCode; public enum TDengineReaderErrorCode implements ErrorCode { - REQUIRED_VALUE("TDengineReader-00", "缺失必要的值"), - ILLEGAL_VALUE("TDengineReader-01", "值非法"), - CONNECTION_FAILED("TDengineReader-02", "连接错误"); + REQUIRED_VALUE("TDengineReader-00", "parameter value is missing"), + ILLEGAL_VALUE("TDengineReader-01", "invalid parameter value"), + CONNECTION_FAILED("TDengineReader-02", "connection error"), + RUNTIME_EXCEPTION("TDengineWriter-03", "runtime exception"); private final String code; private final String description; diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java new file mode 100644 index 00000000..d9099e01 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java @@ -0,0 +1,87 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Random; + +@Ignore +public class TDengine2DMTest { + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.0.72"; + + private final Random random = new Random(System.currentTimeMillis()); + + @Test + public void t2dm_case01() throws Throwable { + // given + createSupTable("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void t2dm_case02() throws Throwable { + // given + createSupTable("us"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void t2dm_case03() throws Throwable { + // given + createSupTable("ns"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createSupTable(String precision) throws SQLException { + final String url = "jdbc:TAOS-RS://" + host1 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1 precision '" + precision + "'"); + stmt.execute("create table db1.stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(100))"); + + for (int i = 1; i <= 10; i++) { + stmt.execute("insert into db1.tb" + i + " using db1.stb1 tags(now, " + random.nextInt(10) + "," + + random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextInt(10) + "," + + random.nextFloat() + "," + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123'," + + "'北京朝阳望京') values(now+" + i + "s, " + random.nextInt(10) + "," + random.nextInt(10) + "," + + +random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123','北京朝阳望京')"); + } + stmt.close(); + } + + final String url2 = "jdbc:dm://" + host2 + ":5236"; + try (Connection conn = DriverManager.getConnection(url2, "TESTUSER", "test123456")) { + conn.setAutoCommit(true); + Statement stmt = conn.createStatement(); + stmt.execute("drop table if exists stb2"); + stmt.execute("create table stb2(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 BIT, f8 VARCHAR(100), f9 VARCHAR2(200), t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 BIT, t9 VARCHAR(100), t10 VARCHAR2(200))"); + } + } + +} diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java index d51d4229..da980c5f 100644 --- a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java @@ -1,72 +1,118 @@ package com.alibaba.datax.plugin.reader; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.tdenginewriter.Key; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.List; public class TDengineReaderTest { - TDengineReader.Job job; - - @Before - public void before() { - job = new TDengineReader.Job(); + @Test + public void jobInit_case01() { + // given + TDengineReader.Job job = new TDengineReader.Job(); Configuration configuration = Configuration.from("{" + - "\"user\": \"root\"," + + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + - "\"endDateTime\": \"2021-01-01 12:00:00\"," + - "\"splitInterval\": \"1h\"" + + "\"endDateTime\": \"2021-01-01 12:00:00\"" + "}"); job.setPluginJobConf(configuration); - } - @Test - public void jobInit() throws ParseException { // when job.init(); // assert Configuration conf = job.getPluginJobConf(); - Assert.assertEquals("root", conf.getString("user")); + Assert.assertEquals("root", conf.getString(Key.USERNAME)); Assert.assertEquals("taosdata", conf.getString("password")); Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + Assert.assertEquals("2021-01-01 00:00:00", conf.getString("beginDateTime")); + Assert.assertEquals("2021-01-01 12:00:00", conf.getString("endDateTime")); + } - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Long start = sdf.parse("2021-01-01 00:00:00").getTime(); - Assert.assertEquals(start, conf.getLong("beginDateTime")); + @Test + public void jobInit_case02() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]" + + "}"); + job.setPluginJobConf(configuration); - Long end = sdf.parse("2021-01-01 12:00:00").getTime(); - Assert.assertEquals(end, conf.getLong("endDateTime")); + // when + job.init(); - Assert.assertEquals(new Long(3600 * 1000), conf.getLong("splitInterval")); + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString(Key.USERNAME)); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); } @Test - public void jobSplit() { + public void jobSplit_case01() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + + "\"endDateTime\": \"2021-01-01 12:00:00\"" + + "}"); + job.setPluginJobConf(configuration); + // when job.init(); List configurationList = job.split(1); // assert - Assert.assertEquals(12, configurationList.size()); - for (int i = 0; i < configurationList.size(); i++) { - Configuration conf = configurationList.get(i); - Assert.assertEquals("root", conf.getString("user")); - Assert.assertEquals("taosdata", conf.getString("password")); - Assert.assertEquals("weather", conf.getString("table[0]")); - Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); - } + Assert.assertEquals(1, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + + } + + @Test + public void jobSplit_case02() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(1, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); } } \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2dm.json b/tdenginereader/src/test/resources/t2dm.json new file mode 100644 index 00000000..b2cf91e2 --- /dev/null +++ b/tdenginereader/src/test/resources/t2dm.json @@ -0,0 +1,50 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1" + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 97c750db..791a4bdc 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -75,14 +75,14 @@ test - - com.dameng - dm-jdbc - 1.8 - system - ${project.basedir}/src/test/resources/DmJdbcDriver18.jar - - + + + + + + + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 4068be42..a8196153 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -19,6 +19,15 @@ import java.util.Date; import java.util.stream.Collectors; public class DefaultDataHandler implements DataHandler { + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); private String username; @@ -62,6 +71,7 @@ public class DefaultDataHandler implements DataHandler { int count = 0; int affectedRows = 0; + try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); // prepare table_name -> table_meta diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index 1d7ee214..b95ff584 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -9,4 +9,7 @@ public class Key { public static final String JDBC_URL = "jdbcUrl"; public static final String COLUMN = "column"; public static final String IGNORE_TAGS_UNMATCHED = "ignoreTagsUnmatched"; + + public static final String BEGIN_DATETIME = "beginDateTime"; + public static final String END_DATETIME = "endDateTime"; } \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index 63d67a2a..c48b7942 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -17,7 +17,7 @@ public class SchemaManager { private final Connection conn; private TimestampPrecision precision; - SchemaManager(Connection conn) { + public SchemaManager(Connection conn) { this.conn = conn; } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java index 7cc76a77..eb538022 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -25,7 +25,7 @@ public class TDengineWriter extends Writer { this.originalConfig = super.getPluginJobConf(); this.originalConfig.set(PEER_PLUGIN_NAME, getPeerPluginName()); - // check user + // check username String user = this.originalConfig.getString(Key.USERNAME); if (StringUtils.isBlank(user)) throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java index 0eb91deb..15f6b1bc 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java @@ -99,7 +99,7 @@ public class DM2TDengineTest { } @Before - public void before() throws SQLException, ClassNotFoundException { + public void before() throws SQLException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); long ts = System.currentTimeMillis(); diff --git a/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh b/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh new file mode 100755 index 00000000..f3dca7c1 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +datax_home_dir=$(dirname $(readlink -f "$0")) + +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'drop table if exists db2.stb2;' 192.168.1.93:6041/rest/sql +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create table if not exists db2.stb2 (`ts` TIMESTAMP,`f2` SMALLINT,`f4` BIGINT,`f5` FLOAT,`f6` DOUBLE,`f7` DOUBLE,`f8` BOOL,`f9` NCHAR(100),`f10` NCHAR(200)) TAGS (`f1` TINYINT,`f3` INT);' 192.168.1.93:6041/rest/sql + +rm -f ${datax_home_dir}/log/* +rm -f ${datax_home_dir}/job/*.csv \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json b/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json new file mode 100644 index 00000000..d9285b23 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json @@ -0,0 +1,63 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "where": "1=1", + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh b/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh new file mode 100755 index 00000000..426c6233 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -e +#set -x + +datax_home_dir=$(dirname $(readlink -f "$0")) +table_name="stb1" +update_key="ts" + +while getopts "hd:t:" arg; do + case $arg in + d) + datax_home_dir=$(echo $OPTARG) + ;; + v) + table_name=$(echo $OPTARG) + ;; + h) + echo "Usage: $(basename $0) -d [datax_home_dir] -t [table_name] -k [update_key]" + echo " -h help" + exit 0 + ;; + ?) #unknow option + echo "unkonw argument" + exit 1 + ;; + esac +done + +if [[ -e ${datax_home_dir}/job/${table_name}.csv ]]; then + MAX_TIME=$(cat ${datax_home_dir}/job/${table_name}.csv) +else + MAX_TIME="null" +fi +current_datetime=$(date +"%Y-%m-%d %H:%M:%S") +current_timestamp=$(date +%s) + +if [ "$MAX_TIME" != "null" ]; then + WHERE="${update_key} >= '$MAX_TIME' and ${update_key} < '$current_datetime'" + sed "s/1=1/$WHERE/g" ${datax_home_dir}/job/dm2t-update.json >${datax_home_dir}/job/dm2t_${current_timestamp}.json + echo "incremental data synchronization, from '${MAX_TIME}' to '${current_datetime}'" + python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t_${current_timestamp}.json 1> /dev/null 2>&1 +else + echo "full data synchronization, to '${current_datetime}'" + python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t-update.json 1> /dev/null 2>&1 +fi + +if [[ $? -ne 0 ]]; then + echo "datax migration job falied" +else + echo ${current_datetime} >$datax_home_dir/job/${table_name}.csv + echo "datax migration job success" +fi + +rm -rf ${datax_home_dir}/job/dm2t_${current_timestamp}.json + +#while true; do ./dm2t_sync.sh; sleep 5s; done \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/upload.sh b/tdenginewriter/src/test/resources/incremental_sync/upload.sh new file mode 100755 index 00000000..c7d11ca1 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/upload.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +scp dm2t-update.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp dm2t_sync.sh root@192.168.56.105:/root/workspace/tmp/datax +scp clean_env.sh root@192.168.56.105:/root/workspace/tmp/datax \ No newline at end of file From 3d35c224247e2ecb0d91a25c403a6aafeb7d45fe Mon Sep 17 00:00:00 2001 From: zyyang Date: Fri, 25 Feb 2022 10:18:04 +0800 Subject: [PATCH 158/251] change --- tdenginereader/pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml index 69ea0c0d..319152f8 100644 --- a/tdenginereader/pom.xml +++ b/tdenginereader/pom.xml @@ -74,13 +74,13 @@ test - - com.dameng - dm-jdbc - 1.8 - system - ${project.basedir}/src/test/resources/DmJdbcDriver18.jar - + + + + + + + From 3b7bf92edf1957b28625e6f92ccae58f2e38859c Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 2 Mar 2022 16:08:07 +0800 Subject: [PATCH 159/251] invoke load driver in static block --- .../datax/plugin/reader/TDengineReader.java | 33 +++--------- .../resources/incremental_sync/t2dm-jni.json | 50 +++++++++++++++++++ .../incremental_sync/t2dm-restful.json | 50 +++++++++++++++++++ .../test/resources/incremental_sync/upload.sh | 3 +- 4 files changed, 108 insertions(+), 28 deletions(-) create mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index 6c2f1223..aea75f83 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -16,8 +16,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class TDengineReader extends Reader { @@ -239,32 +237,13 @@ public class TDengineReader extends Reader { } } - private static Long parseSplitInterval(String splitInterval) throws Exception { - final long second = 1000; - final long minute = 60 * second; - final long hour = 60 * minute; - final long day = 24 * hour; - - Pattern compile = Pattern.compile("^(\\d+)([dhms])$"); - Matcher matcher = compile.matcher(splitInterval); - while (matcher.find()) { - long value = Long.parseLong(matcher.group(1)); - if (value == 0) - throw new Exception("invalid splitInterval: 0"); - char unit = matcher.group(2).charAt(0); - switch (unit) { - case 'd': - return value * day; - default: - case 'h': - return value * hour; - case 'm': - return value * minute; - case 's': - return value * second; - } + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); } - throw new Exception("invalid splitInterval: " + splitInterval); } } diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json new file mode 100644 index 00000000..341f6293 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json @@ -0,0 +1,50 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/db1" + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json new file mode 100644 index 00000000..b2cf91e2 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json @@ -0,0 +1,50 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1" + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/upload.sh b/tdenginewriter/src/test/resources/incremental_sync/upload.sh index c7d11ca1..9b2a35e3 100755 --- a/tdenginewriter/src/test/resources/incremental_sync/upload.sh +++ b/tdenginewriter/src/test/resources/incremental_sync/upload.sh @@ -2,4 +2,5 @@ scp dm2t-update.json root@192.168.56.105:/root/workspace/tmp/datax/job scp dm2t_sync.sh root@192.168.56.105:/root/workspace/tmp/datax -scp clean_env.sh root@192.168.56.105:/root/workspace/tmp/datax \ No newline at end of file +scp clean_env.sh root@192.168.56.105:/root/workspace/tmp/datax +scp \ No newline at end of file From c5c41de1b18ba635a3bf23f62cf770846076acf0 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 2 Mar 2022 17:21:50 +0800 Subject: [PATCH 160/251] change --- .../datax/plugin/reader/TDengineReader.java | 18 +++--- .../resources/incremental_sync/clean_env.sh | 9 --- .../incremental_sync/dm2t-update.json | 63 ------------------- .../resources/incremental_sync/dm2t_sync.sh | 57 ----------------- .../resources/incremental_sync/t2dm-jni.json | 50 --------------- .../incremental_sync/t2dm-restful.json | 50 --------------- .../test/resources/incremental_sync/upload.sh | 6 -- 7 files changed, 10 insertions(+), 243 deletions(-) delete mode 100755 tdenginewriter/src/test/resources/incremental_sync/clean_env.sh delete mode 100644 tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json delete mode 100755 tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh delete mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json delete mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json delete mode 100755 tdenginewriter/src/test/resources/incremental_sync/upload.sh diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index aea75f83..0cf214c1 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -127,6 +127,15 @@ public class TDengineReader extends Reader { private String startTime; private String endTime; + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + @Override public void init() { this.readerSliceConfig = super.getPluginJobConf(); @@ -237,13 +246,6 @@ public class TDengineReader extends Reader { } } - static { - try { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } + } diff --git a/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh b/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh deleted file mode 100755 index f3dca7c1..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -datax_home_dir=$(dirname $(readlink -f "$0")) - -curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'drop table if exists db2.stb2;' 192.168.1.93:6041/rest/sql -curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create table if not exists db2.stb2 (`ts` TIMESTAMP,`f2` SMALLINT,`f4` BIGINT,`f5` FLOAT,`f6` DOUBLE,`f7` DOUBLE,`f8` BOOL,`f9` NCHAR(100),`f10` NCHAR(200)) TAGS (`f1` TINYINT,`f3` INT);' 192.168.1.93:6041/rest/sql - -rm -f ${datax_home_dir}/log/* -rm -f ${datax_home_dir}/job/*.csv \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json b/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json deleted file mode 100644 index d9285b23..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "job": { - "content": [ - { - "reader": { - "name": "rdbmsreader", - "parameter": { - "username": "TESTUSER", - "password": "test123456", - "connection": [ - { - "querySql": [ - "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1" - ], - "jdbcUrl": [ - "jdbc:dm://192.168.0.72:5236" - ] - } - ], - "where": "1=1", - "fetchSize": 1024 - } - }, - "writer": { - "name": "tdenginewriter", - "parameter": { - "username": "root", - "password": "taosdata", - "column": [ - "tbname", - "ts", - "f1", - "f2", - "f3", - "f4", - "f5", - "f6", - "f7", - "f8", - "f9", - "f10" - ], - "connection": [ - { - "table": [ - "stb2" - ], - "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" - } - ], - "batchSize": 1000, - "ignoreTagsUnmatched": true - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh b/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh deleted file mode 100755 index 426c6233..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -set -e -#set -x - -datax_home_dir=$(dirname $(readlink -f "$0")) -table_name="stb1" -update_key="ts" - -while getopts "hd:t:" arg; do - case $arg in - d) - datax_home_dir=$(echo $OPTARG) - ;; - v) - table_name=$(echo $OPTARG) - ;; - h) - echo "Usage: $(basename $0) -d [datax_home_dir] -t [table_name] -k [update_key]" - echo " -h help" - exit 0 - ;; - ?) #unknow option - echo "unkonw argument" - exit 1 - ;; - esac -done - -if [[ -e ${datax_home_dir}/job/${table_name}.csv ]]; then - MAX_TIME=$(cat ${datax_home_dir}/job/${table_name}.csv) -else - MAX_TIME="null" -fi -current_datetime=$(date +"%Y-%m-%d %H:%M:%S") -current_timestamp=$(date +%s) - -if [ "$MAX_TIME" != "null" ]; then - WHERE="${update_key} >= '$MAX_TIME' and ${update_key} < '$current_datetime'" - sed "s/1=1/$WHERE/g" ${datax_home_dir}/job/dm2t-update.json >${datax_home_dir}/job/dm2t_${current_timestamp}.json - echo "incremental data synchronization, from '${MAX_TIME}' to '${current_datetime}'" - python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t_${current_timestamp}.json 1> /dev/null 2>&1 -else - echo "full data synchronization, to '${current_datetime}'" - python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t-update.json 1> /dev/null 2>&1 -fi - -if [[ $? -ne 0 ]]; then - echo "datax migration job falied" -else - echo ${current_datetime} >$datax_home_dir/job/${table_name}.csv - echo "datax migration job success" -fi - -rm -rf ${datax_home_dir}/job/dm2t_${current_timestamp}.json - -#while true; do ./dm2t_sync.sh; sleep 5s; done \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json deleted file mode 100644 index 341f6293..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "job": { - "content": [ - { - "reader": { - "name": "tdenginereader", - "parameter": { - "username": "root", - "password": "taosdata", - "column": [ - "*" - ], - "connection": [ - { - "table": [ - "stb1" - ], - "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/db1" - } - ] - } - }, - "writer": { - "name": "rdbmswriter", - "parameter": { - "connection": [ - { - "table": [ - "stb2" - ], - "jdbcUrl": "jdbc:dm://192.168.0.72:5236" - } - ], - "username": "TESTUSER", - "password": "test123456", - "table": "stb2", - "column": [ - "*" - ] - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json deleted file mode 100644 index b2cf91e2..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "job": { - "content": [ - { - "reader": { - "name": "tdenginereader", - "parameter": { - "username": "root", - "password": "taosdata", - "column": [ - "*" - ], - "connection": [ - { - "table": [ - "stb1" - ], - "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1" - } - ] - } - }, - "writer": { - "name": "rdbmswriter", - "parameter": { - "connection": [ - { - "table": [ - "stb2" - ], - "jdbcUrl": "jdbc:dm://192.168.0.72:5236" - } - ], - "username": "TESTUSER", - "password": "test123456", - "table": "stb2", - "column": [ - "*" - ] - } - } - } - ], - "setting": { - "speed": { - "channel": 1 - } - } - } -} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/upload.sh b/tdenginewriter/src/test/resources/incremental_sync/upload.sh deleted file mode 100755 index 9b2a35e3..00000000 --- a/tdenginewriter/src/test/resources/incremental_sync/upload.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -scp dm2t-update.json root@192.168.56.105:/root/workspace/tmp/datax/job -scp dm2t_sync.sh root@192.168.56.105:/root/workspace/tmp/datax -scp clean_env.sh root@192.168.56.105:/root/workspace/tmp/datax -scp \ No newline at end of file From 8d29a621be7403a8c24d3f41419dd057fa0e1079 Mon Sep 17 00:00:00 2001 From: zyyang Date: Mon, 7 Mar 2022 16:45:08 +0800 Subject: [PATCH 161/251] [TS-1280]: add parameter where and querySql --- tdenginereader/doc/tdenginereader-CN.md | 83 +++++++++++--- .../datax/plugin/reader/TDengineReader.java | 101 ++++++++++-------- .../main/resources/plugin_job_template.json | 6 +- .../datax/plugin/reader/TDengine2DMTest.java | 1 - .../plugin/reader/TDengine2StreamTest.java | 66 ++++++++++++ .../plugin/reader/TDengineReaderTest.java | 53 +++++++-- tdenginereader/src/test/resources/t2dm.json | 4 +- .../src/test/resources/t2stream-1.json | 47 ++++++++ .../src/test/resources/t2stream-2.json | 37 +++++++ .../plugin/writer/tdenginewriter/Key.java | 3 + 10 files changed, 334 insertions(+), 67 deletions(-) create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java create mode 100644 tdenginereader/src/test/resources/t2stream-1.json create mode 100644 tdenginereader/src/test/resources/t2stream-2.json diff --git a/tdenginereader/doc/tdenginereader-CN.md b/tdenginereader/doc/tdenginereader-CN.md index fe0e4877..aa3751ef 100644 --- a/tdenginereader/doc/tdenginereader-CN.md +++ b/tdenginereader/doc/tdenginereader-CN.md @@ -6,12 +6,14 @@ TDengineReader 插件实现了 TDengine 读取数据的功能。 ## 2 实现原理 -TDengineReader 通过TDengine的JDBC driver查询获取数据。 +TDengineReader 通过 TDengine 的 JDBC driver 查询获取数据。 ## 3 功能说明 ### 3.1 配置样例 +* 配置一个从 TDengine 抽取数据作业: + ```json { "job": { @@ -27,7 +29,9 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 "table": [ "meters" ], - "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + ] } ], "column": [ @@ -36,6 +40,7 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 "voltage", "phase" ], + "where": "ts>=0", "beginDateTime": "2017-07-14 10:40:00", "endDateTime": "2017-08-14 10:40:00" } @@ -58,35 +63,89 @@ TDengineReader 通过TDengine的JDBC driver查询获取数据。 } ``` +* 配置一个自定义 SQL 的数据抽取作业: + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "user": "root", + "password": "taosdata", + "connection": [ + { + "querySql": [ + "select * from test.meters" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + ] + } + ] + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + ### 3.2 参数说明 * **username** - * 描述:TDengine实例的用户名
+ * 描述:TDengine 实例的用户名
* 必选:是
* 默认值:无
* **password** - * 描述:TDengine实例的密码
+ * 描述:TDengine 实例的密码
* 必选:是
* 默认值:无
-* **table** - * 描述:所选取的需要同步的表。使用JSON的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需保证多张表是同一schema结构, - TDengineReader不予检查表是否同一逻辑表。注意,table必须包含在connection配置单元中。
- * 必选:是
- * 默认值:无
* **jdbcUrl** - * 描述:TDengine数据库的JDBC连接信息。注意,jdbcUrl必须包含在connection配置单元中。JdbcUrl具体请参看TDengine官方文档。 + * 描述:TDengine 数据库的JDBC连接信息。注意,jdbcUrl必须包含在connection配置单元中。JdbcUrl具体请参看TDengine官方文档。 * 必选:是
* 默认值:无
+* **querySql** + * 描述:在有些业务场景下,where 这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了 querySql 后, TDengineReader 就会忽略 table, column, + where, beginDateTime, endDateTime这些配置型,直接使用这个配置项的内容对数据进行筛选。例如需要 进行多表join后同步数据,使用 select a,b from table_a join + table_b on table_a.id = table_b.id
+ * 必选:否
+ * 默认值:无
+* **table** + * 描述:所选取的需要同步的表。使用 JSON 的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需保证多张表是同一 schema 结构, TDengineReader不予检查表是否同一逻辑表。注意,table必须包含在 + connection 配置单元中。
+ * 必选:是
+ * 默认值:无
+* **where** + * 描述:筛选条件中的 where 子句,TDengineReader 根据指定的column, table, where, begingDateTime, endDateTime 条件拼接 SQL,并根据这个 SQL + 进行数据抽取。
+ * 必选:否
+ * 默认值:无
* **beginDateTime** - * 描述:数据的开始时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss,如果不填为全量同步
+ * 描述:数据的开始时间,Job 迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
* 必选:否
* 默认值:无
* **endDateTime** - * 描述:数据的结束时间,Job迁移从begineDateTime到endDateTime的数据,格式为yyyy-MM-dd HH:mm:ss,如果不填为全量同步
+ * 描述:数据的结束时间,Job 迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
* 必选:否
* 默认值:无
### 3.3 类型转换 + | TDengine 数据类型 | DataX 内部类型 | | --------------- | ------------- | | TINYINT | Long | diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index 0cf214c1..35c82bed 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -15,6 +15,8 @@ import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; public class TDengineReader extends Reader { @@ -41,26 +43,30 @@ public class TDengineReader extends Reader { "The parameter [" + Key.PASSWORD + "] is not set."); // check connection - List connection = this.originalConfig.getList(Key.CONNECTION); - if (connection == null || connection.isEmpty()) + List connectionList = this.originalConfig.getListConfiguration(Key.CONNECTION); + if (connectionList == null || connectionList.isEmpty()) throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.CONNECTION + "] is not set."); - for (int i = 0; i < connection.size(); i++) { - Configuration conn = Configuration.from(connection.get(i).toString()); - List table = conn.getList(Key.TABLE); - if (table == null || table.isEmpty()) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, - "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); - String jdbcUrl = conn.getString(Key.JDBC_URL); - if (StringUtils.isBlank(jdbcUrl)) + for (int i = 0; i < connectionList.size(); i++) { + Configuration conn = connectionList.get(i); + // check jdbcUrl + List jdbcUrlList = conn.getList(Key.JDBC_URL); + if (jdbcUrlList == null || jdbcUrlList.isEmpty()) { throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); + } + // check table/querySql + List querySqlList = conn.getList(Key.QUERY_SQL); + if (querySqlList == null || querySqlList.isEmpty()) { + String querySql = conn.getString(Key.QUERY_SQL); + if (StringUtils.isBlank(querySql)) { + List table = conn.getList(Key.TABLE); + if (table == null || table.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); + } + } } - // check column - List column = this.originalConfig.getList(Key.COLUMN); - if (column == null || column.isEmpty()) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, - "The parameter [" + Key.CONNECTION + "] is not set or is empty."); SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); // check beginDateTime @@ -100,15 +106,17 @@ public class TDengineReader extends Reader { public List split(int adviceNumber) { List configurations = new ArrayList<>(); - List connectionList = this.originalConfig.getList(Key.CONNECTION); - for (Object conn : connectionList) { - Configuration clone = this.originalConfig.clone(); - Configuration conf = Configuration.from(conn.toString()); - String jdbcUrl = conf.getString(Key.JDBC_URL); - clone.set(Key.JDBC_URL, jdbcUrl); - clone.set(Key.TABLE, conf.getList(Key.TABLE)); - clone.remove(Key.CONNECTION); - configurations.add(clone); + List connectionList = this.originalConfig.getListConfiguration(Key.CONNECTION); + for (Configuration conn : connectionList) { + List jdbcUrlList = conn.getList(Key.JDBC_URL, String.class); + for (String jdbcUrl : jdbcUrlList) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conn.getList(Key.TABLE)); + clone.set(Key.QUERY_SQL, conn.getList(Key.QUERY_SQL)); + clone.remove(Key.CONNECTION); + configurations.add(clone); + } } LOG.info("Configuration: {}", configurations); @@ -120,12 +128,15 @@ public class TDengineReader extends Reader { private static final Logger LOG = LoggerFactory.getLogger(Task.class); private Configuration readerSliceConfig; + private String mandatoryEncoding; private Connection conn; + private List tables; private List columns; - private String startTime; private String endTime; + private String where; + private List querySql; static { try { @@ -141,12 +152,10 @@ public class TDengineReader extends Reader { this.readerSliceConfig = super.getPluginJobConf(); LOG.info("getPluginJobConf: {}", readerSliceConfig); - String url = readerSliceConfig.getString(Key.JDBC_URL); - if (StringUtils.isBlank(url)) - throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, - "The parameter [" + Key.JDBC_URL + "] is not set."); String user = readerSliceConfig.getString(Key.USERNAME); String password = readerSliceConfig.getString(Key.PASSWORD); + + String url = readerSliceConfig.getString(Key.JDBC_URL); try { this.conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) { @@ -158,6 +167,9 @@ public class TDengineReader extends Reader { this.columns = readerSliceConfig.getList(Key.COLUMN, String.class); this.startTime = readerSliceConfig.getString(Key.BEGIN_DATETIME); this.endTime = readerSliceConfig.getString(Key.END_DATETIME); + this.where = readerSliceConfig.getString(Key.WHERE, "_c0 > " + Long.MIN_VALUE); + this.querySql = readerSliceConfig.getList(Key.QUERY_SQL, String.class); + this.mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, "UTF-8"); } @Override @@ -167,26 +179,30 @@ public class TDengineReader extends Reader { @Override public void startRead(RecordSender recordSender) { + List sqlList = new ArrayList<>(); - try (Statement stmt = conn.createStatement()) { + if (querySql == null || querySql.isEmpty()) { for (String table : tables) { StringBuilder sb = new StringBuilder(); - sb.append("select ").append(StringUtils.join(columns, ",")) - .append(" from ").append(table).append(" "); - - if (StringUtils.isBlank(startTime)) { - sb.append("where _c0 >= ").append(Long.MIN_VALUE); - } else { - sb.append("where _c0 >= '").append(startTime).append("'"); + sb.append("select ").append(StringUtils.join(columns, ",")).append(" from ").append(table).append(" "); + sb.append("where ").append(where); + if (!StringUtils.isBlank(startTime)) { + sb.append(" and _c0 >= '").append(startTime).append("'"); } if (!StringUtils.isBlank(endTime)) { sb.append(" and _c0 < '").append(endTime).append("'"); } + String sql = sb.toString().trim(); + } + } else { + sqlList.addAll(querySql); + } - String sql = sb.toString(); + try (Statement stmt = conn.createStatement()) { + for (String sql : sqlList) { ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { - Record record = buildRecord(recordSender, rs, "UTF-8"); + Record record = buildRecord(recordSender, rs, mandatoryEncoding); recordSender.sendToWriter(record); } } @@ -239,13 +255,14 @@ public class TDengineReader extends Reader { break; } } - } catch (SQLException | UnsupportedEncodingException e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "database query error!", e); + } catch (UnsupportedEncodingException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "illegal mandatoryEncoding", e); } return record; } } - } diff --git a/tdenginereader/src/main/resources/plugin_job_template.json b/tdenginereader/src/main/resources/plugin_job_template.json index 2c7f4cb9..934fe96a 100644 --- a/tdenginereader/src/main/resources/plugin_job_template.json +++ b/tdenginereader/src/main/resources/plugin_job_template.json @@ -8,7 +8,9 @@ "table": [ "" ], - "jdbcUrl": "" + "jdbcUrl": [ + "" + ] } ], "column": [ @@ -16,6 +18,6 @@ ], "beginDateTime": "", "endDateTime": "", - "splitInterval": "" + "where": "" } } \ No newline at end of file diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java index d9099e01..e1064717 100644 --- a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java @@ -1,7 +1,6 @@ package com.alibaba.datax.plugin.reader; import com.alibaba.datax.core.Engine; -import org.junit.Before; import org.junit.Ignore; import org.junit.Test; diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java new file mode 100644 index 00000000..f628a648 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java @@ -0,0 +1,66 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Random; + +@Ignore +public class TDengine2StreamTest { + + private static final String host = "192.168.56.105"; + private static final Random random = new Random(System.currentTimeMillis()); + + @Test + public void case01() throws Throwable { + // given + prepare("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2stream-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case02() throws Throwable { + // given + prepare("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2stream-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + + private void prepare(String precision) throws SQLException { + final String url = "jdbc:TAOS-RS://" + host + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1 precision '" + precision + "'"); + stmt.execute("create table db1.stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(100))"); + + for (int i = 1; i <= 10; i++) { + stmt.execute("insert into db1.tb" + i + " using db1.stb1 tags(now, " + random.nextInt(10) + "," + + random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextInt(10) + "," + + random.nextFloat() + "," + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123'," + + "'北京朝阳望京') values(now+" + i + "s, " + random.nextInt(10) + "," + random.nextInt(10) + "," + + +random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123','北京朝阳望京')"); + } + stmt.close(); + } + } + + +} diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java index da980c5f..491ddbaf 100644 --- a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java @@ -16,8 +16,9 @@ public class TDengineReaderTest { Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + - "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"where\":\"_c0 > 0\"," + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + "\"endDateTime\": \"2021-01-01 12:00:00\"" + "}"); @@ -32,9 +33,10 @@ public class TDengineReaderTest { Assert.assertEquals("root", conf.getString(Key.USERNAME)); Assert.assertEquals("taosdata", conf.getString("password")); Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); - Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl[0]")); Assert.assertEquals("2021-01-01 00:00:00", conf.getString("beginDateTime")); Assert.assertEquals("2021-01-01 12:00:00", conf.getString("endDateTime")); + Assert.assertEquals("_c0 > 0", conf.getString("where")); } @@ -45,8 +47,7 @@ public class TDengineReaderTest { Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + - "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + - "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]" + + "\"connection\": [{\"querySql\":[\"select * from weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + "}"); job.setPluginJobConf(configuration); @@ -58,8 +59,8 @@ public class TDengineReaderTest { Assert.assertEquals("root", conf.getString(Key.USERNAME)); Assert.assertEquals("taosdata", conf.getString("password")); - Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); - Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl[0]")); + Assert.assertEquals("select * from weather", conf.getString("connection[0].querySql[0]")); } @Test @@ -69,8 +70,9 @@ public class TDengineReaderTest { Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + - "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"where\":\"_c0 > 0\"," + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + "\"endDateTime\": \"2021-01-01 12:00:00\"" + "}"); @@ -85,6 +87,7 @@ public class TDengineReaderTest { Configuration conf = configurationList.get(0); Assert.assertEquals("root", conf.getString("username")); Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("_c0 > 0", conf.getString("where")); Assert.assertEquals("weather", conf.getString("table[0]")); Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); @@ -97,7 +100,7 @@ public class TDengineReaderTest { Configuration configuration = Configuration.from("{" + "\"username\": \"root\"," + "\"password\": \"taosdata\"," + - "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"connection\": [{\"querySql\":[\"select * from weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + "}"); job.setPluginJobConf(configuration); @@ -111,8 +114,40 @@ public class TDengineReaderTest { Configuration conf = configurationList.get(0); Assert.assertEquals("root", conf.getString("username")); Assert.assertEquals("taosdata", conf.getString("password")); - Assert.assertEquals("weather", conf.getString("table[0]")); + Assert.assertEquals("select * from weather", conf.getString("querySql[0]")); Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); } + @Test + public void jobSplit_case03() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"querySql\":[\"select * from weather\",\"select * from test.meters\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\", \"jdbc:TAOS://master:6030/test\"]}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(2, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("select * from weather", conf.getString("querySql[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + + Configuration conf1 = configurationList.get(1); + Assert.assertEquals("root", conf1.getString("username")); + Assert.assertEquals("taosdata", conf1.getString("password")); + Assert.assertEquals("select * from weather", conf1.getString("querySql[0]")); + Assert.assertEquals("select * from test.meters", conf1.getString("querySql[1]")); + Assert.assertEquals("jdbc:TAOS://master:6030/test", conf1.getString("jdbcUrl")); + } + } \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2dm.json b/tdenginereader/src/test/resources/t2dm.json index b2cf91e2..d87ade0c 100644 --- a/tdenginereader/src/test/resources/t2dm.json +++ b/tdenginereader/src/test/resources/t2dm.json @@ -15,7 +15,9 @@ "table": [ "stb1" ], - "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1" + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] } ] } diff --git a/tdenginereader/src/test/resources/t2stream-1.json b/tdenginereader/src/test/resources/t2stream-1.json new file mode 100644 index 00000000..183ab7e2 --- /dev/null +++ b/tdenginereader/src/test/resources/t2stream-1.json @@ -0,0 +1,47 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "t1", + "t2" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] + } + ], + "where": "t10 = '北京朝阳望京'", + "beginDateTime": "2022-03-07 12:00:00", + "endDateTime": "2022-03-07 19:00:00" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2stream-2.json b/tdenginereader/src/test/resources/t2stream-2.json new file mode 100644 index 00000000..15bfe9be --- /dev/null +++ b/tdenginereader/src/test/resources/t2stream-2.json @@ -0,0 +1,37 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "querySql": [ + "select * from stb1 where t10 = '北京朝阳望京' and _c0 >= '2022-03-07 12:00:00' and _c0 < '2022-03-07 19:00:00'" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] + } + ] + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java index b95ff584..1a9358db 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -12,4 +12,7 @@ public class Key { public static final String BEGIN_DATETIME = "beginDateTime"; public static final String END_DATETIME = "endDateTime"; + public static final String WHERE = "where"; + public static final String QUERY_SQL = "querySql"; + public static final String MANDATORY_ENCODING = "mandatoryEncoding"; } \ No newline at end of file From 2ee8878da1d5075cef77dbd63e6fc4305d2e97e1 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 8 Mar 2022 14:57:03 +0800 Subject: [PATCH 162/251] [TS-1281]: collect dirty data in tdenginewriter --- .../tdenginewriter/DefaultDataHandler.java | 54 +++++++++---- .../writer/tdenginewriter/TDengineWriter.java | 5 +- .../tdenginewriter/Csv2TDengineTest.java | 41 ++++++++++ .../DefaultDataHandlerTest.java | 21 +++-- tdenginewriter/src/test/resources/csv2t.json | 80 +++++++++++++++++++ tdenginewriter/src/test/resources/weather.csv | 10 +++ 6 files changed, 186 insertions(+), 25 deletions(-) create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java create mode 100644 tdenginewriter/src/test/resources/csv2t.json create mode 100644 tdenginewriter/src/test/resources/weather.csv diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index a8196153..7854afee 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -30,6 +30,7 @@ public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + private final TaskPluginCollector taskPluginCollector; private String username; private String password; private String jdbcUrl; @@ -56,7 +57,7 @@ public class DefaultDataHandler implements DataHandler { private Map> columnMetas; - public DefaultDataHandler(Configuration configuration) { + public DefaultDataHandler(Configuration configuration, TaskPluginCollector taskPluginCollector) { this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); this.password = configuration.getString(Key.PASSWORD, Constants.DEFAULT_PASSWORD); this.jdbcUrl = configuration.getString(Key.JDBC_URL); @@ -64,6 +65,7 @@ public class DefaultDataHandler implements DataHandler { this.tables = configuration.getList(Key.TABLE, String.class); this.columns = configuration.getList(Key.COLUMN, String.class); this.ignoreTagsUnmatched = configuration.getBool(Key.IGNORE_TAGS_UNMATCHED, Constants.DEFAULT_IGNORE_TAGS_UNMATCHED); + this.taskPluginCollector = taskPluginCollector; } @Override @@ -86,14 +88,24 @@ public class DefaultDataHandler implements DataHandler { if (i % batchSize != 0) { recordBatch.add(record); } else { - affectedRows = writeBatch(conn, recordBatch); + try { + affectedRows = writeBatch(conn, recordBatch); + } catch (SQLException e) { + LOG.warn("use one row insert. because:" + e.getMessage()); + affectedRows = writeEachRow(conn, recordBatch); + } recordBatch.clear(); } count++; } if (!recordBatch.isEmpty()) { - affectedRows = writeBatch(conn, recordBatch); + try { + affectedRows = writeBatch(conn, recordBatch); + } catch (SQLException e) { + LOG.warn("use one row insert. because:" + e.getMessage()); + affectedRows = writeEachRow(conn, recordBatch); + } recordBatch.clear(); } } catch (SQLException e) { @@ -107,6 +119,21 @@ public class DefaultDataHandler implements DataHandler { return affectedRows; } + private int writeEachRow(Connection conn, List recordBatch) { + int affectedRows = 0; + for (Record record : recordBatch) { + List recordList = new ArrayList<>(); + recordList.add(record); + try { + affectedRows += writeBatch(conn, recordList); + } catch (SQLException e) { + LOG.error(e.getMessage()); + this.taskPluginCollector.collectDirtyRecord(record, e); + } + } + return affectedRows; + } + /** * table: [ "stb1", "stb2", "tb1", "tb2", "t1" ] * stb1[ts,f1,f2] tags:[t1] @@ -118,7 +145,7 @@ public class DefaultDataHandler implements DataHandler { * 3. 对于tb,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => insert into tb(ts, f1, f2) values(ts, f1, f2) * 4. 对于t,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, f3, t1, t2] insert into t(ts, f1, f2, f3, t1, t2) values(ts, f1, f2, f3, t1, t2) */ - public int writeBatch(Connection conn, List recordBatch) { + public int writeBatch(Connection conn, List recordBatch) throws SQLException { int affectedRows = 0; for (String table : tables) { TableMeta tableMeta = tableMetas.get(table); @@ -146,7 +173,7 @@ public class DefaultDataHandler implements DataHandler { * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) */ - private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) { + private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws SQLException { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder("insert into"); @@ -177,13 +204,11 @@ public class DefaultDataHandler implements DataHandler { return executeUpdate(conn, sql); } - private int executeUpdate(Connection conn, String sql) throws DataXException { + private int executeUpdate(Connection conn, String sql) throws SQLException { int count; try (Statement stmt = conn.createStatement()) { LOG.debug(">>> " + sql); count = stmt.executeUpdate(sql); - } catch (SQLException e) { - throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); } return count; } @@ -227,7 +252,7 @@ public class DefaultDataHandler implements DataHandler { * table: ["stb1"], column: ["ts", "f1", "f2", "t1"] * data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => schemaless: stb1,t1=t1 f1=f1,f2=f2 ts */ - private int writeBatchToSupTableBySchemaless(Connection conn, String table, List recordBatch) { + private int writeBatchToSupTableBySchemaless(Connection conn, String table, List recordBatch) throws SQLException { int count = 0; TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); @@ -296,11 +321,8 @@ public class DefaultDataHandler implements DataHandler { default: timestampType = SchemalessTimestampType.NOT_CONFIGURED; } - try { - writer.write(lines, SchemalessProtocolType.LINE, timestampType); - } catch (SQLException e) { - throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); - } + + writer.write(lines, SchemalessProtocolType.LINE, timestampType); LOG.warn("schemalessWriter does not return affected rows!"); return count; @@ -370,7 +392,7 @@ public class DefaultDataHandler implements DataHandler { * else * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) */ - private int writeBatchToSubTable(Connection conn, String table, List recordBatch) { + private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws SQLException { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder(); @@ -440,7 +462,7 @@ public class DefaultDataHandler implements DataHandler { * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) */ - private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) { + private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws SQLException { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder(); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java index eb538022..73982744 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -2,6 +2,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; import org.apache.commons.lang3.StringUtils; @@ -81,10 +82,12 @@ public class TDengineWriter extends Writer { private static final Logger LOG = LoggerFactory.getLogger(Task.class); private Configuration writerSliceConfig; + private TaskPluginCollector taskPluginCollector; @Override public void init() { this.writerSliceConfig = getPluginJobConf(); + this.taskPluginCollector = super.getTaskPluginCollector(); } @Override @@ -101,7 +104,7 @@ public class TDengineWriter extends Writer { if (peerPluginName.equals("opentsdbreader")) handler = new OpentsdbDataHandler(this.writerSliceConfig); else - handler = new DefaultDataHandler(this.writerSliceConfig); + handler = new DefaultDataHandler(this.writerSliceConfig, this.taskPluginCollector); long records = handler.handle(lineReceiver, getTaskPluginCollector()); LOG.debug("handle data finished, records: " + records); diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java new file mode 100644 index 00000000..7352c3ca --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java @@ -0,0 +1,41 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +@Ignore +public class Csv2TDengineTest { + + private static final String host = "192.168.56.105"; + + @Test + public void case01() throws Throwable { + // given + prepareTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/csv2t.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + public void prepareTable() throws SQLException { + final String url = "jdbc:TAOS-RS://" + host + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists test"); + stmt.execute("create database if not exists test"); + stmt.execute("create table test.weather (ts timestamp, temperature bigint, humidity double, is_normal bool) " + + "tags(device_id binary(10),address nchar(10))"); + } + } + + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index 3657a4f7..8840aa28 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -4,6 +4,8 @@ import com.alibaba.datax.common.element.DateColumn; import com.alibaba.datax.common.element.LongColumn; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.core.transport.record.DefaultRecord; import org.junit.AfterClass; @@ -25,6 +27,8 @@ public class DefaultDataHandlerTest { private static final String host = "192.168.1.93"; private static Connection conn; + private final TaskPluginCollector taskPluginCollector = new TDengineWriter.Task().getTaskPluginCollector(); + @Test public void writeSupTableBySQL() throws SQLException { // given @@ -48,8 +52,9 @@ public class DefaultDataHandlerTest { return record; }).collect(Collectors.toList()); + // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(conn); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -87,7 +92,7 @@ public class DefaultDataHandlerTest { }).collect(Collectors.toList()); // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(conn); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -127,7 +132,7 @@ public class DefaultDataHandlerTest { }).collect(Collectors.toList()); // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(connection); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -166,7 +171,7 @@ public class DefaultDataHandlerTest { }).collect(Collectors.toList()); // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(conn); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -205,7 +210,7 @@ public class DefaultDataHandlerTest { }).collect(Collectors.toList()); // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(conn); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -244,7 +249,7 @@ public class DefaultDataHandlerTest { }).collect(Collectors.toList()); // when - DefaultDataHandler handler = new DefaultDataHandler(configuration); + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); List tables = configuration.getList("table", String.class); SchemaManager schemaManager = new SchemaManager(conn); Map tableMetas = schemaManager.loadTableMeta(tables); @@ -260,7 +265,7 @@ public class DefaultDataHandlerTest { } private void createSupAndSubTable() throws SQLException { - try(Statement stmt = conn.createStatement()){ + try (Statement stmt = conn.createStatement()) { stmt.execute("drop database if exists scm_test"); stmt.execute("create database if not exists scm_test"); stmt.execute("use scm_test"); @@ -275,7 +280,7 @@ public class DefaultDataHandlerTest { } private void createSupTable() throws SQLException { - try (Statement stmt = conn.createStatement()){ + try (Statement stmt = conn.createStatement()) { stmt.execute("drop database if exists scm_test"); stmt.execute("create database if not exists scm_test"); stmt.execute("use scm_test"); diff --git a/tdenginewriter/src/test/resources/csv2t.json b/tdenginewriter/src/test/resources/csv2t.json new file mode 100644 index 00000000..ef5c4d04 --- /dev/null +++ b/tdenginewriter/src/test/resources/csv2t.json @@ -0,0 +1,80 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "txtfilereader", + "parameter": { + "path": [ + "/Users/yangzy/IdeaProjects/DataX/tdenginewriter/src/test/resources/weather.csv" + ], + "encoding": "UTF-8", + "column": [ + { + "index": 0, + "type": "string" + }, + { + "index": 1, + "type": "date", + "format": "yyy-MM-dd HH:mm:ss.SSS" + }, + { + "index": 2, + "type": "long" + }, + { + "index": 3, + "type": "double" + }, + { + "index": 4, + "type": "long" + }, + { + "index": 5, + "type": "string" + }, + { + "index": 6, + "type": "String" + } + ], + "fieldDelimiter": "," + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/weather.csv b/tdenginewriter/src/test/resources/weather.csv new file mode 100644 index 00000000..21c4a1aa --- /dev/null +++ b/tdenginewriter/src/test/resources/weather.csv @@ -0,0 +1,10 @@ +tb1,2022-02-20 04:05:59.255,5,8.591868744,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 04:58:47.068,3,1.489693641,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 06:31:09.408,1,4.026500719,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 08:08:00.336,1,9.606400360,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 08:28:58.053,9,7.872178184,1,abcABC123123,北京朝阳望京 +tb1,2022-02-20 10:23:20.836,9,2.699478524,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 11:09:59.739,7,7.906723716,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 19:08:29.315,1,5.852338895,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 22:10:06.243,10,5.535007901,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 23:52:43.683,10,10.642013185,1,abcABC123,北京朝阳望京 From 81b004fbb4c53d4b425efed204062b145ce57a7e Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 8 Mar 2022 15:55:19 +0800 Subject: [PATCH 163/251] hotfix tdenginereader mistake --- .../java/com/alibaba/datax/plugin/reader/TDengineReader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index 35c82bed..332ddf3a 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -193,6 +193,7 @@ public class TDengineReader extends Reader { sb.append(" and _c0 < '").append(endTime).append("'"); } String sql = sb.toString().trim(); + sqlList.add(sql); } } else { sqlList.addAll(querySql); From 2d37cf10b94553e64ce2e9a49eb91122de432f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E7=85=A6?= Date: Thu, 3 Mar 2022 16:19:22 +0800 Subject: [PATCH 164/251] obreader: readByPartition --- .../oceanbasev10reader/OceanBaseReader.java | 2 + .../oceanbasev10reader/ext/Constant.java | 11 ++ .../oceanbasev10reader/ext/ObReaderKey.java | 16 ++ .../oceanbasev10reader/ext/ReaderJob.java | 23 ++- .../util/ObReaderUtils.java | 66 ++++++- .../oceanbasev10reader/util/PartInfo.java | 35 ++++ .../oceanbasev10reader/util/PartType.java | 23 +++ .../util/PartitionSplitUtil.java | 165 ++++++++++++++++++ .../oceanbasev10reader/util/TaskContext.java | 17 +- .../util/ObReaderUtilsTest.java | 22 +++ 10 files changed, 366 insertions(+), 14 deletions(-) create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/Constant.java create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ObReaderKey.java create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartInfo.java create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java create mode 100644 oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index 228af811..a888975a 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -3,6 +3,7 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader; import java.sql.Connection; import java.util.List; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.ext.ObReaderKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -86,6 +87,7 @@ public class OceanBaseReader extends Reader { String obJdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:"); Connection conn = DBUtil.getConnection(DataBaseType.OceanBase, obJdbcUrl, username, password); String compatibleMode = ObReaderUtils.getCompatibleMode(conn); + config.set(ObReaderKey.OB_COMPATIBILITY_MODE, compatibleMode); if (ObReaderUtils.isOracleMode(compatibleMode)) { ObReaderUtils.compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/Constant.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/Constant.java new file mode 100644 index 00000000..57977ca4 --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/Constant.java @@ -0,0 +1,11 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; + +/** + * @author johnrobbet + */ +public class Constant { + + public static String WEAK_READ_QUERY_SQL_TEMPLATE_WITHOUT_WHERE = "select /*+read_consistency(weak)*/ %s from %s "; + + public static String WEAK_READ_QUERY_SQL_TEMPLATE = "select /*+read_consistency(weak)*/ %s from %s where (%s)"; +} diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ObReaderKey.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ObReaderKey.java new file mode 100644 index 00000000..bc8f4525 --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ObReaderKey.java @@ -0,0 +1,16 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; + +/** + * @author johnrobbet + */ +public class ObReaderKey { + + public final static String READ_BY_PARTITION = "readByPartition"; + + public final static String PARTITION_NAME = "partitionName"; + + public final static String PARTITION_TYPE = "partitionType"; + + public final static String OB_COMPATIBILITY_MODE = "obCompatibilityMode"; + +} diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index f69a9166..56c4f1ad 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -6,10 +6,10 @@ import com.alibaba.datax.common.constant.CommonConstant; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Key; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.datax.plugin.reader.oceanbasev10reader.OceanBaseReader; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.PartitionSplitUtil; import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,20 +34,34 @@ public class ReaderJob extends CommonRdbmsReader.Job { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); List tables = connConfig.getList(Key.TABLE, String.class); - ObReaderUtils.escapeDatabaseKeywords(tables); - originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), tables); + + // tables will be null when querySql is configured + if (tables != null) { + ObReaderUtils.escapeDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), + tables); + } } super.init(originalConfig); } @Override public List split(Configuration originalConfig, int adviceNumber) { - List list = super.split(originalConfig, adviceNumber); + List list; + if (originalConfig.getBool(ObReaderKey.READ_BY_PARTITION, false)) { + LOG.info("try to split reader job by partition."); + list = PartitionSplitUtil.splitByPartition(originalConfig); + } else { + LOG.info("try to split reader job by splitPk."); + list = super.split(originalConfig, adviceNumber); + } + for (Configuration config : list) { String jdbcUrl = config.getString(Key.JDBC_URL); String obRegionName = getObRegionName(jdbcUrl); config.set(CommonConstant.LOAD_BALANCE_RESOURCE_MARK, obRegionName); } + return list; } @@ -60,6 +74,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { return sss[0]; } } + return null; } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 20c2f922..b1567543 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -1,8 +1,10 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; import com.alibaba.datax.common.element.*; +import com.alibaba.datax.plugin.rdbms.reader.util.SingleTableSplitUtil; import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.ext.Constant; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; @@ -18,8 +20,10 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * @author johnrobbet + */ public class ObReaderUtils { - private static final Logger LOG = LoggerFactory.getLogger(ObReaderUtils.class); private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; @@ -718,4 +722,64 @@ public class ObReaderUtils { public static boolean isOracleMode(String mode) { return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equalsIgnoreCase(mode)); } + + public static String getDbNameFromJdbcUrl(String jdbcUrl) { + final Pattern pattern = Pattern.compile("jdbc:(oceanbase|mysql)://([\\w\\.-]+:\\d+)/([\\w\\.-]+)"); + + Matcher matcher = pattern.matcher(jdbcUrl); + if (matcher.find()) { + return matcher.group(3); + } else { + LOG.error("jdbc url {} is not valid.", jdbcUrl); + } + + return null; + } + + public static String buildQuerySql(boolean weakRead, String column, String table, String where) { + if (weakRead) { + return buildWeakReadQuerySql(column, table, where); + } else { + return SingleTableSplitUtil.buildQuerySql(column, table, where); + } + } + + public static String buildWeakReadQuerySql(String column, String table, String where) { + String querySql; + + if (StringUtils.isBlank(where)) { + querySql = String.format(Constant.WEAK_READ_QUERY_SQL_TEMPLATE_WITHOUT_WHERE, column, table); + } else { + querySql = String.format(Constant.WEAK_READ_QUERY_SQL_TEMPLATE, column, table, where); + } + + return querySql; + } + + /** + * compare two ob versions + * @param version1 + * @param version2 + * @return 0 when the two versions are the same + * -1 when version1 is smaller (earlier) than version2 + * 1 when version is bigger (later) than version2 + */ + public static int compareObVersion(String version1, String version2) { + if (version1 == null || version2 == null) { + throw new RuntimeException("can not compare null version"); + } + + String[] ver1Part = version1.split("\\."); + String[] ver2Part = version2.split("\\."); + for (int i = 0; i < ver1Part.length; i++) { + int v1 = Integer.parseInt(ver1Part[i]), v2 = Integer.parseInt(ver2Part[i]); + if (v1 > v2) { + return 1; + } else if (v1 < v2) { + return -1; + } + } + + return 0; + } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartInfo.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartInfo.java new file mode 100644 index 00000000..7a9a6f70 --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartInfo.java @@ -0,0 +1,35 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author johnrobbet + */ +public class PartInfo { + + private PartType partType; + + List partList; + + public PartInfo(PartType partType) { + this.partType = partType; + this.partList = new ArrayList(); + } + + public String getPartType () { + return partType.getTypeString(); + } + + public void addPart(List partList) { + this.partList.addAll(partList); + } + + public List getPartList() { + return partList; + } + + public boolean isPartitionTable() { + return partType != PartType.NONPARTITION && partList.size() > 0; + } +} diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java new file mode 100644 index 00000000..be190755 --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java @@ -0,0 +1,23 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +/** + * @author johnrobbet + */ + +public enum PartType { + NONPARTITION("NONPARTITION"), + PARTITION("PARTITION"), + SUBPARTITION("SUBPARTITION"); + + private String typeString; + + PartType (String typeString) { + this.typeString = typeString; + } + + public String getTypeString() { + return typeString; + } +} + + diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java new file mode 100644 index 00000000..3bf2320a --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java @@ -0,0 +1,165 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.reader.Constant; +import com.alibaba.datax.plugin.rdbms.reader.Key; +import com.alibaba.datax.plugin.rdbms.reader.util.HintUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.ext.ObReaderKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +/** + * @author johnrobbet + */ +public class PartitionSplitUtil { + private static final Logger LOG = LoggerFactory.getLogger(PartitionSplitUtil.class); + + public static List splitByPartition (Configuration configuration) { + List allSlices = new ArrayList<>(); + List conns = configuration.getList(Constant.CONN_MARK, Object.class); + for (int i = 0, len = conns.size(); i < len; i++) { + Configuration sliceConfig = configuration.clone(); + Configuration connConf = Configuration.from(conns.get(i).toString()); + String jdbcUrl = connConf.getString(Key.JDBC_URL); + sliceConfig.set(Key.JDBC_URL, jdbcUrl); + sliceConfig.remove(Constant.CONN_MARK); + + List tables = connConf.getList(Key.TABLE, String.class); + for (String table : tables) { + Configuration tempSlice = sliceConfig.clone(); + tempSlice.set(Key.TABLE, table); + allSlices.addAll(splitSinglePartitionTable(tempSlice)); + } + } + + return allSlices; + } + + private static List splitSinglePartitionTable(Configuration configuration) { + String table = configuration.getString(Key.TABLE); + String where = configuration.getString(Key.WHERE, null); + String column = configuration.getString(Key.COLUMN); + final boolean weakRead = configuration.getBool(Key.WEAK_READ, true); + + List slices = new ArrayList(); + PartInfo partInfo = getObPartInfoBySQL(configuration, table); + if (partInfo != null && partInfo.isPartitionTable()) { + String partitionType = partInfo.getPartType(); + for (String partitionName : partInfo.getPartList()) { + LOG.info(String.format("add %s %s for table %s", partitionType, partitionName, table)); + Configuration slice = configuration.clone(); + slice.set(ObReaderKey.PARTITION_NAME, partitionName); + slice.set(ObReaderKey.PARTITION_TYPE, partitionType); + slice.set(Key.QUERY_SQL, + ObReaderUtils.buildQuerySql(weakRead, column, + String.format("%s partition(%s)", table, partitionName), where)); + slices.add(slice); + } + } else { + LOG.info("fail to get table part info or table is not partitioned, proceed as non-partitioned table."); + + Configuration slice = configuration.clone(); + slice.set(Key.QUERY_SQL, ObReaderUtils.buildQuerySql(weakRead, column, table, where)); + slices.add(slice); + } + + return slices; + } + + private static PartInfo getObPartInfoBySQL(Configuration config, String table) { + PartInfo partInfo = new PartInfo(PartType.NONPARTITION); + List partList; + Connection conn = null; + try { + String jdbcUrl = config.getString(Key.JDBC_URL); + String username = config.getString(Key.USERNAME); + String password = config.getString(Key.PASSWORD); + String dbname = ObReaderUtils.getDbNameFromJdbcUrl(jdbcUrl); + String allTable = "__all_table"; + + conn = DBUtil.getConnection(DataBaseType.OceanBase, jdbcUrl, username, password); + String obVersion = getResultsFromSql(conn, "select version()").get(0); + + LOG.info("obVersion: " + obVersion); + + if (ObReaderUtils.compareObVersion("2.2.76", obVersion) < 0) { + allTable = "__all_table_v2"; + } + + String queryPart = String.format( + "select p.part_name " + + "from oceanbase.__all_part p, oceanbase.%s t, oceanbase.__all_database d " + + "where p.table_id = t.table_id " + + "and d.database_id = t.database_id " + + "and d.database_name = '%s' " + + "and t.table_name = '%s'", allTable, dbname, table); + String querySubPart = String.format( + "select p.sub_part_name " + + "from oceanbase.__all_sub_part p, oceanbase.%s t, oceanbase.__all_database d " + + "where p.table_id = t.table_id " + + "and d.database_id = t.database_id " + + "and d.database_name = '%s' " + + "and t.table_name = '%s'", allTable, dbname, table); + if (config.getString(ObReaderKey.OB_COMPATIBILITY_MODE).equals("ORACLE")) { + queryPart = String.format( + "select partition_name from all_tab_partitions where TABLE_OWNER = '%s' and table_name = '%s'", + dbname.toUpperCase(), table.toUpperCase()); + querySubPart = String.format( + "select subpartition_name from all_tab_subpartitions where TABLE_OWNER = '%s' and table_name = '%s'", + dbname.toUpperCase(), table.toUpperCase()); + } + + PartType partType = PartType.SUBPARTITION; + + // try subpartition first + partList = getResultsFromSql(conn, querySubPart); + + // if table is not sub-partitioned, the try partition + if (partList.isEmpty()) { + partList = getResultsFromSql(conn, queryPart); + partType = PartType.PARTITION; + } + + if (!partList.isEmpty()) { + partInfo = new PartInfo(partType); + partInfo.addPart(partList); + } + } catch (Exception ex) { + LOG.error("error when get partition list: " + ex.getMessage()); + } finally { + DBUtil.closeDBResources(null, conn); + } + + return partInfo; + } + + private static List getResultsFromSql(Connection conn, String sql) { + List list = new ArrayList(); + Statement stmt = null; + ResultSet rs = null; + + LOG.info("executing sql: " + sql); + + try { + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + while (rs.next()) { + list.add(rs.getString(1)); + } + } catch (Exception e) { + LOG.error("error when executing sql: " + e.getMessage()); + } finally { + DBUtil.closeDBResources(rs, stmt, null); + } + + return list; + } +} diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java index 17655a52..d482232a 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java @@ -19,15 +19,6 @@ public class TaskContext { private boolean weakRead = true; private String userSavePoint; private String compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_MYSQL; - - public String getPartitionName() { - return partitionName; - } - - public void setPartitionName(String partitionName) { - this.partitionName = partitionName; - } - private String partitionName; // 断点续读的保存点 @@ -174,4 +165,12 @@ public class TaskContext { public void setCompatibleMode(String compatibleMode) { this.compatibleMode = compatibleMode; } + + public String getPartitionName() { + return partitionName; + } + + public void setPartitionName(String partitionName) { + this.partitionName = partitionName; + } } diff --git a/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java b/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java new file mode 100644 index 00000000..bc387767 --- /dev/null +++ b/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java @@ -0,0 +1,22 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +import org.junit.Test; + +public class ObReaderUtilsTest { + + @Test + public void getDbTest() { + assert ObReaderUtils.getDbNameFromJdbcUrl("jdbc:mysql://127.0.0.1:3306/testdb").equalsIgnoreCase("testdb"); + assert ObReaderUtils.getDbNameFromJdbcUrl("jdbc:oceanbase://127.0.0.1:2883/testdb").equalsIgnoreCase("testdb"); + assert ObReaderUtils.getDbNameFromJdbcUrl("||_dsc_ob10_dsc_||obcluster:mysql||_dsc_ob10_dsc_||jdbc:mysql://127.0.0.1:3306/testdb").equalsIgnoreCase("testdb"); + assert ObReaderUtils.getDbNameFromJdbcUrl("||_dsc_ob10_dsc_||obcluster:oracle||_dsc_ob10_dsc_||jdbc:oceanbase://127.0.0.1:3306/testdb").equalsIgnoreCase("testdb"); + } + + @Test + public void compareObVersionTest() { + assert ObReaderUtils.compareObVersion("2.2.70", "3.2.2") == -1; + assert ObReaderUtils.compareObVersion("2.2.70", "2.2.50") == 1; + assert ObReaderUtils.compareObVersion("2.2.70", "3.1.2") == -1; + assert ObReaderUtils.compareObVersion("3.1.2", "3.1.2") == 0; + } +} From 1a5f1f028877918d381548d09f51f19eed6f4c4f Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Mon, 7 Mar 2022 18:13:01 +0800 Subject: [PATCH 165/251] escape the keywords for splitPk --- .../oceanbasev10reader/OceanBaseReader.java | 15 +++++++++++++++ .../oceanbasev10reader/util/ObReaderUtils.java | 16 +++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index a888975a..e92e5025 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -53,6 +53,21 @@ public class OceanBaseReader extends Reader { @Override public List split(int adviceNumber) { + String splitPk = originalConfig.getString(Key.SPLIT_PK); + List quotedColumns = originalConfig.getList(Key.COLUMN_LIST, String.class); + if (splitPk != null && splitPk.length() > 0 && quotedColumns != null) { + String escapeChar = ObReaderUtils.isOracleMode(originalConfig.getString(ObReaderKey.OB_COMPATIBILITY_MODE)) + ? "\"" : "`"; + if (!splitPk.startsWith(escapeChar) && !splitPk.endsWith(escapeChar)) { + splitPk = escapeChar + splitPk + escapeChar; + } + for (String column : quotedColumns) { + if (column.equals(splitPk)) { + LOG.info("splitPk is an ob reserved keyword, set to {}", splitPk); + originalConfig.set(Key.SPLIT_PK, splitPk); + } + } + } return this.readerJob.split(this.originalConfig, adviceNumber); } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index b1567543..8af7377a 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -26,7 +26,7 @@ import java.util.regex.Pattern; public class ObReaderUtils { private static final Logger LOG = LoggerFactory.getLogger(ObReaderUtils.class); private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; - private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; + private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH,KEY,NAME,VALUE,TYPE"; private static Set databaseKeywords; final static public String OB_COMPATIBLE_MODE = "obCompatibilityMode"; @@ -57,9 +57,11 @@ public class ObReaderUtils { return keyword; } - public static void escapeDatabaseKeywords(List keywords) { - for (int i = 0; i < keywords.size(); i++) { - keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + public static void escapeDatabaseKeywords(List ids) { + if (ids != null && ids.size() > 0) { + for (int i = 0; i < ids.size(); i++) { + ids.set(i, escapeDatabaseKeywords(ids.get(i))); + } } } @@ -111,15 +113,19 @@ public class ObReaderUtils { context.setPkColumns(pkColumns); + final String escapeChar = isOracleMode(context.getCompatibleMode()) ? "\"" : "`"; int[] pkIndexs = new int[pkColumns.length]; for (int i = 0, n = pkColumns.length; i < n; i++) { String pkc = pkColumns[i]; + String escapedPkc = String.format("%s%s%s", escapeChar, pkc, escapeChar); int j = 0; for (int k = columns.size(); j < k; j++) { // 如果用户定义的 columns中 带有 ``,也不影响, // 最多只是在select里多加了几列PK column - if (StringUtils.equalsIgnoreCase(pkc, columns.get(j))) { + if (StringUtils.equalsIgnoreCase(pkc, columns.get(j)) + || StringUtils.equalsIgnoreCase(escapedPkc, columns.get(j))) { pkIndexs[i] = j; + pkColumns[i] = columns.get(j); break; } } From d1a17c5c917a56edba051edc9bfc72e5fe4c3e5a Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Mon, 7 Mar 2022 18:33:40 +0800 Subject: [PATCH 166/251] fix where missing in single table split --- .../datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java index d9846b39..df01ffd0 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java @@ -93,6 +93,7 @@ public class SingleTableSplitUtil { allQuerySql.add(tempQuerySql); tempConfig.set(Key.QUERY_SQL, tempQuerySql); + tempConfig.set(Key.WHERE, (hasWhere ? ("(" + where + ") and") : "") + range); pluginParams.add(tempConfig); } } else { @@ -103,6 +104,7 @@ public class SingleTableSplitUtil { + String.format(" %s IS NOT NULL", splitPkName); allQuerySql.add(tempQuerySql); tempConfig.set(Key.QUERY_SQL, tempQuerySql); + tempConfig.set(Key.WHERE, (hasWhere ? "(" + where + ") and" : "") + String.format(" %s IS NOT NULL", splitPkName)); pluginParams.add(tempConfig); } @@ -118,6 +120,7 @@ public class SingleTableSplitUtil { StringUtils.join(allQuerySql, "\n")); tempConfig.set(Key.QUERY_SQL, tempQuerySql); + tempConfig.set(Key.WHERE, (hasWhere ? "(" + where + ") and" : "") + String.format(" %s IS NULL", splitPkName)); pluginParams.add(tempConfig); return pluginParams; From f6f94821bc3b928501d32b7bfb6bb520563de74e Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Mon, 7 Mar 2022 19:51:07 +0800 Subject: [PATCH 167/251] fix number type splitPk in ob oracle mode --- .../datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java index df01ffd0..7e09cce5 100755 --- a/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java +++ b/plugin-rdbms-util/src/main/java/com/alibaba/datax/plugin/rdbms/reader/util/SingleTableSplitUtil.java @@ -257,6 +257,7 @@ public class SingleTableSplitUtil { switch (SingleTableSplitUtil.DATABASE_TYPE) { case Oracle: + case OceanBase: isValidLongType |= type == Types.NUMERIC; break; default: From 8d9e936047766e5830944ff6313f38b02b0f0a02 Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Mon, 7 Mar 2022 20:06:40 +0800 Subject: [PATCH 168/251] obreader: support table name with schema name --- .../util/ObReaderUtils.java | 77 +++++++++++++++---- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 8af7377a..73576aa0 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -143,10 +143,20 @@ public class ObReaderUtils { String sql = "show index from " + tableName + " where Key_name='PRIMARY'"; if (isOracleMode(context.getCompatibleMode())) { tableName = tableName.toUpperCase(); - sql = "SELECT cols.column_name Column_name " + + String schema; + if (tableName.contains(".")) { + schema = String.format("'%s'", tableName.substring(0, tableName.indexOf("."))); + tableName = tableName.substring(tableName.indexOf(".") + 1); + } else { + schema = "(select sys_context('USERENV','current_schema') from dual)"; + } + sql = String.format( + "SELECT cols.column_name Column_name " + "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type = 'P' " + - "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; + "WHERE cols.table_name = '%s' AND cons.constraint_type = 'P' " + + "AND cons.constraint_name = cols.constraint_name " + + "AND cons.owner = cols.owner and cons.OWNER = %s", + tableName, schema); } LOG.info("get primary key by sql: " + sql); Statement ps = null; @@ -156,25 +166,30 @@ public class ObReaderUtils { try { ps = conn.createStatement(); rs = ps.executeQuery(sql); + boolean hasPk = false; while (rs.next()) { + hasPk = true; String columnName = rs.getString("Column_name"); columnName = escapeDatabaseKeywords(columnName); if (!isEscapeMode(columnName)) { - columnName.toLowerCase(); + columnName = columnName.toLowerCase(); } if (!realIndex.contains(columnName)) { realIndex.add(columnName); } } - String[] pks = new String[realIndex.size()]; - realIndex.toArray(pks); - return pks; + if (hasPk) { + String[] pks = new String[realIndex.size()]; + realIndex.toArray(pks); + return pks; + } } catch (Throwable e) { LOG.error("show index from table fail :" + sql, e); } finally { close(rs, ps, null); } + return null; } @@ -357,7 +372,6 @@ public class ObReaderUtils { return; } SQLExpr expr = SQLUtils.toSQLExpr(context.getWhere(), "mysql"); - LOG.info("expr: " + expr); List allColumnsInTab = getAllColumnFromTab(conn, context.getTable()); List allColNames = getColNames(allColumnsInTab, expr); @@ -449,9 +463,19 @@ public class ObReaderUtils { Map> allIndex = new HashMap>(); String sql = "show index from " + tableName; if (isOracleMode(compatibleMode)) { + String schema; tableName = tableName.toUpperCase(); - sql = "SELECT INDEX_NAME Key_name, COLUMN_NAME Column_name " + - "from dba_ind_columns where TABLE_NAME = '" + tableName + "' " + + if (tableName.contains(".")) { + schema = String.format("'%s'", tableName.substring(0, tableName.indexOf("."))); + tableName = tableName.substring(tableName.indexOf(".") + 1); + } else { + schema = "(select sys_context('USERENV','current_schema') from dual)"; + } + + sql = String.format( + "SELECT INDEX_NAME Key_name, COLUMN_NAME Column_name " + + "from all_ind_columns " + + "where TABLE_NAME = '%s' and TABLE_OWNER = %s " + " union all " + "SELECT DISTINCT " + "CASE " + @@ -461,9 +485,12 @@ public class ObReaderUtils { "END AS Key_name, " + "cols.column_name Column_name " + "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type in('P', 'U') " + - "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; + "WHERE cols.table_name = '%s' AND cons.constraint_type in('P', 'U') " + + "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner " + + "AND cons.owner = %s", + tableName, schema, tableName, schema); } + Statement stmt = null; ResultSet rs = null; @@ -486,11 +513,26 @@ public class ObReaderUtils { // add primary key to all index if (allIndex.containsKey("PRIMARY")) { List colsInPrimary = allIndex.get("PRIMARY"); - for (String keyName : allIndex.keySet()) { - if (keyName.equals("PRIMARY")) { + Iterator>> iterator = allIndex.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + if (entry.getKey().equals("PRIMARY")) { continue; } - allIndex.get(keyName).addAll(colsInPrimary); + + // remove the index which is identical with primary key + List indexColumns = entry.getValue(); + if (colsInPrimary.equals(indexColumns)) { + iterator.remove(); + } else { + // add primary key to the index if the index is not on the column + colsInPrimary.forEach( + c -> { + if (!indexColumns.contains(c)) { + indexColumns.add(c); + } + }); + } } } } catch (Exception e) { @@ -504,6 +546,7 @@ public class ObReaderUtils { } /** + * find out the indexes which contains all columns in where conditions * @param conn * @param table * @param colNamesInCondition @@ -517,7 +560,7 @@ public class ObReaderUtils { return indexNames; } - LOG.info("columNamesInConditions: " + String.join(",", colNamesInCondition)); + LOG.info("columnNamesInConditions: " + String.join(",", colNamesInCondition)); Map> allIndex = getAllIndex(conn, table, compatibleMode); for (String keyName : allIndex.keySet()) { @@ -528,7 +571,7 @@ public class ObReaderUtils { if (allIndex.get(keyName).size() < colNamesInCondition.size()) { indexNotMatch = true; } else { - // the the first number columns of this index + // the first number columns of this index int num = colNamesInCondition.size(); for (String colName : allIndex.get(keyName)) { if (!colNamesInCondition.contains(colName)) { From da9134bda4cdad7972b68096fa971fcbb1805b59 Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Tue, 8 Mar 2022 15:57:27 +0800 Subject: [PATCH 169/251] readByPartition is lower priority than splitPk --- .../oceanbasev10reader/ext/ReaderJob.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index 56c4f1ad..6ed15e40 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -6,7 +6,7 @@ import com.alibaba.datax.common.constant.CommonConstant; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Key; -import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.datax.plugin.rdbms.reader.Constant; import com.alibaba.datax.plugin.reader.oceanbasev10reader.OceanBaseReader; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.PartitionSplitUtil; @@ -29,7 +29,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { ObReaderUtils.escapeDatabaseKeywords(columns); originalConfig.set(Key.COLUMN, columns); - List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); + List conns = originalConfig.getList(Constant.CONN_MARK, JSONObject.class); for (int i = 0; i < conns.size(); i++) { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); @@ -38,7 +38,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { // tables will be null when querySql is configured if (tables != null) { ObReaderUtils.escapeDatabaseKeywords(tables); - originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), + originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, i, Key.TABLE), tables); } } @@ -48,7 +48,8 @@ public class ReaderJob extends CommonRdbmsReader.Job { @Override public List split(Configuration originalConfig, int adviceNumber) { List list; - if (originalConfig.getBool(ObReaderKey.READ_BY_PARTITION, false)) { + // readByPartition is lower priority than splitPk + if (!isSplitPkValid(originalConfig) && originalConfig.getBool(ObReaderKey.READ_BY_PARTITION, false)) { LOG.info("try to split reader job by partition."); list = PartitionSplitUtil.splitByPartition(originalConfig); } else { @@ -65,9 +66,15 @@ public class ReaderJob extends CommonRdbmsReader.Job { return list; } + private boolean isSplitPkValid(Configuration originalConfig) { + String splitPk = originalConfig.getString(Key.SPLIT_PK); + return splitPk != null && splitPk.trim().length() > 0; + } + private String getObRegionName(String jdbcUrl) { - if (jdbcUrl.startsWith(Constant.OB10_SPLIT_STRING)) { - String[] ss = jdbcUrl.split(Constant.OB10_SPLIT_STRING_PATTERN); + final String obJdbcDelimiter = com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING; + if (jdbcUrl.startsWith(obJdbcDelimiter)) { + String[] ss = jdbcUrl.split(obJdbcDelimiter); if (ss.length >= 2) { String tenant = ss[1].trim(); String[] sss = tenant.split(":"); From 04c3c2e81034de25983fb49aca01e405fd9a2c8f Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Tue, 8 Mar 2022 16:42:59 +0800 Subject: [PATCH 170/251] do not readBySplit when it's not in table mode --- .../plugin/reader/oceanbasev10reader/ext/ReaderJob.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index 6ed15e40..291dc785 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -1,5 +1,6 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; +import java.util.Arrays; import java.util.List; import com.alibaba.datax.common.constant.CommonConstant; @@ -48,8 +49,11 @@ public class ReaderJob extends CommonRdbmsReader.Job { @Override public List split(Configuration originalConfig, int adviceNumber) { List list; - // readByPartition is lower priority than splitPk - if (!isSplitPkValid(originalConfig) && originalConfig.getBool(ObReaderKey.READ_BY_PARTITION, false)) { + // readByPartition is lower priority than splitPk. + // and readByPartition only works in table mode. + if (!isSplitPkValid(originalConfig) && + originalConfig.getBool(Constant.IS_TABLE_MODE) && + originalConfig.getBool(ObReaderKey.READ_BY_PARTITION, false)) { LOG.info("try to split reader job by partition."); list = PartitionSplitUtil.splitByPartition(originalConfig); } else { From e7403004816210c88d253ebc679df8bbd0c764b0 Mon Sep 17 00:00:00 2001 From: johnrobbet Date: Tue, 8 Mar 2022 17:43:14 +0800 Subject: [PATCH 171/251] do not change columnName to upper case when searching for save point columns --- .../plugin/reader/oceanbasev10reader/util/ObReaderUtils.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 73576aa0..6356b97b 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -171,9 +171,6 @@ public class ObReaderUtils { hasPk = true; String columnName = rs.getString("Column_name"); columnName = escapeDatabaseKeywords(columnName); - if (!isEscapeMode(columnName)) { - columnName = columnName.toLowerCase(); - } if (!realIndex.contains(columnName)) { realIndex.add(columnName); } From 676af18f6ffbfed1e52bbf7a04c1076eac0124d3 Mon Sep 17 00:00:00 2001 From: hffariel Date: Thu, 17 Mar 2022 17:30:48 +0800 Subject: [PATCH 172/251] fix an npe --- README.md | 2 +- .../starrockswriter/manager/StarRocksStreamLoadVisitor.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0ff50387..6b9bcc5c 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ This is a repo forked from [DataX](https://github.com/alibaba/DataX), and mainta ## How to use 1. Run `./build.sh` to gennerate the `starrockswriter.tar.gz`, then untar it into your own [DataX release](https://github.com/alibaba/DataX) directory(which will be `datax/plugin/writer/`). -2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to the [Documentations](https://docs.starrocks.com). +2. Create a `job.json` to define the reader and writer. More details about the configurations, please refer to the [Documentations](https://docs.starrocks.com/en-us/main/loading/DataX-starrocks-writer). 3. Run `python datax/bin/datax.py --jvm="-Xms6G -Xmx6G" --loglevel=debug job.json` to start a job. diff --git a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java index b8245d71..7d06d2db 100644 --- a/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java +++ b/starrockswriter/src/main/java/com/starrocks/connector/datax/plugin/writer/starrockswriter/manager/StarRocksStreamLoadVisitor.java @@ -25,6 +25,7 @@ import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -107,7 +108,7 @@ public class StarRocksStreamLoadVisitor { private byte[] joinRows(List rows, int totalBytes) { if (StarRocksWriterOptions.StreamLoadFormat.CSV.equals(writerOptions.getStreamLoadFormat())) { - Map props = writerOptions.getLoadProps(); + Map props = (writerOptions.getLoadProps() == null ? new HashMap<>() : writerOptions.getLoadProps()); byte[] lineDelimiter = StarRocksDelimiterParser.parse((String)props.get("row_delimiter"), "\n").getBytes(StandardCharsets.UTF_8); ByteBuffer bos = ByteBuffer.allocate(totalBytes + rows.size() * lineDelimiter.length); for (byte[] row : rows) { @@ -216,7 +217,7 @@ public class StarRocksStreamLoadVisitor { } } } - + private String getBasicAuthHeader(String username, String password) { String auth = username + ":" + password; byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8)); From ef8459376072b66c252235fb41e326b88105fb45 Mon Sep 17 00:00:00 2001 From: Trafalgar Date: Tue, 22 Mar 2022 10:59:21 +0800 Subject: [PATCH 173/251] Update sqlserverwriter.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正文档中关于 ["*"] 的显示问题, 主要是 * 在markdown语法的转义导致的 --- sqlserverwriter/doc/sqlserverwriter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlserverwriter/doc/sqlserverwriter.md b/sqlserverwriter/doc/sqlserverwriter.md index 255834c6..cdaf1526 100644 --- a/sqlserverwriter/doc/sqlserverwriter.md +++ b/sqlserverwriter/doc/sqlserverwriter.md @@ -127,7 +127,7 @@ SqlServerWriter 通过 DataX 框架获取 Reader 生成的协议数据,根据 * **column** - * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。如果要依次写入全部列,使用*表示, 例如: "column": ["*"] + * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。如果要依次写入全部列,使用*表示, 例如: "column": ["\*"] **column配置项必须指定,不能留空!** From 22c4f8cd18419a9c0cec9432fea3898c14104d37 Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 22 Mar 2022 13:50:43 +0800 Subject: [PATCH 174/251] [TS-1342]: record missing when batchWrite --- .../datax/plugin/writer/tdenginewriter/DefaultDataHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 7854afee..f2d86509 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -89,6 +89,7 @@ public class DefaultDataHandler implements DataHandler { recordBatch.add(record); } else { try { + recordBatch.add(record); affectedRows = writeBatch(conn, recordBatch); } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); From 1856f044b7730933f5dc98d73800851f4b0abd07 Mon Sep 17 00:00:00 2001 From: Zhiyu Yang <69311263+zyyang-taosdata@users.noreply.github.com> Date: Tue, 22 Mar 2022 14:20:42 +0800 Subject: [PATCH 175/251] Update tdenginewriter-CN.md --- tdenginewriter/doc/tdenginewriter-CN.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md index 54cb9b13..3d115fb7 100644 --- a/tdenginewriter/doc/tdenginewriter-CN.md +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -175,8 +175,8 @@ datax中的数据类型,可以映射到TDengine的数据类型 | TDengine到TDengine | [超级表到子表](../src/test/resources/t2t-3.json) | | TDengine到TDengine | [普通表到普通表](../src/test/resources/t2t-4.json) | | RDBMS到TDengine | [普通表到超级表,指定tbname](../src/test/resources/dm2t-1.json) | -| RDBMS到TDengine | [普通表到超级表,不指定tbname](../src/test/resources/dm2t-2.json) | -| RDBMS到TDengine | [普通表到子表](../src/test/resources/dm2t-3.json) | +| RDBMS到TDengine | [普通表到超级表,不指定tbname](../src/test/resources/dm2t-3.json) | +| RDBMS到TDengine | [普通表到子表](../src/test/resources/dm2t-2.json) | | RDBMS到TDengine | [普通表到普通表](../src/test/resources/dm2t-4.json) | | OpenTSDB到TDengine | [metric到普通表](../src/test/resources/o2t-1.json) | From 7ca8038318e2bde17bc0e7e273520852a4107b22 Mon Sep 17 00:00:00 2001 From: ShiChao <13263325202@163.com> Date: Wed, 23 Mar 2022 19:23:11 +0800 Subject: [PATCH 176/251] [TS-1358]: fix affected row incorrect --- .../plugin/writer/tdenginewriter/DefaultDataHandler.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index f2d86509..30ba7e23 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -90,10 +90,10 @@ public class DefaultDataHandler implements DataHandler { } else { try { recordBatch.add(record); - affectedRows = writeBatch(conn, recordBatch); + affectedRows += writeBatch(conn, recordBatch); } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } @@ -102,10 +102,10 @@ public class DefaultDataHandler implements DataHandler { if (!recordBatch.isEmpty()) { try { - affectedRows = writeBatch(conn, recordBatch); + affectedRows += writeBatch(conn, recordBatch); } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } From 81391b60730cc5b030581d3eb9434f4e7a39216b Mon Sep 17 00:00:00 2001 From: ShiChao <13263325202@163.com> Date: Wed, 23 Mar 2022 19:26:13 +0800 Subject: [PATCH 177/251] [TS-1358]: fix affected row incorrect --- .../plugin/writer/tdenginewriter/DefaultDataHandler.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index f2d86509..30ba7e23 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -90,10 +90,10 @@ public class DefaultDataHandler implements DataHandler { } else { try { recordBatch.add(record); - affectedRows = writeBatch(conn, recordBatch); + affectedRows += writeBatch(conn, recordBatch); } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } @@ -102,10 +102,10 @@ public class DefaultDataHandler implements DataHandler { if (!recordBatch.isEmpty()) { try { - affectedRows = writeBatch(conn, recordBatch); + affectedRows += writeBatch(conn, recordBatch); } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } From 1a7a00c7d1081801e5cfea2659c9bd430fe13d2c Mon Sep 17 00:00:00 2001 From: zyyang Date: Thu, 5 May 2022 10:30:08 +0800 Subject: [PATCH 178/251] resolve code review suggestions --- tdenginereader/doc/tdenginereader-CN.md | 21 +-- .../datax/plugin/reader/TDengineReader.java | 28 ++-- .../writer/tdenginewriter/Constants.java | 4 +- .../tdenginewriter/DefaultDataHandler.java | 157 ++++++++++++------ .../writer/tdenginewriter/SchemaManager.java | 11 +- .../TDengineWriterErrorCode.java | 8 +- .../DefaultDataHandlerTest.java | 12 +- 7 files changed, 141 insertions(+), 100 deletions(-) diff --git a/tdenginereader/doc/tdenginereader-CN.md b/tdenginereader/doc/tdenginereader-CN.md index aa3751ef..e9502756 100644 --- a/tdenginereader/doc/tdenginereader-CN.md +++ b/tdenginereader/doc/tdenginereader-CN.md @@ -22,7 +22,7 @@ TDengineReader 通过 TDengine 的 JDBC driver 查询获取数据。 "reader": { "name": "tdenginereader", "parameter": { - "user": "root", + "username": "root", "password": "taosdata", "connection": [ { @@ -165,24 +165,8 @@ TDengineReader 通过 TDengine 的 JDBC driver 查询获取数据。 #### 4.1.1 数据特征 -建表语句: - -单行记录类似于: - #### 4.1.2 机器参数 -* 执行DataX的机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: DataX 数据不落磁盘,不统计此项 - -* TDengine数据库机器参数为: - 1. cpu: - 2. mem: - 3. net: 千兆双网卡 - 4. disc: - #### 4.1.3 DataX jvm 参数 -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError @@ -201,9 +185,6 @@ TDengineReader 通过 TDengine 的 JDBC driver 查询获取数据。 说明: -1. 这里的单表,主键类型为 bigint(20),自增。 -2. batchSize 和 通道个数,对性能影响较大。 - #### 4.2.4 性能测试小结 1. diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index 332ddf3a..37977794 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -93,7 +93,7 @@ public class TDengineReader extends Reader { } if (start >= end) throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, - "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); + "The parameter " + Key.BEGIN_DATETIME + ": " + beginDatetime + " should be less than the parameter " + Key.END_DATETIME + ": " + endDatetime + "."); } @@ -119,7 +119,6 @@ public class TDengineReader extends Reader { } } - LOG.info("Configuration: {}", configurations); return configurations; } } @@ -142,15 +141,14 @@ public class TDengineReader extends Reader { try { Class.forName("com.taosdata.jdbc.TSDBDriver"); Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); + } catch (ClassNotFoundException ignored) { + LOG.warn(ignored.getMessage(), ignored); } } @Override public void init() { this.readerSliceConfig = super.getPluginJobConf(); - LOG.info("getPluginJobConf: {}", readerSliceConfig); String user = readerSliceConfig.getString(Key.USERNAME); String password = readerSliceConfig.getString(Key.PASSWORD); @@ -174,7 +172,12 @@ public class TDengineReader extends Reader { @Override public void destroy() { - + try { + if (conn != null) + conn.close(); + } catch (SQLException e) { + LOG.error(e.getMessage(), e); + } } @Override @@ -199,22 +202,15 @@ public class TDengineReader extends Reader { sqlList.addAll(querySql); } - try (Statement stmt = conn.createStatement()) { - for (String sql : sqlList) { + for (String sql : sqlList) { + try (Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { Record record = buildRecord(recordSender, rs, mandatoryEncoding); recordSender.sendToWriter(record); } - } - } catch (SQLException e) { - throw DataXException.asDataXException(TDengineReaderErrorCode.RUNTIME_EXCEPTION, e.getMessage(), e); - } finally { - try { - if (conn != null) - conn.close(); } catch (SQLException e) { - e.printStackTrace(); + LOG.error(e.getMessage(), e); } } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java index d62c8f32..e0445219 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java @@ -1,8 +1,6 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; public class Constants { - public static final String DEFAULT_USERNAME = "root"; - public static final String DEFAULT_PASSWORD = "taosdata"; - public static final int DEFAULT_BATCH_SIZE = 1; + public static final int DEFAULT_BATCH_SIZE = 1000; public static final boolean DEFAULT_IGNORE_TAGS_UNMATCHED = false; } \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 4ee91ce0..9801a323 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -52,14 +52,13 @@ public class DefaultDataHandler implements DataHandler { try { Class.forName("com.taosdata.jdbc.TSDBDriver"); Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); + } catch (ClassNotFoundException ignored) { } } public DefaultDataHandler(Configuration configuration, TaskPluginCollector taskPluginCollector) { - this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); - this.password = configuration.getString(Key.PASSWORD, Constants.DEFAULT_PASSWORD); + this.username = configuration.getString(Key.USERNAME); + this.password = configuration.getString(Key.PASSWORD); this.jdbcUrl = configuration.getString(Key.JDBC_URL); this.batchSize = configuration.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); this.tables = configuration.getList(Key.TABLE, String.class); @@ -73,14 +72,15 @@ public class DefaultDataHandler implements DataHandler { int count = 0; int affectedRows = 0; - try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); - // prepare table_name -> table_meta - this.schemaManager = new SchemaManager(conn); - this.tableMetas = schemaManager.loadTableMeta(tables); - // prepare table_name -> column_meta - this.columnMetas = schemaManager.loadColumnMetas(tables); + if (schemaManager == null) { + // prepare table_name -> table_meta + this.schemaManager = new SchemaManager(conn); + this.tableMetas = schemaManager.loadTableMeta(tables); + // prepare table_name -> column_meta + this.columnMetas = schemaManager.loadColumnMetas(tables); + } List recordBatch = new ArrayList<>(); Record record; @@ -89,10 +89,11 @@ public class DefaultDataHandler implements DataHandler { recordBatch.add(record); } else { try { - affectedRows = writeBatch(conn, recordBatch); - } catch (SQLException e) { + recordBatch.add(record); + affectedRows += writeBatch(conn, recordBatch); + } catch (Exception e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } @@ -101,10 +102,10 @@ public class DefaultDataHandler implements DataHandler { if (!recordBatch.isEmpty()) { try { - affectedRows = writeBatch(conn, recordBatch); - } catch (SQLException e) { + affectedRows += writeBatch(conn, recordBatch); + } catch (Exception e) { LOG.warn("use one row insert. because:" + e.getMessage()); - affectedRows = writeEachRow(conn, recordBatch); + affectedRows += writeEachRow(conn, recordBatch); } recordBatch.clear(); } @@ -126,8 +127,8 @@ public class DefaultDataHandler implements DataHandler { recordList.add(record); try { affectedRows += writeBatch(conn, recordList); - } catch (SQLException e) { - LOG.error(e.getMessage()); + } catch (Exception e) { + LOG.error(e.getMessage(), e); this.taskPluginCollector.collectDirtyRecord(record, e); } } @@ -145,7 +146,7 @@ public class DefaultDataHandler implements DataHandler { * 3. 对于tb,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => insert into tb(ts, f1, f2) values(ts, f1, f2) * 4. 对于t,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, f3, t1, t2] insert into t(ts, f1, f2, f3, t1, t2) values(ts, f1, f2, f3, t1, t2) */ - public int writeBatch(Connection conn, List recordBatch) throws SQLException { + public int writeBatch(Connection conn, List recordBatch) throws Exception { int affectedRows = 0; for (String table : tables) { TableMeta tableMeta = tableMetas.get(table); @@ -173,31 +174,62 @@ public class DefaultDataHandler implements DataHandler { * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) */ - private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws SQLException { + private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws Exception { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder("insert into"); for (Record record : recordBatch) { sb.append(" ").append(record.getColumn(indexOf("tbname")).asString()) .append(" using ").append(table) - .append(" tags") - .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { - return colMeta.isTag; - }).map(colMeta -> { - return buildColumnValue(colMeta, record); - }).collect(Collectors.joining(",", "(", ")"))) - .append(" ") - .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + .append(" tags"); +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columns.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + if (!colMeta.isTag) + continue; + String tagValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(tagValue); + } else { + sb.append(",").append(tagValue); + } + } + sb.append(")"); + + sb.append(" ").append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { return !colMeta.isTag; }).map(colMeta -> { return colMeta.field; }).collect(Collectors.joining(",", "(", ")"))) - .append(" values") - .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { - return !colMeta.isTag; - }).map(colMeta -> { - return buildColumnValue(colMeta, record); - }).collect(Collectors.joining(",", "(", ")"))); + .append(" values"); + +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return !colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + if (colMeta.isTag) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); } String sql = sb.toString(); @@ -213,10 +245,11 @@ public class DefaultDataHandler implements DataHandler { return count; } - private String buildColumnValue(ColumnMeta colMeta, Record record) { + private String buildColumnValue(ColumnMeta colMeta, Record record) throws Exception { Column column = record.getColumn(indexOf(colMeta.field)); TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); - switch (column.getType()) { + Column.Type type = column.getType(); + switch (type) { case DATE: { Date value = column.asDate(); switch (timestampPrecision) { @@ -243,8 +276,9 @@ public class DefaultDataHandler implements DataHandler { case DOUBLE: case INT: case LONG: + column.asString(); default: - return column.asString(); + throw new Exception("invalid column type: " + type); } } @@ -392,7 +426,7 @@ public class DefaultDataHandler implements DataHandler { * else * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) */ - private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws SQLException { + private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws Exception { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder(); @@ -419,11 +453,25 @@ public class DefaultDataHandler implements DataHandler { if (ignoreTagsUnmatched && !tagsAllMatch) continue; - sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { - return !colMeta.isTag; - }).map(colMeta -> { - return buildColumnValue(colMeta, record); - }).collect(Collectors.joining(", ", "(", ") "))); +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return !colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(", ", "(", ") "))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (colMeta.isTag) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); + validRecords++; } @@ -462,7 +510,7 @@ public class DefaultDataHandler implements DataHandler { * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) */ - private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws SQLException { + private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws Exception { List columnMetas = this.columnMetas.get(table); StringBuilder sb = new StringBuilder(); @@ -474,9 +522,22 @@ public class DefaultDataHandler implements DataHandler { .append(" values "); for (Record record : recordBatch) { - sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { - return buildColumnValue(colMeta, record); - }).collect(Collectors.joining(",", "(", ")"))); +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); } String sql = sb.toString(); @@ -492,4 +553,4 @@ public class DefaultDataHandler implements DataHandler { "cannot find col: " + colName + " in columns: " + columns); } -} +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index c48b7942..f3bdbfbc 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -10,6 +10,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; +import java.util.stream.Collectors; public class SchemaManager { private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); @@ -123,12 +124,14 @@ public class SchemaManager { } } } catch (SQLException e) { - e.printStackTrace(); + LOG.error(e.getMessage(), e); } colMeta.value = value; }); - LOG.debug("load column metadata of " + table + ": " + Arrays.toString(columnMetaList.toArray())); + LOG.debug("load column metadata of " + table + ": " + + columnMetaList.stream().map(ColumnMeta::toString).collect(Collectors.joining(",", "[", "]")) + ); ret.put(table, columnMetaList); } return ret; @@ -142,7 +145,9 @@ public class SchemaManager { tableMeta.tags = rs.getInt("tags"); tableMeta.tables = rs.getInt("tables"); - LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + if (LOG.isDebugEnabled()){ + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + } return tableMeta; } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java index 469449e6..e1f2bc29 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -4,10 +4,10 @@ import com.alibaba.datax.common.spi.ErrorCode; public enum TDengineWriterErrorCode implements ErrorCode { - REQUIRED_VALUE("TDengineWriter-00", "缺失必要的值"), - ILLEGAL_VALUE("TDengineWriter-01", "值非法"), - RUNTIME_EXCEPTION("TDengineWriter-02", "运行时异常"), - TYPE_ERROR("TDengineWriter-03", "Datax类型无法正确映射到TDengine类型"); + REQUIRED_VALUE("TDengineWriter-00", "parameter value is missing"), + ILLEGAL_VALUE("TDengineWriter-01", "invalid parameter value"), + RUNTIME_EXCEPTION("TDengineWriter-02", "runtime exception"), + TYPE_ERROR("TDengineWriter-03", "data type mapping error"); private final String code; private final String description; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index e0acacb8..1034b74a 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -28,7 +28,7 @@ public class DefaultDataHandlerTest { private final TaskPluginCollector taskPluginCollector = new TDengineWriter.Task().getTaskPluginCollector(); @Test - public void writeSupTableBySQL() throws SQLException { + public void writeSupTableBySQL() throws Exception { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -68,7 +68,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSupTableBySQL_2() throws SQLException { + public void writeSupTableBySQL_2() throws Exception { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -106,7 +106,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSupTableBySchemaless() throws SQLException { + public void writeSupTableBySchemaless() throws Exception { // given createSupTable(); Configuration configuration = Configuration.from("{" + @@ -146,7 +146,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithTableName() throws SQLException { + public void writeSubTableWithTableName() throws Exception { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -185,7 +185,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithoutTableName() throws SQLException { + public void writeSubTableWithoutTableName() throws Exception { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -224,7 +224,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeNormalTable() throws SQLException { + public void writeNormalTable() throws Exception { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + From f0fcca0810b504d3057d1b96f409c6e90b65ad4c Mon Sep 17 00:00:00 2001 From: JohnnyJie <771886728@qq.com> Date: Thu, 12 May 2022 11:23:22 +0800 Subject: [PATCH 179/251] Update tsdbhttpwriter.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TSDB Writer文档 --- tsdbwriter/doc/tsdbhttpwriter.md | 152 ++++++++++++++++++++++++++++--- 1 file changed, 138 insertions(+), 14 deletions(-) diff --git a/tsdbwriter/doc/tsdbhttpwriter.md b/tsdbwriter/doc/tsdbhttpwriter.md index c723a360..87f4d133 100644 --- a/tsdbwriter/doc/tsdbhttpwriter.md +++ b/tsdbwriter/doc/tsdbhttpwriter.md @@ -6,24 +6,57 @@ ___ ## 1 快速介绍 -TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库中(后续简称 TSDB)。 +TSDBWriter 插件实现了将数据点写入到阿里巴巴云原生多模数据库Lindorm TSDB数据库中(后续简称 TSDB)。 -时间序列数据库(Time Series Database , 简称 TSDB)是一种高性能,低成本,稳定可靠的在线时序数据库服务;提供高效读写,高压缩比存储、时序数据插值及聚合计算,广泛应用于物联网(IoT)设备监控系统 ,企业能源管理系统(EMS),生产安全监控系统,电力检测系统等行业场景。 TSDB 提供百万级时序数据秒级写入,高压缩比低成本存储、预降采样、插值、多维聚合计算,查询结果可视化功能;解决由于设备采集点数量巨大,数据采集频率高,造成的存储成本高,写入和查询分析效率低的问题。更多关于 TSDB 的介绍,详见[阿里云 TSDB 官网](https://help.aliyun.com/product/54825.html)。 +时间序列数据库(Time Series Database , 简称 TSDB)是一种高性能,低成本,稳定可靠的在线时序数据库服务;提供高效读写,高压缩比存储、时序数据插值及聚合计算,广泛应用于物联网(IoT)设备监控系统 ,企业能源管理系统(EMS),生产安全监控系统,电力检测系统等行业场景。 TSDB 提供千万级时序数据秒级写入,高压缩比低成本存储、预降采样、插值、多维聚合计算,查询结果可视化功能;解决由于设备采集点数量巨大,数据采集频率高,造成的存储成本高,写入和查询分析效率低的问题。更多关于 TSDB 的介绍,详见[阿里云 Lindorm TSDB 官网](https://help.aliyun.com/document_detail/174600.html)。 +注意:阿里巴巴自研HiTSDB已全新升级为云原生多模数据库Lindorm TSDB。Lindorm TSDB兼容大部分HiTSDB的HTTP API并提供原生SQL能力,TSDBWriter插件使用HTTP API方式写入,要使用原生SQL能力需要提前在Lindorm TSDB进行建表。详细参见[与旧版TSDB的比较](https://help.aliyun.com/document_detail/387477.html) ## 2 实现原理 -通过 HTTP 连接 TSDB 实例,并通过 `/api/put` 接口将数据点写入。关于写入接口详见 TSDB 的[接口说明文档](https://help.aliyun.com/document_detail/59939.html)。 - - +通过TSDB客户端 hitsdb-client 连接 TSDB 实例,并将数据点通过HTTP API方式写入。关于写入接口详见TSDB 的[SDK 参考](https://help.aliyun.com/document_detail/61587.html)。 ## 3 功能说明 ### 3.1 配置样例 -* 配置一个从 OpenTSDB 数据库同步抽取数据到 TSDB: +* 配置TSDB Writer: +```json +{ + "name": "tsdbwriter", + "parameter": { + "endpoint": "http://localhost:8242", + "sourceDbType": "RDB", + "batchSize": 256, + "columnType": [ + "tag", + "tag", + "field_string", + "field_double", + "timestamp", + "field_boolean" + ], + "column": [ + "tag1", + "tag2", + "field1", + "field2", + "timestamp", + "field3" + ], + "multiField":"true", + "table":"testmetric", + "username":"xxx", + "password":"xxx", + "ignoreWriteError":"false", + "database":"default" + } +} +``` + +* 配置一个从 支持 OpenTSDB 协议的数据库同步抽取数据到 TSDB: ```json { @@ -42,7 +75,7 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 } }, "writer": { - "name": "tsdbhttpwriter", + "name": "tsdbwriter", "parameter": { "endpoint": "http://localhost:8242" } @@ -58,7 +91,36 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 } ``` - +* 使用 OpenTSDB (单值)协议写入TSDB(不推荐): +```json +{ + "name": "tsdbwriter", + "endpoint": "http://localhost:8242", + "sourceDbType": "RDB", + "parameter": { + "batchSize": 256, + "columnType": [ + "tag", + "tag", + "field_string", + "field_double", + "timestamp", + "field_boolean" + ], + "column": [ + "tag1", + "tag2", + "field_metric_1", + "field_metric_2", + "timestamp", + "field_metric_3" + ], + "username":"tsdb", + "password":"enxU^", + "ignoreWriteError":"false" + } +} +``` ### 3.2 参数说明 @@ -74,23 +136,85 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 * 格式:http://IP:Port * 默认值:无 +* **sourceDbType** + * 描述:源端数据类型 + * 必选:否 + * 格式:string [RDB或者TSDB] + * 默认值:TSDB + +* **multiField** + * 描述:使用HTTP API多值(多个field)方式写入,目前TSDB版本使用多值写入,需要指定为true + * 必选:是 + * 格式:bool + * 默认值:false (单值) + * 说明: 如果使用Lindorm TSDB原生SQL能力访问HTTP API方式写入的数据,需要在TSDB进行预建表,否则只能使用HiTSDB HTTP API方式[查询数据](https://help.aliyun.com/document_detail/107576.html)。 + +* **column** + * 描述:关系型数据库中表的字段名 + * 必选:当sourceDbType为RDB时必选 + * 格式:string + * 默认值:无 + * 说明: 此处的字段顺序,需要和Reader插件中配置的column字段的顺序保持一致。 + +* **columnType** + * 描述:关系型数据库中表字段,映射到TSDB中的类型。支持的类型如下所示: + * timestamp:该字段为时间戳 + * tag:该字段为tag + * field_string: 该Field的value是字符串类型 + * field_double: 该Field的value是数值类型 + * field_boolean: 该Field的value是布尔类型 + * 必选:当sourceDbType为RDB时必选 + * 格式:string [RDB或者TSDB] + * 默认值: 无 + * 说明: 此处的字段顺序,需要和column配置中的字段顺序保持一致 + +* **table** + * 描述:TSDB对应表名(metric) + * 必选:当sourceDbType为RDB时且multiField为true时必选 + * 格式:string + * 默认值:无 + * 说明: 要导入的TSDB表名,如果multiField为falase,不需要填写,对应的metric需要写到column字段 + * **batchSize** * 描述:每次批量数据的条数 * 必选:否 * 格式:int,需要保证大于 0 * 默认值:100 +* **ignoreWriteError** + * 描述:如果设置为 true,则忽略写入错误,继续写入;否则,多次重试后仍写入失败的话,则会终止写入任务 + * 必选:否 + * 格式:bool + * 默认值:false + +* **username** + * 描述:数据库用户名 + * 必选:否 + * 格式:string + * 默认值:无 + * 说明: TSDB配置了鉴权需要填写 + + +* **password** + * 描述:数据库密码 + * 必选:否 + * 格式:string + * 默认值:无 + * 说明: TSDB配置了鉴权需要填写 + +* **database** + * 描述:导入的数据库 + * 必选:否 + * 格式:string + * 默认值:default + * 说明: TSDB需要提前创建数据库 + * **maxRetryTime** * 描述:失败后重试的次数 * 必选:否 * 格式:int,需要保证大于 1 * 默认值:3 -* **ignoreWriteError** - * 描述:如果设置为 true,则忽略写入错误,继续写入;否则,多次重试后仍写入失败的话,则会终止写入任务 - * 必选:否 - * 格式:bool - * 默认值:false @@ -171,7 +295,7 @@ HBase 机型: 8C16G * 5 ## 5 约束限制 -### 5.1 目前只支持兼容 TSDB 2.4.x 及以上版本 +### 5.1 目前支持Lindorm TSDB全部版本 以及 HiTSDB 2.4.x 及以上版本 其他版本暂不保证兼容 From 64eeea95bbcb446efef922e20a4ca87be484c1f4 Mon Sep 17 00:00:00 2001 From: JohnnyJie <771886728@qq.com> Date: Thu, 12 May 2022 11:44:46 +0800 Subject: [PATCH 180/251] Update tsdbhttpwriter.md --- tsdbwriter/doc/tsdbhttpwriter.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsdbwriter/doc/tsdbhttpwriter.md b/tsdbwriter/doc/tsdbhttpwriter.md index 87f4d133..c0b13654 100644 --- a/tsdbwriter/doc/tsdbhttpwriter.md +++ b/tsdbwriter/doc/tsdbhttpwriter.md @@ -36,7 +36,7 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴云原生多模数据 "field_string", "field_double", "timestamp", - "field_boolean" + "field_bool" ], "column": [ "tag1", @@ -121,6 +121,7 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴云原生多模数据 } } ``` +转换到的TSDB 表名(metric)由column中field对应的列名决定:对于上诉配置一行关系型数据将会写入三个metric(field_metric_1,field_metric_2,field_metric_3) ### 3.2 参数说明 From 1b20d9a9e53244113266f8f0bcb8a26935df49b1 Mon Sep 17 00:00:00 2001 From: ZhangLu <49864044+VVeaker@users.noreply.github.com> Date: Thu, 19 May 2022 11:44:57 +0800 Subject: [PATCH 181/251] Update mongodbwriter.md --- mongodbwriter/doc/mongodbwriter.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mongodbwriter/doc/mongodbwriter.md b/mongodbwriter/doc/mongodbwriter.md index 74de8a0a..b3bfece4 100644 --- a/mongodbwriter/doc/mongodbwriter.md +++ b/mongodbwriter/doc/mongodbwriter.md @@ -116,9 +116,9 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 "type": "int" } ], - "upsertInfo": { - "isUpsert": "true", - "upsertKey": "unique_id" + "writeMode": { + "isReplace": "true", + "replaceKey": "unique_id" } } } @@ -135,11 +135,11 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 * collectionName: MonogoDB的集合名。【必填】 * column:MongoDB的文档列名。【必填】 * name:Column的名字。【必填】 -* type:Column的类型。【选填】 +* type:Column的类型。【必填】 * splitter:特殊分隔符,当且仅当要处理的字符串要用分隔符分隔为字符数组时,才使用这个参数,通过这个参数指定的分隔符,将字符串分隔存储到MongoDB的数组中。【选填】 -* upsertInfo:指定了传输数据时更新的信息。【选填】 -* isUpsert:当设置为true时,表示针对相同的upsertKey做更新操作。【选填】 -* upsertKey:upsertKey指定了每行记录的业务主键。用来做更新时使用。【选填】 +* writeMode:指定了传输数据时更新的信息。【选填】 +* isReplace:当设置为true时,表示针对相同的replaceKey做更新操作。【选填】 +* replaceKey:replaceKey指定了每行记录的业务主键。用来做更新时使用。【选填】 #### 5 类型转换 From fb4976901850b4b7b29f5274b68dacbd3d2507bf Mon Sep 17 00:00:00 2001 From: ZhangLu <49864044+VVeaker@users.noreply.github.com> Date: Thu, 2 Jun 2022 09:12:17 +0800 Subject: [PATCH 182/251] Update mysqlreader.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mysqlReader在配置querySql和table时会提示两者冲突,配置其一即可 --- mysqlreader/doc/mysqlreader.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mysqlreader/doc/mysqlreader.md b/mysqlreader/doc/mysqlreader.md index bae4bce0..24589579 100644 --- a/mysqlreader/doc/mysqlreader.md +++ b/mysqlreader/doc/mysqlreader.md @@ -197,9 +197,9 @@ MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReade * **querySql** - * 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id
+ * 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id
- `当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置`,querySql优先级大于table、column、where选项。 + `当用户配置querySql时,MysqlReader直接忽略column、where条件的配置`,querySql优先级大于column、where选项。querySql和table不能同时存在 * 必选:否
From e9a579759ebe0113d7a40aebe074fab83c788134 Mon Sep 17 00:00:00 2001 From: jt-chen <18209291445@163.com> Date: Thu, 9 Jun 2022 21:13:49 +0800 Subject: [PATCH 183/251] =?UTF-8?q?DataX=20=E9=80=9A=E9=81=93=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E6=9B=B4=E6=96=B0=EF=BC=88MaxCompute=E3=80=81Hologres?= =?UTF-8?q?=E3=80=81Tdengine=E3=80=81OSS=EF=BC=89=E3=80=81=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=BC=8F=E6=B4=9E=E6=9B=B4=E6=96=B0=E3=80=81=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=89=93=E5=8C=85=E6=9B=B4=E6=96=B0=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NOTICE | 39 + README.md | 6 +- adbpgwriter/src/main/doc/adbpgwriter.md | 6 +- common/pom.xml | 8 + .../datax/common/element/BoolColumn.java | 8 +- .../datax/common/element/BytesColumn.java | 6 + .../alibaba/datax/common/element/Column.java | 2 + .../datax/common/element/ColumnCast.java | 15 + .../datax/common/element/DateColumn.java | 5 + .../datax/common/element/DoubleColumn.java | 6 + .../datax/common/element/LongColumn.java | 5 + .../alibaba/datax/common/element/Record.java | 6 + .../datax/common/element/StringColumn.java | 10 + .../common/exception/DataXException.java | 8 + .../datax/common/plugin/AbstractPlugin.java | 12 + .../datax/common/util/ConfigurationUtil.java | 37 + .../alibaba/datax/common}/util/DESCipher.java | 298 ++--- .../datax/common/util/DataXCaseEnvUtil.java | 33 + .../common/util/IdAndKeyRollingUtil.java | 62 + .../alibaba/datax/common/util/ListUtil.java | 22 + .../datax/common/util/LocalStrings.properties | 54 + .../common/util/LocalStrings_en_US.properties | 53 + .../common/util/LocalStrings_ja_JP.properties | 53 + .../common/util/LocalStrings_zh_CN.properties | 54 + .../common/util/LocalStrings_zh_HK.properties | 104 ++ .../common/util/LocalStrings_zh_TW.properties | 104 ++ .../datax/common/util/MessageSource.java | 207 +++ .../datax/common/util/RangeSplitUtil.java | 23 + core/pom.xml | 8 + core/src/main/bin/datax.py | 114 +- .../java/com/alibaba/datax/core/Engine.java | 6 +- .../datax/core/LocalStrings.properties | 5 + .../datax/core/LocalStrings_en_US.properties | 5 + .../datax/core/LocalStrings_ja_JP.properties | 5 + .../datax/core/LocalStrings_zh_CN.properties | 5 + .../datax/core/LocalStrings_zh_HK.properties | 10 + .../datax/core/LocalStrings_zh_TW.properties | 10 + .../plugin/task/util/DirtyRecord.java | 19 + .../core/transport/record/DefaultRecord.java | 12 + .../transport/record/TerminateRecord.java | 12 + .../datax/core/util/LocalStrings.properties | 58 + .../core/util/LocalStrings_en_US.properties | 58 + .../core/util/LocalStrings_ja_JP.properties | 58 + .../core/util/LocalStrings_zh_CN.properties | 58 + .../core/util/LocalStrings_zh_HK.properties | 116 ++ .../core/util/LocalStrings_zh_TW.properties | 116 ++ drdsreader/doc/drdsreader.md | 2 +- .../src/main/resources/plugin.json | 2 +- hbase11xwriter/doc/hbase11xwriter.md | 63 +- hdfsreader/pom.xml | 16 + hdfswriter/pom.xml | 18 +- .../plugin/writer/hdfswriter/HdfsHelper.java | 70 + .../plugin/writer/hdfswriter/HdfsWriter.java | 49 + .../datax/plugin/writer/hdfswriter/Key.java | 13 + hologresjdbcwriter/doc/hologresjdbcwriter.md | 204 +++ hologresjdbcwriter/pom.xml | 90 ++ .../src/main/assembly/package.xml | 35 + .../writer/hologresjdbcwriter/BaseWriter.java | 526 ++++++++ .../writer/hologresjdbcwriter/Constant.java | 15 + .../HologresJdbcWriter.java | 78 ++ .../plugin/writer/hologresjdbcwriter/Key.java | 31 + .../hologresjdbcwriter/util/ConfLoader.java | 59 + .../util/OriginalConfPretreatmentUtil.java | 82 ++ .../hologresjdbcwriter/util/WriterUtil.java | 111 ++ .../src/main/resources/plugin.json | 6 + .../main/resources/plugin_job_template.json | 11 + introduction.md | 1 + license.txt | 2 +- mongodbreader/doc/mongodbreader.md | 5 +- mongodbwriter/doc/mongodbwriter.md | 18 +- mysqlreader/doc/mysqlreader.md | 2 +- .../oceanbasev10reader/OceanBaseReader.java | 17 +- .../oceanbasev10reader/ext/ReaderJob.java | 27 +- .../oceanbasev10reader/ext/ReaderTask.java | 44 +- .../util/ObReaderUtils.java | 164 ++- .../oceanbasev10reader/util/TaskContext.java | 1 + .../OceanBaseV10Writer.java | 34 +- .../ext/ServerConnectInfo.java | 29 +- .../task/ConcurrentTableWriterTask.java | 127 +- .../oceanbasev10writer/task/InsertTask.java | 3 +- .../util/ObWriterUtils.java | 52 +- odpsreader/pom.xml | 53 +- odpsreader/src/main/assembly/package.xml | 7 - .../plugin/reader/odpsreader/Constant.java | 4 +- .../datax/plugin/reader/odpsreader/Key.java | 11 + .../reader/odpsreader/LocalStrings.properties | 64 + .../plugin/reader/odpsreader/OdpsReader.java | 340 +++-- .../odpsreader/OdpsReaderErrorCode.java | 51 +- .../plugin/reader/odpsreader/ReaderProxy.java | 811 ++++++++++-- .../reader/odpsreader/util/IdAndKeyUtil.java | 38 +- .../odpsreader/util/LocalStrings.properties | 25 + .../reader/odpsreader/util/OdpsSplitUtil.java | 21 +- .../reader/odpsreader/util/OdpsUtil.java | 222 +++- .../reader/odpsreader/util/SqliteUtil.java | 103 ++ ...UserConfiguredPartitionClassification.java | 39 + .../src/main/libs/bcprov-jdk15on-1.52.jar | Bin 2902942 -> 0 bytes odpswriter/pom.xml | 42 +- odpswriter/src/main/assembly/package.xml | 7 - .../plugin/writer/odpswriter/Constant.java | 30 + .../writer/odpswriter/DateTransForm.java | 57 + .../datax/plugin/writer/odpswriter/Key.java | 56 + .../writer/odpswriter/LocalStrings.properties | 34 + .../plugin/writer/odpswriter/OdpsWriter.java | 657 ++++++++-- .../odpswriter/OdpsWriterErrorCode.java | 45 +- .../writer/odpswriter/OdpsWriterProxy.java | 1044 +++++++++++++-- .../odpswriter/model/PartitionInfo.java | 87 ++ .../odpswriter/model/UserDefinedFunction.java | 44 + .../model/UserDefinedFunctionRule.java | 26 + .../odpswriter/util/CustomPartitionUtils.java | 54 + .../writer/odpswriter/util/DESCipher.java | 355 ------ .../writer/odpswriter/util/IdAndKeyUtil.java | 42 +- .../odpswriter/util/LocalStrings.properties | 39 + .../odpswriter/util/OdpsExceptionMsg.java | 3 - .../writer/odpswriter/util/OdpsUtil.java | 603 +++++++-- .../src/main/libs/bcprov-jdk15on-1.52.jar | Bin 2902942 -> 0 bytes .../datax/plugin/reader/conn/CliQuery.java | 32 +- .../plugin/reader/conn/Connection4TSDB.java | 32 +- .../plugin/reader/conn/DataPoint4TSDB.java | 32 +- .../datax/plugin/reader/conn/DumpSeries.java | 32 +- .../reader/conn/OpenTSDBConnection.java | 32 +- .../plugin/reader/conn/OpenTSDBDump.java | 32 +- .../reader/opentsdbreader/Constant.java | 32 +- .../plugin/reader/opentsdbreader/Key.java | 32 +- .../reader/opentsdbreader/OpenTSDBReader.java | 32 +- .../OpenTSDBReaderErrorCode.java | 32 +- .../datax/plugin/reader/util/HttpUtils.java | 32 +- .../datax/plugin/reader/util/TSDBUtils.java | 32 +- .../datax/plugin/reader/util/TimeUtils.java | 32 +- oscarwriter/pom.xml | 8 +- ossreader/pom.xml | 19 +- .../datax/plugin/reader/ossreader/Key.java | 25 + .../reader/ossreader/OssInputStream.java | 132 ++ .../plugin/reader/ossreader/OssReader.java | 520 +++++--- .../ossreader/util/HdfsParquetUtil.java | 40 + .../reader/ossreader/util/OssSplitUtil.java | 485 +++++++ osswriter/pom.xml | 67 +- .../plugin/writer/osswriter/Constant.java | 7 + .../datax/plugin/writer/osswriter/Key.java | 51 + .../writer/osswriter/OssSingleObject.java | 78 ++ .../plugin/writer/osswriter/OssWriter.java | 1130 +++++++++++++---- .../writer/osswriter/OssWriterProxy.java | 171 +++ .../parquet/ParquetFileProccessor.java | 49 + .../osswriter/parquet/ParquetFileSupport.java | 355 ++++++ .../writer/osswriter/util/HandlerUtil.java | 38 + .../osswriter/util/HdfsParquetUtil.java | 145 +++ otsreader/pom.xml | 21 + otsstreamreader/pom.xml | 21 + .../src/main/resources/plugin.json | 2 +- otswriter/pom.xml | 21 + package.xml | 77 +- .../unstructuredstorage/FileFormat.java | 97 ++ .../LocalStrings.properties | 1 + .../LocalStrings_en_US.properties | 1 + .../LocalStrings_ja_JP.properties | 1 + .../LocalStrings_zh_CN.properties | 1 + .../LocalStrings_zh_HK.properties | 1 + .../LocalStrings_zh_TW.properties | 1 + .../unstructuredstorage/reader/Constant.java | 43 + .../unstructuredstorage/reader/Key.java | 59 + .../reader/UnstructuredStorageReaderUtil.java | 28 +- .../binaryFileUtil/BinaryFileReaderUtil.java | 62 + .../reader/binaryFileUtil/ByteUtils.java | 48 + .../reader/split/StartEndPair.java | 49 + .../reader/split/UnstructuredSplitUtil.java | 191 +++ .../util/ColumnTypeUtil.java | 90 ++ .../unstructuredstorage/util/HdfsUtil.java | 16 + .../unstructuredstorage/writer/Constant.java | 30 +- .../writer/DataXCsvWriter.java | 296 +++++ .../unstructuredstorage/writer/Key.java | 34 + .../writer/TextCsvWriterManager.java | 65 +- .../UnstructuredStorageWriterErrorCode.java | 3 +- .../writer/UnstructuredStorageWriterUtil.java | 177 ++- .../BinaryFileWriterErrorCode.java | 33 + .../binaryFileUtil/BinaryFileWriterUtil.java | 126 ++ pom.xml | 89 +- postgresqlreader/doc/postgresqlreader.md | 2 +- postgresqlreader/pom.xml | 2 +- postgresqlwriter/pom.xml | 2 +- .../postgresqlwriter/PostgresqlWriter.java | 2 + rdbmsreader/doc/rdbmsreader.md | 2 +- sqlserverwriter/doc/sqlserverwriter.md | 2 +- tdenginereader/doc/tdenginereader-CN.md | 195 +++ tdenginereader/pom.xml | 135 ++ tdenginereader/src/main/assembly/package.xml | 34 + .../datax/plugin/reader/TDengineReader.java | 265 ++++ .../reader/TDengineReaderErrorCode.java | 34 + tdenginereader/src/main/resources/plugin.json | 9 + .../main/resources/plugin_job_template.json | 23 + .../datax/plugin/reader/TDengine2DMTest.java | 86 ++ .../plugin/reader/TDengine2StreamTest.java | 66 + .../plugin/reader/TDengineReaderTest.java | 153 +++ tdenginereader/src/test/resources/t2dm.json | 52 + .../src/test/resources/t2stream-1.json | 47 + .../src/test/resources/t2stream-2.json | 37 + tdenginewriter/doc/tdenginewriter-CN.md | 245 ++++ tdenginewriter/doc/tdenginewriter.md | 196 +++ tdenginewriter/pom.xml | 138 ++ tdenginewriter/src/main/assembly/package.xml | 34 + .../writer/tdenginewriter/ColumnMeta.java | 24 + .../writer/tdenginewriter/Constants.java | 6 + .../writer/tdenginewriter/DataHandler.java | 8 + .../tdenginewriter/DefaultDataHandler.java | 556 ++++++++ .../plugin/writer/tdenginewriter/Key.java | 18 + .../tdenginewriter/OpentsdbDataHandler.java | 99 ++ .../writer/tdenginewriter/SchemaManager.java | 177 +++ .../writer/tdenginewriter/TDengineWriter.java | 114 ++ .../TDengineWriterErrorCode.java | 34 + .../writer/tdenginewriter/TableMeta.java | 22 + .../writer/tdenginewriter/TableType.java | 5 + .../tdenginewriter/TimestampPrecision.java | 5 + tdenginewriter/src/main/resources/plugin.json | 9 + .../main/resources/plugin_job_template.json | 20 + .../tdenginewriter/Csv2TDengineTest.java | 41 + .../tdenginewriter/DM2TDengineTest.java | 124 ++ .../DefaultDataHandlerTest.java | 300 +++++ .../tdenginewriter/Mysql2TDengineTest.java | 72 ++ .../tdenginewriter/Opentsdb2TDengineTest.java | 38 + .../tdenginewriter/SchemaManagerTest.java | 85 ++ .../tdenginewriter/Stream2TDengineTest.java | 70 + .../tdenginewriter/TDengine2TDengineTest.java | 129 ++ .../tdenginewriter/TDengineWriterTest.java | 62 + tdenginewriter/src/test/resources/csv2t.json | 80 ++ .../src/test/resources/defaultJob.json | 226 ++++ .../src/test/resources/dm-schema.sql | 30 + tdenginewriter/src/test/resources/dm2t-1.json | 62 + tdenginewriter/src/test/resources/dm2t-2.json | 62 + tdenginewriter/src/test/resources/dm2t-3.json | 76 ++ tdenginewriter/src/test/resources/dm2t-4.json | 61 + tdenginewriter/src/test/resources/m2t-1.json | 72 ++ tdenginewriter/src/test/resources/o2t-1.json | 36 + tdenginewriter/src/test/resources/t2t-1.json | 94 ++ tdenginewriter/src/test/resources/t2t-2.json | 92 ++ tdenginewriter/src/test/resources/t2t-3.json | 92 ++ tdenginewriter/src/test/resources/t2t-4.json | 72 ++ tdenginewriter/src/test/resources/weather.csv | 10 + .../plugin/reader/tsdbreader/Constant.java | 2 + .../datax/plugin/reader/tsdbreader/Key.java | 5 + .../plugin/reader/tsdbreader/TSDBReader.java | 109 +- .../tsdbreader/conn/Connection4TSDB.java | 27 +- .../tsdbreader/conn/TSDBConnection.java | 41 +- .../reader/tsdbreader/conn/TSDBDump.java | 96 +- .../reader/tsdbreader/util/HttpUtils.java | 50 +- .../reader/tsdbreader/util/TSDBUtils.java | 38 +- .../tsdbreader/conn/TSDBConnectionTest.java | 4 +- .../reader/tsdbreader/util/HttpUtilsTest.java | 39 - tsdbwriter/doc/tsdbhttpwriter.md | 153 ++- tsdbwriter/pom.xml | 7 + .../plugin/writer/conn/Connection4TSDB.java | 34 +- .../plugin/writer/conn/TSDBConnection.java | 38 +- .../datax/plugin/writer/tsdbwriter/Key.java | 16 +- .../writer/tsdbwriter/SourceDBType.java | 5 + .../writer/tsdbwriter/TSDBConverter.java | 96 ++ .../plugin/writer/tsdbwriter/TSDBModel.java | 11 + .../plugin/writer/tsdbwriter/TSDBWriter.java | 326 ++++- .../tsdbwriter/TSDBWriterErrorCode.java | 1 + .../datax/plugin/writer/util/HttpUtils.java | 56 +- .../datax/plugin/writer/util/TSDBUtils.java | 38 +- .../writer/conn/TSDBConnectionTest.java | 4 +- .../plugin/writer/util/HttpUtilsTest.java | 4 +- .../datax/plugin/writer/util/TSDBTest.java | 4 +- userGuid.md | 2 +- 261 files changed, 17980 insertions(+), 2432 deletions(-) create mode 100644 NOTICE create mode 100644 common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java rename {odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader => common/src/main/java/com/alibaba/datax/common}/util/DESCipher.java (60%) mode change 100644 => 100755 create mode 100644 common/src/main/java/com/alibaba/datax/common/util/DataXCaseEnvUtil.java create mode 100644 common/src/main/java/com/alibaba/datax/common/util/IdAndKeyRollingUtil.java create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings_en_US.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings_ja_JP.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_CN.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_HK.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_TW.properties create mode 100644 common/src/main/java/com/alibaba/datax/common/util/MessageSource.java create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings_en_US.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings_ja_JP.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_CN.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_HK.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_TW.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings_en_US.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings_ja_JP.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_CN.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_HK.properties create mode 100644 core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_TW.properties create mode 100644 hologresjdbcwriter/doc/hologresjdbcwriter.md create mode 100644 hologresjdbcwriter/pom.xml create mode 100755 hologresjdbcwriter/src/main/assembly/package.xml create mode 100644 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/BaseWriter.java create mode 100755 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Constant.java create mode 100755 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/HologresJdbcWriter.java create mode 100755 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Key.java create mode 100644 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/ConfLoader.java create mode 100755 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/OriginalConfPretreatmentUtil.java create mode 100755 hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/WriterUtil.java create mode 100644 hologresjdbcwriter/src/main/resources/plugin.json create mode 100644 hologresjdbcwriter/src/main/resources/plugin_job_template.json create mode 100644 odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/LocalStrings.properties create mode 100644 odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/LocalStrings.properties create mode 100644 odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/SqliteUtil.java create mode 100644 odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/UserConfiguredPartitionClassification.java delete mode 100644 odpsreader/src/main/libs/bcprov-jdk15on-1.52.jar create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/DateTransForm.java create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/LocalStrings.properties create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/PartitionInfo.java create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunction.java create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunctionRule.java create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/CustomPartitionUtils.java delete mode 100755 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/DESCipher.java create mode 100644 odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/LocalStrings.properties delete mode 100644 odpswriter/src/main/libs/bcprov-jdk15on-1.52.jar create mode 100644 ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssInputStream.java create mode 100644 ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/HdfsParquetUtil.java create mode 100644 ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/OssSplitUtil.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssSingleObject.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriterProxy.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileProccessor.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileSupport.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HandlerUtil.java create mode 100644 osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HdfsParquetUtil.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/FileFormat.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_en_US.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_ja_JP.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_CN.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_HK.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_TW.properties create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/BinaryFileReaderUtil.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/ByteUtils.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/StartEndPair.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/UnstructuredSplitUtil.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/ColumnTypeUtil.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/HdfsUtil.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/DataXCsvWriter.java create mode 100755 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterErrorCode.java create mode 100644 plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterUtil.java create mode 100644 tdenginereader/doc/tdenginereader-CN.md create mode 100644 tdenginereader/pom.xml create mode 100755 tdenginereader/src/main/assembly/package.xml create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java create mode 100644 tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java create mode 100755 tdenginereader/src/main/resources/plugin.json create mode 100644 tdenginereader/src/main/resources/plugin_job_template.json create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java create mode 100644 tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java create mode 100644 tdenginereader/src/test/resources/t2dm.json create mode 100644 tdenginereader/src/test/resources/t2stream-1.json create mode 100644 tdenginereader/src/test/resources/t2stream-2.json create mode 100644 tdenginewriter/doc/tdenginewriter-CN.md create mode 100644 tdenginewriter/doc/tdenginewriter.md create mode 100644 tdenginewriter/pom.xml create mode 100644 tdenginewriter/src/main/assembly/package.xml create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java create mode 100644 tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java create mode 100644 tdenginewriter/src/main/resources/plugin.json create mode 100644 tdenginewriter/src/main/resources/plugin_job_template.json create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java create mode 100644 tdenginewriter/src/test/resources/csv2t.json create mode 100644 tdenginewriter/src/test/resources/defaultJob.json create mode 100644 tdenginewriter/src/test/resources/dm-schema.sql create mode 100644 tdenginewriter/src/test/resources/dm2t-1.json create mode 100644 tdenginewriter/src/test/resources/dm2t-2.json create mode 100644 tdenginewriter/src/test/resources/dm2t-3.json create mode 100644 tdenginewriter/src/test/resources/dm2t-4.json create mode 100644 tdenginewriter/src/test/resources/m2t-1.json create mode 100644 tdenginewriter/src/test/resources/o2t-1.json create mode 100644 tdenginewriter/src/test/resources/t2t-1.json create mode 100644 tdenginewriter/src/test/resources/t2t-2.json create mode 100644 tdenginewriter/src/test/resources/t2t-3.json create mode 100644 tdenginewriter/src/test/resources/t2t-4.json create mode 100644 tdenginewriter/src/test/resources/weather.csv delete mode 100644 tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java create mode 100644 tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..eb7cbe4b --- /dev/null +++ b/NOTICE @@ -0,0 +1,39 @@ +======================================================== +DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。 + +DataX is an open source offline data synchronization tool / platform widely used in Alibaba group and other companies. DataX implements efficient data synchronization between heterogeneous data sources including mysql, Oracle, oceanbase, sqlserver, postgre, HDFS, hive, ads, HBase, tablestore (OTS), maxcompute (ODPs), hologres, DRDS, etc. + +Copyright 1999-2022 Alibaba Group Holding Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=================================================================== +文级别引用,按许可证 +This product contains various third-party components under other open source licenses. +This section summarizes those components and their licenses. +GNU Lesser General Public License +-------------------------------------- +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/CliQuery.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/Connection4TSDB.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DataPoint4TSDB.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DumpSeries.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBConnection.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBDump.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Constant.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Key.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReader.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReaderErrorCode.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/HttpUtils.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TSDBUtils.java +opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TimeUtils.java +=================================================================== diff --git a/README.md b/README.md index 681de048..ec5de715 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # DataX -DataX 是阿里云 [DataWorks数据集成](https://www.aliyun.com/product/bigdata/ide) 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。 +DataX 是阿里云 [DataWorks数据集成](https://www.aliyun.com/product/bigdata/ide) 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS 等各种异构数据源之间高效的数据同步功能。 # DataX 商业版本 阿里云DataWorks数据集成是DataX团队在阿里云上的商业化产品,致力于提供复杂网络环境下、丰富的异构数据源之间高速稳定的数据移动能力,以及繁杂业务背景下的数据同步解决方案。目前已经支持云上近3000家客户,单日同步数据超过3万亿条。DataWorks数据集成目前支持离线50+种数据源,可以进行整库迁移、批量上云、增量同步、分库分表等各类同步解决方案。2020年更新实时同步能力,2020年更新实时同步能力,支持10+种数据源的读写任意组合。提供MySQL,Oracle等多种数据源到阿里云MaxCompute,Hologres等大数据引擎的一键全增量同步解决方案。 @@ -39,6 +39,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | ------------ | ---------- | :-------: | :-------: |:-------: | | RDBMS 关系型数据库 | MySQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md)| |             | Oracle     |     √     |     √     |[读](https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md)| +|             | OceanBase  |     √     |     √     |[读](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase) 、[写](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase)| | | SQLServer | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/sqlserverreader/doc/sqlserverreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/sqlserverwriter/doc/sqlserverwriter.md)| | | PostgreSQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/postgresqlreader/doc/postgresqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md)| | | DRDS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md)| @@ -46,7 +47,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | 阿里云数仓数据存储 | ODPS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/odpsreader/doc/odpsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/odpswriter/doc/odpswriter.md)| | | ADS | | √ |[写](https://github.com/alibaba/DataX/blob/master/adswriter/doc/adswriter.md)| | | OSS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ossreader/doc/ossreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/osswriter/doc/osswriter.md)| -| | OCS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/ocsreader/doc/ocsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/ocswriter/doc/ocswriter.md)| +| | OCS | | √ |[写](https://github.com/alibaba/DataX/blob/master/ocswriter/doc/ocswriter.md)| | NoSQL数据存储 | OTS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/otsreader/doc/otsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/otswriter/doc/otswriter.md)| | | Hbase0.94 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase094xreader/doc/hbase094xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase094xwriter/doc/hbase094xwriter.md)| | | Hbase1.1 | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/hbase11xreader/doc/hbase11xreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/hbase11xwriter/doc/hbase11xwriter.md)| @@ -61,6 +62,7 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N | | Elasticsearch | | √ |[写](https://github.com/alibaba/DataX/blob/master/elasticsearchwriter/doc/elasticsearchwriter.md)| | 时间序列数据库 | OpenTSDB | √ | |[读](https://github.com/alibaba/DataX/blob/master/opentsdbreader/doc/opentsdbreader.md)| | | TSDB | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/tsdbreader/doc/tsdbreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/tsdbwriter/doc/tsdbhttpwriter.md)| +| | TDengine | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/tdenginereader/doc/tdenginereader-CN.md) 、[写](https://github.com/alibaba/DataX/blob/master/tdenginewriter/doc/tdenginewriter-CN.md)| # 阿里云DataWorks数据集成 diff --git a/adbpgwriter/src/main/doc/adbpgwriter.md b/adbpgwriter/src/main/doc/adbpgwriter.md index 80427241..6d3857bc 100644 --- a/adbpgwriter/src/main/doc/adbpgwriter.md +++ b/adbpgwriter/src/main/doc/adbpgwriter.md @@ -65,9 +65,9 @@ COPY命令将数据写入ADB PG数据库中。 "writer": { "name": "adbpgwriter", "parameter": { - "username": "username", - "password": "password", - "host": "host", + "username": "", + "password": "", + "host": "127.0.0.1", "port": "1234", "database": "database", "schema": "schema", diff --git a/common/pom.xml b/common/pom.xml index 1a57cccd..eafdb5da 100755 --- a/common/pom.xml +++ b/common/pom.xml @@ -61,6 +61,14 @@ + + + src/main/java + + **/*.properties + + + maven-compiler-plugin diff --git a/common/src/main/java/com/alibaba/datax/common/element/BoolColumn.java b/common/src/main/java/com/alibaba/datax/common/element/BoolColumn.java index 7699e152..0978074b 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/BoolColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/BoolColumn.java @@ -92,7 +92,13 @@ public class BoolColumn extends Column { throw DataXException.asDataXException( CommonErrorCode.CONVERT_NOT_SUPPORT, "Bool类型不能转为Date ."); } - + + @Override + public Date asDate(String dateFormat) { + throw DataXException.asDataXException( + CommonErrorCode.CONVERT_NOT_SUPPORT, "Bool类型不能转为Date ."); + } + @Override public byte[] asBytes() { throw DataXException.asDataXException( diff --git a/common/src/main/java/com/alibaba/datax/common/element/BytesColumn.java b/common/src/main/java/com/alibaba/datax/common/element/BytesColumn.java index d3cc5993..bc1eeb79 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/BytesColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/BytesColumn.java @@ -75,6 +75,12 @@ public class BytesColumn extends Column { throw DataXException.asDataXException( CommonErrorCode.CONVERT_NOT_SUPPORT, "Bytes类型不能转为Date ."); } + + @Override + public Date asDate(String dateFormat) { + throw DataXException.asDataXException( + CommonErrorCode.CONVERT_NOT_SUPPORT, "Bytes类型不能转为Date ."); + } @Override public Boolean asBoolean() { diff --git a/common/src/main/java/com/alibaba/datax/common/element/Column.java b/common/src/main/java/com/alibaba/datax/common/element/Column.java index ed68e88d..2e093a7a 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/Column.java +++ b/common/src/main/java/com/alibaba/datax/common/element/Column.java @@ -55,6 +55,8 @@ public abstract class Column { public abstract String asString(); public abstract Date asDate(); + + public abstract Date asDate(String dateFormat); public abstract byte[] asBytes(); diff --git a/common/src/main/java/com/alibaba/datax/common/element/ColumnCast.java b/common/src/main/java/com/alibaba/datax/common/element/ColumnCast.java index 89d0a7c6..85d62ecc 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/ColumnCast.java +++ b/common/src/main/java/com/alibaba/datax/common/element/ColumnCast.java @@ -22,6 +22,11 @@ public final class ColumnCast { throws ParseException { return StringCast.asDate(column); } + + public static Date string2Date(final StringColumn column, String dateFormat) + throws ParseException { + return StringCast.asDate(column, dateFormat); + } public static byte[] string2Bytes(final StringColumn column) throws UnsupportedEncodingException { @@ -115,6 +120,16 @@ class StringCast { } throw e; } + + static Date asDate(final StringColumn column, String dateFormat) throws ParseException { + ParseException e; + try { + return FastDateFormat.getInstance(dateFormat, StringCast.timeZoner).parse(column.asString()); + } catch (ParseException ignored) { + e = ignored; + } + throw e; + } static byte[] asBytes(final StringColumn column) throws UnsupportedEncodingException { diff --git a/common/src/main/java/com/alibaba/datax/common/element/DateColumn.java b/common/src/main/java/com/alibaba/datax/common/element/DateColumn.java index 6626a6fb..f688d163 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/DateColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/DateColumn.java @@ -89,6 +89,11 @@ public class DateColumn extends Column { return new Date((Long)this.getRawData()); } + + @Override + public Date asDate(String dateFormat) { + return asDate(); + } @Override public byte[] asBytes() { diff --git a/common/src/main/java/com/alibaba/datax/common/element/DoubleColumn.java b/common/src/main/java/com/alibaba/datax/common/element/DoubleColumn.java index 17170ea6..915bd8ef 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/DoubleColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/DoubleColumn.java @@ -132,6 +132,12 @@ public class DoubleColumn extends Column { throw DataXException.asDataXException( CommonErrorCode.CONVERT_NOT_SUPPORT, "Double类型无法转为Date类型 ."); } + + @Override + public Date asDate(String dateFormat) { + throw DataXException.asDataXException( + CommonErrorCode.CONVERT_NOT_SUPPORT, "Double类型无法转为Date类型 ."); + } @Override public byte[] asBytes() { diff --git a/common/src/main/java/com/alibaba/datax/common/element/LongColumn.java b/common/src/main/java/com/alibaba/datax/common/element/LongColumn.java index d8113f7c..e0f8d865 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/LongColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/LongColumn.java @@ -125,6 +125,11 @@ public class LongColumn extends Column { } return new Date(this.asLong()); } + + @Override + public Date asDate(String dateFormat) { + return this.asDate(); + } @Override public byte[] asBytes() { diff --git a/common/src/main/java/com/alibaba/datax/common/element/Record.java b/common/src/main/java/com/alibaba/datax/common/element/Record.java index d06d80aa..7abf45dd 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/Record.java +++ b/common/src/main/java/com/alibaba/datax/common/element/Record.java @@ -1,5 +1,7 @@ package com.alibaba.datax.common.element; +import java.util.Map; + /** * Created by jingxing on 14-8-24. */ @@ -20,4 +22,8 @@ public interface Record { public int getMemorySize(); + public void setMeta(Map meta); + + public Map getMeta(); + } diff --git a/common/src/main/java/com/alibaba/datax/common/element/StringColumn.java b/common/src/main/java/com/alibaba/datax/common/element/StringColumn.java index 11209f46..c1e7a84e 100755 --- a/common/src/main/java/com/alibaba/datax/common/element/StringColumn.java +++ b/common/src/main/java/com/alibaba/datax/common/element/StringColumn.java @@ -149,6 +149,16 @@ public class StringColumn extends Column { String.format("String[\"%s\"]不能转为Date .", this.asString())); } } + + @Override + public Date asDate(String dateFormat) { + try { + return ColumnCast.string2Date(this, dateFormat); + } catch (Exception e) { + throw DataXException.asDataXException(CommonErrorCode.CONVERT_NOT_SUPPORT, + String.format("String[\"%s\"]不能转为Date .", this.asString())); + } + } @Override public byte[] asBytes() { diff --git a/common/src/main/java/com/alibaba/datax/common/exception/DataXException.java b/common/src/main/java/com/alibaba/datax/common/exception/DataXException.java index f360e699..09d00adc 100755 --- a/common/src/main/java/com/alibaba/datax/common/exception/DataXException.java +++ b/common/src/main/java/com/alibaba/datax/common/exception/DataXException.java @@ -16,6 +16,10 @@ public class DataXException extends RuntimeException { this.errorCode = errorCode; } + public DataXException(String errorMessage) { + super(errorMessage); + } + private DataXException(ErrorCode errorCode, String errorMessage, Throwable cause) { super(errorCode.toString() + " - " + getMessage(errorMessage) + " - " + getMessage(cause), cause); @@ -26,6 +30,10 @@ public class DataXException extends RuntimeException { return new DataXException(errorCode, message); } + public static DataXException asDataXException(String message) { + return new DataXException(message); + } + public static DataXException asDataXException(ErrorCode errorCode, String message, Throwable cause) { if (cause instanceof DataXException) { return (DataXException) cause; diff --git a/common/src/main/java/com/alibaba/datax/common/plugin/AbstractPlugin.java b/common/src/main/java/com/alibaba/datax/common/plugin/AbstractPlugin.java index 184ee89e..0323a976 100755 --- a/common/src/main/java/com/alibaba/datax/common/plugin/AbstractPlugin.java +++ b/common/src/main/java/com/alibaba/datax/common/plugin/AbstractPlugin.java @@ -3,6 +3,8 @@ package com.alibaba.datax.common.plugin; import com.alibaba.datax.common.base.BaseObject; import com.alibaba.datax.common.util.Configuration; +import java.util.List; + public abstract class AbstractPlugin extends BaseObject implements Pluginable { //作业的config private Configuration pluginJobConf; @@ -15,6 +17,8 @@ public abstract class AbstractPlugin extends BaseObject implements Pluginable { private String peerPluginName; + private List readerPluginSplitConf; + @Override public String getPluginName() { assert null != this.pluginConf; @@ -84,4 +88,12 @@ public abstract class AbstractPlugin extends BaseObject implements Pluginable { public void postHandler(Configuration jobConfiguration){ } + + public List getReaderPluginSplitConf(){ + return this.readerPluginSplitConf; + } + + public void setReaderPluginSplitConf(List readerPluginSplitConf){ + this.readerPluginSplitConf = readerPluginSplitConf; + } } diff --git a/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java b/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java new file mode 100644 index 00000000..e5e07547 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java @@ -0,0 +1,37 @@ +package com.alibaba.datax.common.util; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.StringUtils; + +public class ConfigurationUtil { + private static final List SENSITIVE_KEYS = Arrays.asList("password", "accessKey", "securityToken", + "AccessKeyId", "AccessKeySecert", "AccessKeySecret", "clientPassword"); + + public static Configuration filterSensitive(Configuration origin) { + // shell 任务configuration metric 可能为null。 + if (origin == null) { + return origin; + } + // 确保不影响入参的对象 + Configuration configuration = origin.clone(); + Set keys = configuration.getKeys(); + for (final String key : keys) { + boolean isSensitive = false; + for (String sensitiveKey : SENSITIVE_KEYS) { + if (StringUtils.endsWithIgnoreCase(key, sensitiveKey)) { + isSensitive = true; + break; + } + } + + if (isSensitive && configuration.get(key) instanceof String) { + configuration.set(key, configuration.getString(key).replaceAll(".", "*")); + } + + } + return configuration; + } +} \ No newline at end of file diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/DESCipher.java b/common/src/main/java/com/alibaba/datax/common/util/DESCipher.java old mode 100644 new mode 100755 similarity index 60% rename from odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/DESCipher.java rename to common/src/main/java/com/alibaba/datax/common/util/DESCipher.java index 82e97191..0692a7b3 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/DESCipher.java +++ b/common/src/main/java/com/alibaba/datax/common/util/DESCipher.java @@ -1,5 +1,5 @@ /** - * (C) 2010-2014 Alibaba Group Holding Limited. + * (C) 2010-2022 Alibaba Group Holding Limited. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,342 +14,216 @@ * limitations under the License. */ -package com.alibaba.datax.plugin.reader.odpsreader.util; +package com.alibaba.datax.common.util; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.security.SecureRandom; /** - *   * DES加解密,支持与delphi交互(字符串编码需统一为UTF-8) - * - *   * - * - *   * @author wym - * - *    + * DES加解密,支持与delphi交互(字符串编码需统一为UTF-8) + * 将这个工具类抽取到 common 中,方便后续代码复用 */ - public class DESCipher { - + private static Logger LOGGER = LoggerFactory.getLogger(DESCipher.class); /** - *   * 密钥 - * - *    + * 密钥 */ - - public static final String KEY = "DESDES"; - + public static final String KEY = ""; private final static String DES = "DES"; /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @param key - * - *   * 密钥,长度必须是8的倍数 - * - *   * @return 密文(字节) - * - *   * @throws Exception - * - *    + * 加密 + * @param src 明文(字节) + * @param key 密钥,长度必须是8的倍数 + * @return 密文(字节) + * @throws Exception */ - public static byte[] encrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); - + // 从原始密匙数据创建DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); - + // 创建一个密匙工厂,然后用它把DESKeySpec转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - SecretKey securekey = keyFactory.generateSecret(dks); - + // Cipher对象实际完成加密操作 - Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher对象 - cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); // 现在,获取数据并加密 - // 正式执行加密操作 - return cipher.doFinal(src); - } /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @param key - * - *   * 密钥,长度必须是8的倍数 - * - *   * @return 明文(字节) - * - *   * @throws Exception - * - *    + * * 解密 + * * @param src + * * 密文(字节) + * * @param key + * * 密钥,长度必须是8的倍数 + * * @return 明文(字节) + * * @throws Exception */ - public static byte[] decrypt(byte[] src, byte[] key) throws Exception { - // DES算法要求有一个可信任的随机数源 - SecureRandom sr = new SecureRandom(); // 从原始密匙数据创建一个DESKeySpec对象 - DESKeySpec dks = new DESKeySpec(key); // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 - // 一个SecretKey对象 - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 - Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher对象 - cipher.init(Cipher.DECRYPT_MODE, securekey, sr); // 现在,获取数据并解密 - // 正式执行解密操作 - return cipher.doFinal(src); - } /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @return 密文(字节) - * - *   * @throws Exception - * - *    + * 加密 + * @param src * 明文(字节) + * @return 密文(字节) + * @throws Exception */ - public static byte[] encrypt(byte[] src) throws Exception { - return encrypt(src, KEY.getBytes()); - } /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @return 明文(字节) - * - *   * @throws Exception - * - *    + * 解密 + * @param src 密文(字节) + * @return 明文(字节) + * @throws Exception */ - public static byte[] decrypt(byte[] src) throws Exception { - return decrypt(src, KEY.getBytes()); - } /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字符串) - * - *   * @return 密文(16进制字符串) - * - *   * @throws Exception - * - *    + * 加密 + * @param src 明文(字符串) + * @return 密文(16进制字符串) + * @throws Exception */ - public final static String encrypt(String src) { - try { - return byte2hex(encrypt(src.getBytes(), KEY.getBytes())); - } catch (Exception e) { - - e.printStackTrace(); - + LOGGER.warn(e.getMessage(), e); + } + return null; + } + + /** + * 加密 + * @param src 明文(字符串) + * @param encryptKey 加密用的秘钥 + * @return 密文(16进制字符串) + * @throws Exception + */ + public final static String encrypt(String src, String encryptKey) { + try { + return byte2hex(encrypt(src.getBytes(), encryptKey.getBytes())); + } catch (Exception e) { + LOGGER.warn(e.getMessage(), e); } - return null; - } /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字符串) - * - *   * @return 明文(字符串) - * - *   * @throws Exception - * - *    + * 解密 + * @param src 密文(字符串) + * @return 明文(字符串) + * @throws Exception */ - public final static String decrypt(String src) { try { - return new String(decrypt(hex2byte(src.getBytes()), KEY.getBytes())); - } catch (Exception e) { - - e.printStackTrace(); - + LOGGER.warn(e.getMessage(), e); + } + return null; + } + + /** + * 解密 + * @param src 密文(字符串) + * @param decryptKey 解密用的秘钥 + * @return 明文(字符串) + * @throws Exception + */ + public final static String decrypt(String src, String decryptKey) { + try { + return new String(decrypt(hex2byte(src.getBytes()), decryptKey.getBytes())); + } catch (Exception e) { + LOGGER.warn(e.getMessage(), e); } - return null; - } /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @return 密文(16进制字符串) - * - *   * @throws Exception - * - *    + * 加密 + * @param src + * 明文(字节) + * @return 密文(16进制字符串) + * @throws Exception */ - public static String encryptToString(byte[] src) throws Exception { - return encrypt(new String(src)); - } /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @return 明文(字符串) - * - *   * @throws Exception - * - *    + * 解密 + * @param src 密文(字节) + * @return 明文(字符串) + * @throws Exception */ - public static String decryptToString(byte[] src) throws Exception { - return decrypt(new String(src)); - } public static String byte2hex(byte[] b) { - String hs = ""; - String stmp = ""; - for (int n = 0; n < b.length; n++) { - stmp = (Integer.toHexString(b[n] & 0XFF)); - if (stmp.length() == 1) - hs = hs + "0" + stmp; - else - hs = hs + stmp; - } - return hs.toUpperCase(); - } public static byte[] hex2byte(byte[] b) { - if ((b.length % 2) != 0) - - throw new IllegalArgumentException("长度不是偶数"); - + throw new IllegalArgumentException("The length is not an even number"); byte[] b2 = new byte[b.length / 2]; - for (int n = 0; n < b.length; n += 2) { - String item = new String(b, n, 2); - b2[n / 2] = (byte) Integer.parseInt(item, 16); - } return b2; - } - - /* - * public static void main(String[] args) { try { String src = "cheetah"; - * String crypto = DESCipher.encrypt(src); System.out.println("密文[" + src + - * "]:" + crypto); System.out.println("解密后:" + DESCipher.decrypt(crypto)); } - * catch (Exception e) { e.printStackTrace(); } } - */ } diff --git a/common/src/main/java/com/alibaba/datax/common/util/DataXCaseEnvUtil.java b/common/src/main/java/com/alibaba/datax/common/util/DataXCaseEnvUtil.java new file mode 100644 index 00000000..ca137b94 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/DataXCaseEnvUtil.java @@ -0,0 +1,33 @@ +package com.alibaba.datax.common.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class DataXCaseEnvUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(DataXCaseEnvUtil.class); + + // datax回归测试效率提升 + private static String DATAX_AUTOTEST_RETRY_TIME = System.getenv("DATAX_AUTOTEST_RETRY_TIME"); + private static String DATAX_AUTOTEST_RETRY_INTERVAL = System.getenv("DATAX_AUTOTEST_RETRY_INTERVAL"); + private static String DATAX_AUTOTEST_RETRY_EXPONENTIAL = System.getenv("DATAX_AUTOTEST_RETRY_EXPONENTIAL"); + + public static int getRetryTimes(int retryTimes) { + int actualRetryTimes = DATAX_AUTOTEST_RETRY_TIME != null ? Integer.valueOf(DATAX_AUTOTEST_RETRY_TIME) : retryTimes; + // LOGGER.info("The actualRetryTimes is {}", actualRetryTimes); + return actualRetryTimes; + } + + public static long getRetryInterval(long retryInterval) { + long actualRetryInterval = DATAX_AUTOTEST_RETRY_INTERVAL != null ? Long.valueOf(DATAX_AUTOTEST_RETRY_INTERVAL) : retryInterval; + // LOGGER.info("The actualRetryInterval is {}", actualRetryInterval); + return actualRetryInterval; + } + + public static boolean getRetryExponential(boolean retryExponential) { + boolean actualRetryExponential = DATAX_AUTOTEST_RETRY_EXPONENTIAL != null ? Boolean.valueOf(DATAX_AUTOTEST_RETRY_EXPONENTIAL) : retryExponential; + // LOGGER.info("The actualRetryExponential is {}", actualRetryExponential); + return actualRetryExponential; + } +} diff --git a/common/src/main/java/com/alibaba/datax/common/util/IdAndKeyRollingUtil.java b/common/src/main/java/com/alibaba/datax/common/util/IdAndKeyRollingUtil.java new file mode 100644 index 00000000..8bab301e --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/IdAndKeyRollingUtil.java @@ -0,0 +1,62 @@ +package com.alibaba.datax.common.util; + +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.datax.common.exception.DataXException; + +public class IdAndKeyRollingUtil { + private static Logger LOGGER = LoggerFactory.getLogger(IdAndKeyRollingUtil.class); + public static final String SKYNET_ACCESSID = "SKYNET_ACCESSID"; + public static final String SKYNET_ACCESSKEY = "SKYNET_ACCESSKEY"; + + public final static String ACCESS_ID = "accessId"; + public final static String ACCESS_KEY = "accessKey"; + + public static String parseAkFromSkynetAccessKey() { + Map envProp = System.getenv(); + String skynetAccessID = envProp.get(IdAndKeyRollingUtil.SKYNET_ACCESSID); + String skynetAccessKey = envProp.get(IdAndKeyRollingUtil.SKYNET_ACCESSKEY); + String accessKey = null; + // follow 原有的判断条件 + // 环境变量中,如果存在SKYNET_ACCESSID/SKYNET_ACCESSKEy(只要有其中一个变量,则认为一定是两个都存在的! + // if (StringUtils.isNotBlank(skynetAccessID) || + // StringUtils.isNotBlank(skynetAccessKey)) { + // 检查严格,只有加密串不为空的时候才进去,不过 之前能跑的加密串都不应该为空 + if (StringUtils.isNotBlank(skynetAccessKey)) { + LOGGER.info("Try to get accessId/accessKey from environment SKYNET_ACCESSKEY."); + accessKey = DESCipher.decrypt(skynetAccessKey); + if (StringUtils.isBlank(accessKey)) { + // 环境变量里面有,但是解析不到 + throw DataXException.asDataXException(String.format( + "Failed to get the [accessId]/[accessKey] from the environment variable. The [accessId]=[%s]", + skynetAccessID)); + } + } + if (StringUtils.isNotBlank(accessKey)) { + LOGGER.info("Get accessId/accessKey from environment variables SKYNET_ACCESSKEY successfully."); + } + return accessKey; + } + + public static String getAccessIdAndKeyFromEnv(Configuration originalConfig) { + String accessId = null; + Map envProp = System.getenv(); + accessId = envProp.get(IdAndKeyRollingUtil.SKYNET_ACCESSID); + String accessKey = null; + if (StringUtils.isBlank(accessKey)) { + // 老的没有出异常,只是获取不到ak + accessKey = IdAndKeyRollingUtil.parseAkFromSkynetAccessKey(); + } + + if (StringUtils.isNotBlank(accessKey)) { + // 确认使用这个的都是 accessId、accessKey的命名习惯 + originalConfig.set(IdAndKeyRollingUtil.ACCESS_ID, accessId); + originalConfig.set(IdAndKeyRollingUtil.ACCESS_KEY, accessKey); + } + return accessKey; + } +} diff --git a/common/src/main/java/com/alibaba/datax/common/util/ListUtil.java b/common/src/main/java/com/alibaba/datax/common/util/ListUtil.java index d7a5b764..a381bb90 100755 --- a/common/src/main/java/com/alibaba/datax/common/util/ListUtil.java +++ b/common/src/main/java/com/alibaba/datax/common/util/ListUtil.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; /** @@ -136,4 +137,25 @@ public final class ListUtil { return result; } + + public static Boolean checkIfHasSameValue(List listA, List listB) { + if (null == listA || listA.isEmpty() || null == listB || listB.isEmpty()) { + return false; + } + + for (String oneValue : listA) { + if (listB.contains(oneValue)) { + return true; + } + } + + return false; + } + + public static boolean checkIfAllSameValue(List listA, List listB) { + if (null == listA || listA.isEmpty() || null == listB || listB.isEmpty() || listA.size() != listB.size()) { + return false; + } + return new HashSet<>(listA).containsAll(new HashSet<>(listB)); + } } diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings.properties new file mode 100644 index 00000000..25661f7a --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings.properties @@ -0,0 +1,54 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + + +configuration.1=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef\uff0c\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6[{0}]\u4e0d\u5b58\u5728. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. +configuration.2=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6[{0}]\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.3=\u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {0}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.4=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.5=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.6=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u56e0\u4e3a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5\uff0c\u671f\u671b\u662f\u5b57\u7b26\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.7=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u6709\u8bef\uff0c\u56e0\u4e3a\u4ece[{0}]\u83b7\u53d6\u7684\u503c[{1}]\u65e0\u6cd5\u8f6c\u6362\u4e3abool\u7c7b\u578b. \u8bf7\u68c0\u67e5\u6e90\u8868\u7684\u914d\u7f6e\u5e76\u4e14\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539. +configuration.8=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.9=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.10=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6d6e\u70b9\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.11=\u914d\u7f6e\u6587\u4ef6\u5bf9\u5e94Key[{0}]\u5e76\u4e0d\u5b58\u5728\uff0c\u8be5\u60c5\u51b5\u662f\u4ee3\u7801\u7f16\u7a0b\u9519\u8bef. \u8bf7\u8054\u7cfbDataX\u56e2\u961f\u7684\u540c\u5b66. +configuration.12=\u503c[{0}]\u65e0\u6cd5\u9002\u914d\u60a8\u63d0\u4f9b[{1}]\uff0c \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! +configuration.13=Path\u4e0d\u80fd\u4e3anull\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.14=\u8def\u5f84[{0}]\u51fa\u73b0\u975e\u6cd5\u503c\u7c7b\u578b[{1}]\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! . +configuration.15=\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.16=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.17=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u503c\u4e3anull\uff0cdatax\u65e0\u6cd5\u8bc6\u522b\u8be5\u914d\u7f6e. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.18=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.19=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef\uff0c\u5217\u8868\u4e0b\u6807\u5fc5\u987b\u4e3a\u6570\u5b57\u7c7b\u578b\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{0}] \uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.20=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f!. +configuration.21=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8def\u5f84[{0}]\u4e0d\u5408\u6cd5, \u8def\u5f84\u5c42\u6b21\u4e4b\u95f4\u4e0d\u80fd\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26 . +configuration.22=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u56e0\u4e3a\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f, JSON\u4e0d\u80fd\u4e3a\u7a7a\u767d. \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. +configuration.23=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f: {0} . \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. + + +listutil.1=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef\uff0cList\u4e0d\u80fd\u4e3a\u7a7a. +listutil.2=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.3=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5141\u8bb8\u91cd\u590d\u51fa\u73b0\u5728\u5217\u8868\u4e2d: [{1}]. +listutil.4=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.5=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.6=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5b58\u5728\u4e8e\u5217\u8868\u4e2d:[{1}]. +listutil.7=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.8=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. + + +rangesplitutil.1=\u5207\u5206\u4efd\u6570\u4e0d\u80fd\u5c0f\u4e8e1. \u6b64\u5904:expectSliceNumber=[{0}]. +rangesplitutil.2=\u5bf9 BigInteger \u8fdb\u884c\u5207\u5206\u65f6\uff0c\u5176\u5de6\u53f3\u533a\u95f4\u4e0d\u80fd\u4e3a null. \u6b64\u5904:left=[{0}],right=[{1}]. +rangesplitutil.3=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.4=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. +rangesplitutil.5=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.6=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. + + +retryutil.1=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2callable\u4e0d\u80fd\u4e3a\u7a7a ! +retryutil.2=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2retrytime[%d]\u4e0d\u80fd\u5c0f\u4e8e1 ! +retryutil.3=Exception when calling callable, \u5f02\u5e38Msg:{0} +retryutil.4=Exception when calling callable, \u5373\u5c06\u5c1d\u8bd5\u6267\u884c\u7b2c{0}\u6b21\u91cd\u8bd5,\u5171\u8ba1\u91cd\u8bd5{1}\u6b21.\u672c\u6b21\u91cd\u8bd5\u8ba1\u5212\u7b49\u5f85[{2}]ms,\u5b9e\u9645\u7b49\u5f85[{3}]ms, \u5f02\u5e38Msg:[{4}] + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1}, STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_en_US.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_en_US.properties new file mode 100644 index 00000000..2074bbb9 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_en_US.properties @@ -0,0 +1,53 @@ +very_like_yixiao=1{0}2{1}3 + + +configuration.1=Configuration information error. The configuration file [{0}] you provided does not exist. Please check your configuration files. +configuration.2=Configuration information error. Failed to read the configuration file [{0}] you provided. Error reason: {1}. Please check the permission settings of your configuration files. +configuration.3=Please check your configuration files. Failed to read the configuration file you provided. Error reason: {0}. Please check the permission settings of your configuration files. +configuration.4=The configuration file you provided contains errors. [{0}] is a required parameter and cannot be empty or blank. +configuration.5=The configuration file you provided contains errors. [{0}] is a required parameter and cannot be empty or blank. +configuration.6=Task reading configuration file error. Invalid configuration file path [{0}] value. The expected value should be of the character type: {1}. Please check your configuration and make corrections. +configuration.7=The configuration information you provided contains errors. The value [{1}] obtained from [{0}] cannot be converted to the Bool type. Please check the source table configuration and make corrections. +configuration.8=Task reading configuration file error. Invalid configuration file path [{0}] value. The expected value should be of the integer type: {1}. Please check your configuration and make corrections. +configuration.9=Task reading configuration file error. Invalid configuration file path [{0}] value. The expected value should be of the integer type: {1}. Please check your configuration and make corrections. +configuration.10=Task reading configuration file error. Invalid configuration file path [{0}] value. The expected value should be of the floating-point type: {1}. Please check your configuration and make corrections. +configuration.11=The Key [{0}] for the configuration file does not exist. This is a code programming error. Please contact the DataX team. +configuration.12=The value [{0}] cannot adapt to the [{1}] you provided. This exception represents a system programming error. Please contact the DataX developer team. +configuration.13=The path cannot be null. This exception represents a system programming error. Please contact the DataX developer team. +configuration.14=The path [{0}] has an invalid value type [{1}]. This exception represents a system programming error. Please contact the DataX developer team. +configuration.15=This exception represents a system programming error. Please contact the DataX developer team. +configuration.16=The configuration file you provided contains errors. The path [{0}] requires you to configure a Map object in JSON format, but the actual type found on the node is [{1}]. Please check your configuration and make corrections. +configuration.17=The configuration file you provided contains errors. The value of the path [{0}] is null and DataX cannot recognize the configuration. Please check your configuration and make corrections. +configuration.18=The configuration file you provided contains errors. The path [{0}] requires you to configure a Map object in JSON format, but the actual type found on the node is [{1}]. Please check your configuration and make corrections. +configuration.19=System programming error. The list subscript must be of the numeric type, but the actual type found on this node is [{0}]. This exception represents a system programming error. Please contact the DataX developer team. +configuration.20=System programming error. This exception represents a system programming error. Please contact the DataX developer team. +configuration.21=System programming error. Invalid path [{0}]. No spaces are allowed between path layers. +configuration.22=Configuration information error. The configuration information you provided is not in a legal JSON format. JSON cannot be blank. Please provide the configuration information in the standard JSON format. +configuration.23=Configuration information error. The configuration information you provided is not in a valid JSON format: {0}. Please provide the configuration information in the standard JSON format. + + +listutil.1=The job configuration you provided contains errors. The list cannot be empty. +listutil.2=The job configuration you provided contains errors. The list cannot be empty. +listutil.3=The job configuration information you provided contains errors. String: [{0}] is not allowed to be repeated in the list: [{1}]. +listutil.4=The job configuration you provided contains errors. The list cannot be empty. +listutil.5=The job configuration you provided contains errors. The list cannot be empty. +listutil.6=The job configuration information you provided contains errors. String: [{0}] does not exist in the list: [{1}]. +listutil.7=The job configuration you provided contains errors. The list cannot be empty. +listutil.8=The job configuration you provided contains errors. The list cannot be empty. + + +rangesplitutil.1=The slice number cannot be less than 1. Here: [expectSliceNumber]=[{0}]. +rangesplitutil.2=The left or right intervals of BigInteger character strings cannot be null when they are sliced. Here: [left]=[{0}], [right]=[{1}]. +rangesplitutil.3=The [bigInteger] parameter cannot be null. +rangesplitutil.4=Only ASCII character strings are supported for character string slicing, but the [{0}] character string is not of the ASCII type. +rangesplitutil.5=The [bigInteger] parameter cannot be null. +rangesplitutil.6=Only ASCII character strings are supported for character string slicing, but the [{0}] character string is not of the ASCII type. + + +retryutil.1=System programming error. The “callable” input parameter cannot be null. +retryutil.2=System programming error. The “retrytime[%d]” input parameter cannot be less than 1. +retryutil.3=Exception when calling callable. Exception Msg: {0} +retryutil.4=Exception when calling callable. Retry Attempt: {0} will start soon. {1} attempts in total. This attempt planned to wait for [{2}]ms, and actually waited for [{3}]ms. Exception Msg: [{4}]. + +httpclientutil.1=Request address: {0}. Request method: {1}. STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=The remote interface returns -1. We will try again \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_ja_JP.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..d4409a8d --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_ja_JP.properties @@ -0,0 +1,53 @@ +very_like_yixiao=1{0}2{1}3 + + +configuration.1=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef\uff0c\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6[{0}]\u4e0d\u5b58\u5728. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. +configuration.2=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6[{0}]\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.3=\u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {0}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.4=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.5=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.6=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u56e0\u4e3a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5\uff0c\u671f\u671b\u662f\u5b57\u7b26\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.7=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u6709\u8bef\uff0c\u56e0\u4e3a\u4ece[{0}]\u83b7\u53d6\u7684\u503c[{1}]\u65e0\u6cd5\u8f6c\u6362\u4e3abool\u7c7b\u578b. \u8bf7\u68c0\u67e5\u6e90\u8868\u7684\u914d\u7f6e\u5e76\u4e14\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539. +configuration.8=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.9=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.10=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6d6e\u70b9\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.11=\u914d\u7f6e\u6587\u4ef6\u5bf9\u5e94Key[{0}]\u5e76\u4e0d\u5b58\u5728\uff0c\u8be5\u60c5\u51b5\u662f\u4ee3\u7801\u7f16\u7a0b\u9519\u8bef. \u8bf7\u8054\u7cfbDataX\u56e2\u961f\u7684\u540c\u5b66. +configuration.12=\u503c[{0}]\u65e0\u6cd5\u9002\u914d\u60a8\u63d0\u4f9b[{1}]\uff0c \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! +configuration.13=Path\u4e0d\u80fd\u4e3anull\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.14=\u8def\u5f84[{0}]\u51fa\u73b0\u975e\u6cd5\u503c\u7c7b\u578b[{1}]\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! . +configuration.15=\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.16=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.17=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u503c\u4e3anull\uff0cdatax\u65e0\u6cd5\u8bc6\u522b\u8be5\u914d\u7f6e. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.18=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.19=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef\uff0c\u5217\u8868\u4e0b\u6807\u5fc5\u987b\u4e3a\u6570\u5b57\u7c7b\u578b\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{0}] \uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.20=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f!. +configuration.21=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8def\u5f84[{0}]\u4e0d\u5408\u6cd5, \u8def\u5f84\u5c42\u6b21\u4e4b\u95f4\u4e0d\u80fd\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26 . +configuration.22=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u56e0\u4e3a\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f, JSON\u4e0d\u80fd\u4e3a\u7a7a\u767d. \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. +configuration.23=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f: {0} . \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. + + +listutil.1=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef\uff0cList\u4e0d\u80fd\u4e3a\u7a7a. +listutil.2=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.3=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5141\u8bb8\u91cd\u590d\u51fa\u73b0\u5728\u5217\u8868\u4e2d: [{1}]. +listutil.4=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.5=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.6=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5b58\u5728\u4e8e\u5217\u8868\u4e2d:[{1}]. +listutil.7=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.8=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. + + +rangesplitutil.1=\u5207\u5206\u4efd\u6570\u4e0d\u80fd\u5c0f\u4e8e1. \u6b64\u5904:expectSliceNumber=[{0}]. +rangesplitutil.2=\u5bf9 BigInteger \u8fdb\u884c\u5207\u5206\u65f6\uff0c\u5176\u5de6\u53f3\u533a\u95f4\u4e0d\u80fd\u4e3a null. \u6b64\u5904:left=[{0}],right=[{1}]. +rangesplitutil.3=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.4=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. +rangesplitutil.5=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.6=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. + + +retryutil.1=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2callable\u4e0d\u80fd\u4e3a\u7a7a ! +retryutil.2=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2retrytime[%d]\u4e0d\u80fd\u5c0f\u4e8e1 ! +retryutil.3=Exception when calling callable, \u5f02\u5e38Msg:{0} +retryutil.4=Exception when calling callable, \u5373\u5c06\u5c1d\u8bd5\u6267\u884c\u7b2c{0}\u6b21\u91cd\u8bd5,\u5171\u8ba1\u91cd\u8bd5{1}\u6b21.\u672c\u6b21\u91cd\u8bd5\u8ba1\u5212\u7b49\u5f85[{2}]ms,\u5b9e\u9645\u7b49\u5f85[{3}]ms, \u5f02\u5e38Msg:[{4}] + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_CN.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..533dcd52 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_CN.properties @@ -0,0 +1,54 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + + +configuration.1=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef\uff0c\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6[{0}]\u4e0d\u5b58\u5728. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. +configuration.2=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6[{0}]\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.3=\u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {0}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.4=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.5=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.6=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u56e0\u4e3a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5\uff0c\u671f\u671b\u662f\u5b57\u7b26\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.7=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u6709\u8bef\uff0c\u56e0\u4e3a\u4ece[{0}]\u83b7\u53d6\u7684\u503c[{1}]\u65e0\u6cd5\u8f6c\u6362\u4e3abool\u7c7b\u578b. \u8bf7\u68c0\u67e5\u6e90\u8868\u7684\u914d\u7f6e\u5e76\u4e14\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539. +configuration.8=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.9=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.10=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6d6e\u70b9\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.11=\u914d\u7f6e\u6587\u4ef6\u5bf9\u5e94Key[{0}]\u5e76\u4e0d\u5b58\u5728\uff0c\u8be5\u60c5\u51b5\u662f\u4ee3\u7801\u7f16\u7a0b\u9519\u8bef. \u8bf7\u8054\u7cfbDataX\u56e2\u961f\u7684\u540c\u5b66. +configuration.12=\u503c[{0}]\u65e0\u6cd5\u9002\u914d\u60a8\u63d0\u4f9b[{1}]\uff0c \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! +configuration.13=Path\u4e0d\u80fd\u4e3anull\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.14=\u8def\u5f84[{0}]\u51fa\u73b0\u975e\u6cd5\u503c\u7c7b\u578b[{1}]\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! . +configuration.15=\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.16=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.17=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u503c\u4e3anull\uff0cdatax\u65e0\u6cd5\u8bc6\u522b\u8be5\u914d\u7f6e. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.18=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.19=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef\uff0c\u5217\u8868\u4e0b\u6807\u5fc5\u987b\u4e3a\u6570\u5b57\u7c7b\u578b\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{0}] \uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.20=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f!. +configuration.21=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8def\u5f84[{0}]\u4e0d\u5408\u6cd5, \u8def\u5f84\u5c42\u6b21\u4e4b\u95f4\u4e0d\u80fd\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26 . +configuration.22=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u56e0\u4e3a\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f, JSON\u4e0d\u80fd\u4e3a\u7a7a\u767d. \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. +configuration.23=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f: {0} . \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. + + +listutil.1=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef\uff0cList\u4e0d\u80fd\u4e3a\u7a7a. +listutil.2=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.3=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5141\u8bb8\u91cd\u590d\u51fa\u73b0\u5728\u5217\u8868\u4e2d: [{1}]. +listutil.4=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.5=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.6=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5b58\u5728\u4e8e\u5217\u8868\u4e2d:[{1}]. +listutil.7=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.8=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. + + +rangesplitutil.1=\u5207\u5206\u4efd\u6570\u4e0d\u80fd\u5c0f\u4e8e1. \u6b64\u5904:expectSliceNumber=[{0}]. +rangesplitutil.2=\u5bf9 BigInteger \u8fdb\u884c\u5207\u5206\u65f6\uff0c\u5176\u5de6\u53f3\u533a\u95f4\u4e0d\u80fd\u4e3a null. \u6b64\u5904:left=[{0}],right=[{1}]. +rangesplitutil.3=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.4=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. +rangesplitutil.5=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.6=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. + + +retryutil.1=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2callable\u4e0d\u80fd\u4e3a\u7a7a ! +retryutil.2=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2retrytime[%d]\u4e0d\u80fd\u5c0f\u4e8e1 ! +retryutil.3=Exception when calling callable, \u5f02\u5e38Msg:{0} +retryutil.4=Exception when calling callable, \u5373\u5c06\u5c1d\u8bd5\u6267\u884c\u7b2c{0}\u6b21\u91cd\u8bd5,\u5171\u8ba1\u91cd\u8bd5{1}\u6b21.\u672c\u6b21\u91cd\u8bd5\u8ba1\u5212\u7b49\u5f85[{2}]ms,\u5b9e\u9645\u7b49\u5f85[{3}]ms, \u5f02\u5e38Msg:[{4}] + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_HK.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..ab26ac52 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_HK.properties @@ -0,0 +1,104 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + + +configuration.1=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef\uff0c\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6[{0}]\u4e0d\u5b58\u5728. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. +configuration.2=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6[{0}]\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.3=\u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {0}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.4=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.5=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.6=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u56e0\u4e3a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5\uff0c\u671f\u671b\u662f\u5b57\u7b26\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.7=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u6709\u8bef\uff0c\u56e0\u4e3a\u4ece[{0}]\u83b7\u53d6\u7684\u503c[{1}]\u65e0\u6cd5\u8f6c\u6362\u4e3abool\u7c7b\u578b. \u8bf7\u68c0\u67e5\u6e90\u8868\u7684\u914d\u7f6e\u5e76\u4e14\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539. +configuration.8=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.9=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.10=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6d6e\u70b9\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.11=\u914d\u7f6e\u6587\u4ef6\u5bf9\u5e94Key[{0}]\u5e76\u4e0d\u5b58\u5728\uff0c\u8be5\u60c5\u51b5\u662f\u4ee3\u7801\u7f16\u7a0b\u9519\u8bef. \u8bf7\u8054\u7cfbDataX\u56e2\u961f\u7684\u540c\u5b66. +configuration.12=\u503c[{0}]\u65e0\u6cd5\u9002\u914d\u60a8\u63d0\u4f9b[{1}]\uff0c \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! +configuration.13=Path\u4e0d\u80fd\u4e3anull\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.14=\u8def\u5f84[{0}]\u51fa\u73b0\u975e\u6cd5\u503c\u7c7b\u578b[{1}]\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! . +configuration.15=\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.16=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.17=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u503c\u4e3anull\uff0cdatax\u65e0\u6cd5\u8bc6\u522b\u8be5\u914d\u7f6e. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.18=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.19=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef\uff0c\u5217\u8868\u4e0b\u6807\u5fc5\u987b\u4e3a\u6570\u5b57\u7c7b\u578b\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{0}] \uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.20=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f!. +configuration.21=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8def\u5f84[{0}]\u4e0d\u5408\u6cd5, \u8def\u5f84\u5c42\u6b21\u4e4b\u95f4\u4e0d\u80fd\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26 . +configuration.22=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u56e0\u4e3a\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f, JSON\u4e0d\u80fd\u4e3a\u7a7a\u767d. \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. +configuration.23=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f: {0} . \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. + + +listutil.1=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef\uff0cList\u4e0d\u80fd\u4e3a\u7a7a. +listutil.2=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.3=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5141\u8bb8\u91cd\u590d\u51fa\u73b0\u5728\u5217\u8868\u4e2d: [{1}]. +listutil.4=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.5=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.6=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5b58\u5728\u4e8e\u5217\u8868\u4e2d:[{1}]. +listutil.7=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.8=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. + + +rangesplitutil.1=\u5207\u5206\u4efd\u6570\u4e0d\u80fd\u5c0f\u4e8e1. \u6b64\u5904:expectSliceNumber=[{0}]. +rangesplitutil.2=\u5bf9 BigInteger \u8fdb\u884c\u5207\u5206\u65f6\uff0c\u5176\u5de6\u53f3\u533a\u95f4\u4e0d\u80fd\u4e3a null. \u6b64\u5904:left=[{0}],right=[{1}]. +rangesplitutil.3=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.4=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. +rangesplitutil.5=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.6=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. + + +retryutil.1=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2callable\u4e0d\u80fd\u4e3a\u7a7a ! +retryutil.2=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2retrytime[%d]\u4e0d\u80fd\u5c0f\u4e8e1 ! +retryutil.3=Exception when calling callable, \u5f02\u5e38Msg:{0} +retryutil.4=Exception when calling callable, \u5373\u5c06\u5c1d\u8bd5\u6267\u884c\u7b2c{0}\u6b21\u91cd\u8bd5,\u5171\u8ba1\u91cd\u8bd5{1}\u6b21.\u672c\u6b21\u91cd\u8bd5\u8ba1\u5212\u7b49\u5f85[{2}]ms,\u5b9e\u9645\u7b49\u5f85[{3}]ms, \u5f02\u5e38Msg:[{4}] + +very_like_yixiao=一{0}二{1}三 + + +configuration.1=配置資訊錯誤,您提供的配置檔案[{0}]不存在. 請檢查您的配置檔案. +configuration.2=配置資訊錯誤. 您提供配置檔案[{0}]讀取失敗,錯誤原因: {1}. 請檢查您的配置檔案的權限設定. +configuration.3=請檢查您的配置檔案. 您提供的配置檔案讀取失敗,錯誤原因: {0}. 請檢查您的配置檔案的權限設定. +configuration.4=您提供配置檔案有誤,[{0}]是必填參數,不允許為空或者留白 . +configuration.5=您提供配置檔案有誤,[{0}]是必填參數,不允許為空或者留白 . +configuration.6=任務讀取配置檔案出錯. 因為配置檔案路徑[{0}] 值不合法,期望是字符類型: {1}. 請檢查您的配置並作出修改. +configuration.7=您提供的配置資訊有誤,因為從[{0}]獲取的值[{1}]無法轉換為bool類型. 請檢查源表的配置並且做出相應的修改. +configuration.8=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是整數類型: {1}. 請檢查您的配置並作出修改. +configuration.9=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是整數類型: {1}. 請檢查您的配置並作出修改. +configuration.10=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是浮點類型: {1}. 請檢查您的配置並作出修改. +configuration.11=配置檔案對應Key[{0}]並不存在,該情況是代碼編程錯誤. 請聯絡DataX團隊的同學. +configuration.12=值[{0}]無法適配您提供[{1}], 該異常代表系統編程錯誤, 請聯絡DataX開發團隊! +configuration.13=Path不能為null,該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.14=路徑[{0}]出現不合法值類型[{1}],該異常代表系統編程錯誤, 請聯絡DataX開發團隊! . +configuration.15=該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.16=您提供的配置檔案有誤. 路徑[{0}]需要配置Json格式的Map對象,但該節點發現實際類型是[{1}]. 請檢查您的配置並作出修改. +configuration.17=您提供的配置檔案有誤. 路徑[{0}]值為null,datax無法識別該配置. 請檢查您的配置並作出修改. +configuration.18=您提供的配置檔案有誤. 路徑[{0}]需要配置Json格式的Map對象,但該節點發現實際類型是[{1}]. 請檢查您的配置並作出修改. +configuration.19=系統編程錯誤,清單下標必須為數字類型,但該節點發現實際類型是[{0}] ,該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.20=系統編程錯誤, 該異常代表系統編程錯誤, 請聯絡DataX開發團隊!. +configuration.21=系統編程錯誤, 路徑[{0}]不合法, 路徑層次之間不能出現空白字符 . +configuration.22=配置資訊錯誤. 因為您提供的配置資訊不是合法的JSON格式, JSON不能為空白. 請按照標準json格式提供配置資訊. +configuration.23=配置資訊錯誤. 您提供的配置資訊不是合法的JSON格式: {0}. 請按照標準json格式提供配置資訊. + + +listutil.1=您提供的作業配置有誤,List不能為空. +listutil.2=您提供的作業配置有誤, List不能為空. +listutil.3=您提供的作業配置資訊有誤, String:[{0}]不允許重複出現在清單中: [{1}]. +listutil.4=您提供的作業配置有誤, List不能為空. +listutil.5=您提供的作業配置有誤, List不能為空. +listutil.6=您提供的作業配置資訊有誤, String:[{0}]不存在於清單中:[{1}]. +listutil.7=您提供的作業配置有誤, List不能為空. +listutil.8=您提供的作業配置有誤, List不能為空. + + +rangesplitutil.1=切分份數不能小於1. 此處:expectSliceNumber=[{0}]. +rangesplitutil.2=對 BigInteger 進行切分時,其左右區間不能為 null. 此處:left=[{0}],right=[{1}]. +rangesplitutil.3=參數 bigInteger 不能為空. +rangesplitutil.4=根據字符串進行切分時僅支援 ASCII 字符串,而字符串:[{0}]非 ASCII 字符串. +rangesplitutil.5=參數 bigInteger 不能為空. +rangesplitutil.6=根據字符串進行切分時僅支援 ASCII 字符串,而字符串:[{0}]非 ASCII 字符串. + + +retryutil.1=系統編程錯誤, 入參callable不能為空 ! +retryutil.2=系統編程錯誤, 入參retrytime[%d]不能小於1 ! +retryutil.3=Exception when calling callable, 異常Msg:{0} +retryutil.4=Exception when calling callable, 即將嘗試執行第{0}次重試,共計重試{1}次.本次重試計劃等待[{2}]ms,實際等待[{3}]ms, 異常Msg:[{4}] + +httpclientutil.1=\u8ACB\u6C42\u5730\u5740\uFF1A{0}, \u8ACB\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u9060\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C07\u91CD\u8A66 \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_TW.properties b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..89eb1eae --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/LocalStrings_zh_TW.properties @@ -0,0 +1,104 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + + +configuration.1=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef\uff0c\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6[{0}]\u4e0d\u5b58\u5728. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. +configuration.2=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6[{0}]\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.3=\u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff0c\u9519\u8bef\u539f\u56e0: {0}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u6587\u4ef6\u7684\u6743\u9650\u8bbe\u7f6e. +configuration.4=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.5=\u60a8\u63d0\u4f9b\u914d\u7f6e\u6587\u4ef6\u6709\u8bef\uff0c[{0}]\u662f\u5fc5\u586b\u53c2\u6570\uff0c\u4e0d\u5141\u8bb8\u4e3a\u7a7a\u6216\u8005\u7559\u767d . +configuration.6=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u56e0\u4e3a\u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5\uff0c\u671f\u671b\u662f\u5b57\u7b26\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.7=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u6709\u8bef\uff0c\u56e0\u4e3a\u4ece[{0}]\u83b7\u53d6\u7684\u503c[{1}]\u65e0\u6cd5\u8f6c\u6362\u4e3abool\u7c7b\u578b. \u8bf7\u68c0\u67e5\u6e90\u8868\u7684\u914d\u7f6e\u5e76\u4e14\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539. +configuration.8=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.9=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6574\u6570\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.10=\u4efb\u52a1\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u51fa\u9519. \u914d\u7f6e\u6587\u4ef6\u8def\u5f84[{0}] \u503c\u975e\u6cd5, \u671f\u671b\u662f\u6d6e\u70b9\u7c7b\u578b: {1}. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.11=\u914d\u7f6e\u6587\u4ef6\u5bf9\u5e94Key[{0}]\u5e76\u4e0d\u5b58\u5728\uff0c\u8be5\u60c5\u51b5\u662f\u4ee3\u7801\u7f16\u7a0b\u9519\u8bef. \u8bf7\u8054\u7cfbDataX\u56e2\u961f\u7684\u540c\u5b66. +configuration.12=\u503c[{0}]\u65e0\u6cd5\u9002\u914d\u60a8\u63d0\u4f9b[{1}]\uff0c \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! +configuration.13=Path\u4e0d\u80fd\u4e3anull\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.14=\u8def\u5f84[{0}]\u51fa\u73b0\u975e\u6cd5\u503c\u7c7b\u578b[{1}]\uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f! . +configuration.15=\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.16=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.17=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u503c\u4e3anull\uff0cdatax\u65e0\u6cd5\u8bc6\u522b\u8be5\u914d\u7f6e. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.18=\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u6587\u4ef6\u6709\u8bef. \u8def\u5f84[{0}]\u9700\u8981\u914d\u7f6eJson\u683c\u5f0f\u7684Map\u5bf9\u8c61\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{1}]. \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4f5c\u51fa\u4fee\u6539. +configuration.19=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef\uff0c\u5217\u8868\u4e0b\u6807\u5fc5\u987b\u4e3a\u6570\u5b57\u7c7b\u578b\uff0c\u4f46\u8be5\u8282\u70b9\u53d1\u73b0\u5b9e\u9645\u7c7b\u578b\u662f[{0}] \uff0c\u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f ! +configuration.20=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8be5\u5f02\u5e38\u4ee3\u8868\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8bf7\u8054\u7cfbDataX\u5f00\u53d1\u56e2\u961f!. +configuration.21=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u8def\u5f84[{0}]\u4e0d\u5408\u6cd5, \u8def\u5f84\u5c42\u6b21\u4e4b\u95f4\u4e0d\u80fd\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26 . +configuration.22=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u56e0\u4e3a\u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f, JSON\u4e0d\u80fd\u4e3a\u7a7a\u767d. \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. +configuration.23=\u914d\u7f6e\u4fe1\u606f\u9519\u8bef. \u60a8\u63d0\u4f9b\u7684\u914d\u7f6e\u4fe1\u606f\u4e0d\u662f\u5408\u6cd5\u7684JSON\u683c\u5f0f: {0} . \u8bf7\u6309\u7167\u6807\u51c6json\u683c\u5f0f\u63d0\u4f9b\u914d\u7f6e\u4fe1\u606f. + + +listutil.1=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef\uff0cList\u4e0d\u80fd\u4e3a\u7a7a. +listutil.2=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.3=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5141\u8bb8\u91cd\u590d\u51fa\u73b0\u5728\u5217\u8868\u4e2d: [{1}]. +listutil.4=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.5=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.6=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u4fe1\u606f\u6709\u8bef, String:[{0}] \u4e0d\u5b58\u5728\u4e8e\u5217\u8868\u4e2d:[{1}]. +listutil.7=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. +listutil.8=\u60a8\u63d0\u4f9b\u7684\u4f5c\u4e1a\u914d\u7f6e\u6709\u8bef, List\u4e0d\u80fd\u4e3a\u7a7a. + + +rangesplitutil.1=\u5207\u5206\u4efd\u6570\u4e0d\u80fd\u5c0f\u4e8e1. \u6b64\u5904:expectSliceNumber=[{0}]. +rangesplitutil.2=\u5bf9 BigInteger \u8fdb\u884c\u5207\u5206\u65f6\uff0c\u5176\u5de6\u53f3\u533a\u95f4\u4e0d\u80fd\u4e3a null. \u6b64\u5904:left=[{0}],right=[{1}]. +rangesplitutil.3=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.4=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. +rangesplitutil.5=\u53c2\u6570 bigInteger \u4e0d\u80fd\u4e3a\u7a7a. +rangesplitutil.6=\u6839\u636e\u5b57\u7b26\u4e32\u8fdb\u884c\u5207\u5206\u65f6\u4ec5\u652f\u6301 ASCII \u5b57\u7b26\u4e32\uff0c\u800c\u5b57\u7b26\u4e32:[{0}]\u975e ASCII \u5b57\u7b26\u4e32. + + +retryutil.1=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2callable\u4e0d\u80fd\u4e3a\u7a7a ! +retryutil.2=\u7cfb\u7edf\u7f16\u7a0b\u9519\u8bef, \u5165\u53c2retrytime[%d]\u4e0d\u80fd\u5c0f\u4e8e1 ! +retryutil.3=Exception when calling callable, \u5f02\u5e38Msg:{0} +retryutil.4=Exception when calling callable, \u5373\u5c06\u5c1d\u8bd5\u6267\u884c\u7b2c{0}\u6b21\u91cd\u8bd5,\u5171\u8ba1\u91cd\u8bd5{1}\u6b21.\u672c\u6b21\u91cd\u8bd5\u8ba1\u5212\u7b49\u5f85[{2}]ms,\u5b9e\u9645\u7b49\u5f85[{3}]ms, \u5f02\u5e38Msg:[{4}] + +very_like_yixiao=一{0}二{1}三 + + +configuration.1=配置資訊錯誤,您提供的配置檔案[{0}]不存在. 請檢查您的配置檔案. +configuration.2=配置資訊錯誤. 您提供配置檔案[{0}]讀取失敗,錯誤原因: {1}. 請檢查您的配置檔案的權限設定. +configuration.3=請檢查您的配置檔案. 您提供的配置檔案讀取失敗,錯誤原因: {0}. 請檢查您的配置檔案的權限設定. +configuration.4=您提供配置檔案有誤,[{0}]是必填參數,不允許為空或者留白 . +configuration.5=您提供配置檔案有誤,[{0}]是必填參數,不允許為空或者留白 . +configuration.6=任務讀取配置檔案出錯. 因為配置檔案路徑[{0}] 值不合法,期望是字符類型: {1}. 請檢查您的配置並作出修改. +configuration.7=您提供的配置資訊有誤,因為從[{0}]獲取的值[{1}]無法轉換為bool類型. 請檢查源表的配置並且做出相應的修改. +configuration.8=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是整數類型: {1}. 請檢查您的配置並作出修改. +configuration.9=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是整數類型: {1}. 請檢查您的配置並作出修改. +configuration.10=任務讀取配置檔案出錯. 配置檔案路徑[{0}] 值不合法, 期望是浮點類型: {1}. 請檢查您的配置並作出修改. +configuration.11=配置檔案對應Key[{0}]並不存在,該情況是代碼編程錯誤. 請聯絡DataX團隊的同學. +configuration.12=值[{0}]無法適配您提供[{1}], 該異常代表系統編程錯誤, 請聯絡DataX開發團隊! +configuration.13=Path不能為null,該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.14=路徑[{0}]出現不合法值類型[{1}],該異常代表系統編程錯誤, 請聯絡DataX開發團隊! . +configuration.15=該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.16=您提供的配置檔案有誤. 路徑[{0}]需要配置Json格式的Map對象,但該節點發現實際類型是[{1}]. 請檢查您的配置並作出修改. +configuration.17=您提供的配置檔案有誤. 路徑[{0}]值為null,datax無法識別該配置. 請檢查您的配置並作出修改. +configuration.18=您提供的配置檔案有誤. 路徑[{0}]需要配置Json格式的Map對象,但該節點發現實際類型是[{1}]. 請檢查您的配置並作出修改. +configuration.19=系統編程錯誤,清單下標必須為數字類型,但該節點發現實際類型是[{0}] ,該異常代表系統編程錯誤, 請聯絡DataX開發團隊 ! +configuration.20=系統編程錯誤, 該異常代表系統編程錯誤, 請聯絡DataX開發團隊!. +configuration.21=系統編程錯誤, 路徑[{0}]不合法, 路徑層次之間不能出現空白字符 . +configuration.22=配置資訊錯誤. 因為您提供的配置資訊不是合法的JSON格式, JSON不能為空白. 請按照標準json格式提供配置資訊. +configuration.23=配置資訊錯誤. 您提供的配置資訊不是合法的JSON格式: {0}. 請按照標準json格式提供配置資訊. + + +listutil.1=您提供的作業配置有誤,List不能為空. +listutil.2=您提供的作業配置有誤, List不能為空. +listutil.3=您提供的作業配置資訊有誤, String:[{0}]不允許重複出現在清單中: [{1}]. +listutil.4=您提供的作業配置有誤, List不能為空. +listutil.5=您提供的作業配置有誤, List不能為空. +listutil.6=您提供的作業配置資訊有誤, String:[{0}]不存在於清單中:[{1}]. +listutil.7=您提供的作業配置有誤, List不能為空. +listutil.8=您提供的作業配置有誤, List不能為空. + + +rangesplitutil.1=切分份數不能小於1. 此處:expectSliceNumber=[{0}]. +rangesplitutil.2=對 BigInteger 進行切分時,其左右區間不能為 null. 此處:left=[{0}],right=[{1}]. +rangesplitutil.3=參數 bigInteger 不能為空. +rangesplitutil.4=根據字符串進行切分時僅支援 ASCII 字符串,而字符串:[{0}]非 ASCII 字符串. +rangesplitutil.5=參數 bigInteger 不能為空. +rangesplitutil.6=根據字符串進行切分時僅支援 ASCII 字符串,而字符串:[{0}]非 ASCII 字符串. + + +retryutil.1=系統編程錯誤, 入參callable不能為空 ! +retryutil.2=系統編程錯誤, 入參retrytime[%d]不能小於1 ! +retryutil.3=Exception when calling callable, 異常Msg:{0} +retryutil.4=Exception when calling callable, 即將嘗試執行第{0}次重試,共計重試{1}次.本次重試計劃等待[{2}]ms,實際等待[{3}]ms, 異常Msg:[{4}] + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/MessageSource.java b/common/src/main/java/com/alibaba/datax/common/util/MessageSource.java new file mode 100644 index 00000000..d2411328 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/MessageSource.java @@ -0,0 +1,207 @@ +package com.alibaba.datax.common.util; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.TimeZone; + +import org.apache.commons.lang3.LocaleUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class MessageSource { + private static final Logger LOG = LoggerFactory.getLogger(MessageSource.class); + private static Map resourceBundleCache = new HashMap(); + public static Locale locale = null; + public static TimeZone timeZone = null; + private ResourceBundle resourceBundle = null; + + private MessageSource(ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + } + + /** + * @param baseName + * demo: javax.servlet.http.LocalStrings + * + * @throws MissingResourceException + * - if no resource bundle for the specified base name can be + * found + * */ + public static MessageSource loadResourceBundle(String baseName) { + return loadResourceBundle(baseName, MessageSource.locale, + MessageSource.timeZone); + } + + /** + * @param clazz + * 根据其获取package name + * */ + public static MessageSource loadResourceBundle(Class clazz) { + return loadResourceBundle(clazz.getPackage().getName()); + } + + /** + * @param clazz + * 根据其获取package name + * */ + public static MessageSource loadResourceBundle(Class clazz, + Locale locale, TimeZone timeZone) { + return loadResourceBundle(clazz.getPackage().getName(), locale, + timeZone); + } + + /** + * warn: + * ok: ResourceBundle.getBundle("xxx.LocalStrings", Locale.getDefault(), LoadUtil.getJarLoader(PluginType.WRITER, "odpswriter")) + * error: ResourceBundle.getBundle("xxx.LocalStrings", Locale.getDefault(), LoadUtil.getJarLoader(PluginType.WRITER, "odpswriter")) + * @param baseName + * demo: javax.servlet.http.LocalStrings + * + * @throws MissingResourceException + * - if no resource bundle for the specified base name can be + * found + * + * */ + public static MessageSource loadResourceBundle(String baseName, + Locale locale, TimeZone timeZone) { + ResourceBundle resourceBundle = null; + if (null == locale) { + locale = LocaleUtils.toLocale("en_US"); + } + if (null == timeZone) { + timeZone = TimeZone.getDefault(); + } + String resourceBaseName = String.format("%s.LocalStrings", baseName); + LOG.debug( + "initEnvironment MessageSource.locale[{}], MessageSource.timeZone[{}]", + MessageSource.locale, MessageSource.timeZone); + LOG.debug( + "loadResourceBundle with locale[{}], timeZone[{}], baseName[{}]", + locale, timeZone, resourceBaseName); + // warn: 这个map的维护需要考虑Local吗, no? + if (!MessageSource.resourceBundleCache.containsKey(resourceBaseName)) { + ClassLoader clazzLoader = Thread.currentThread() + .getContextClassLoader(); + LOG.debug("loadResourceBundle classLoader:{}", clazzLoader); + resourceBundle = ResourceBundle.getBundle(resourceBaseName, locale, + clazzLoader); + MessageSource.resourceBundleCache.put(resourceBaseName, + resourceBundle); + } else { + resourceBundle = MessageSource.resourceBundleCache + .get(resourceBaseName); + } + + return new MessageSource(resourceBundle); + } + + public static boolean unloadResourceBundle(Class clazz) { + String baseName = clazz.getPackage().getName(); + String resourceBaseName = String.format("%s.LocalStrings", baseName); + if (!MessageSource.resourceBundleCache.containsKey(resourceBaseName)) { + return false; + } else { + MessageSource.resourceBundleCache.remove(resourceBaseName); + return true; + } + } + + public static MessageSource reloadResourceBundle(Class clazz) { + MessageSource.unloadResourceBundle(clazz); + return MessageSource.loadResourceBundle(clazz); + } + + public static void setEnvironment(Locale locale, TimeZone timeZone) { + // warn: 设置默认? @2018.03.21 将此处注释移除,否则在国际化多时区下会遇到问题 + Locale.setDefault(locale); + TimeZone.setDefault(timeZone); + MessageSource.locale = locale; + MessageSource.timeZone = timeZone; + LOG.info("use Locale: {} timeZone: {}", locale, timeZone); + } + + public static void init(final Configuration configuration) { + Locale locale2Set = Locale.getDefault(); + String localeStr = configuration.getString("common.column.locale", "zh_CN");// 默认操作系统的 + if (StringUtils.isNotBlank(localeStr)) { + try { + locale2Set = LocaleUtils.toLocale(localeStr); + } catch (Exception e) { + LOG.warn("ignored locale parse exception: {}", e.getMessage()); + } + } + + TimeZone timeZone2Set = TimeZone.getDefault(); + String timeZoneStr = configuration.getString("common.column.timeZone");// 默认操作系统的 + if (StringUtils.isNotBlank(timeZoneStr)) { + try { + timeZone2Set = TimeZone.getTimeZone(timeZoneStr); + } catch (Exception e) { + LOG.warn("ignored timezone parse exception: {}", e.getMessage()); + } + } + + LOG.info("JVM TimeZone: {}, Locale: {}", timeZone2Set.getID(), locale2Set); + MessageSource.setEnvironment(locale2Set, timeZone2Set); + } + + public static void clearCache() { + MessageSource.resourceBundleCache.clear(); + } + + public String message(String code) { + return this.messageWithDefaultMessage(code, null); + } + + public String message(String code, String args1) { + return this.messageWithDefaultMessage(code, null, + new Object[] { args1 }); + } + + public String message(String code, String args1, String args2) { + return this.messageWithDefaultMessage(code, null, new Object[] { args1, + args2 }); + } + + public String message(String code, String args1, String args2, String args3) { + return this.messageWithDefaultMessage(code, null, new Object[] { args1, + args2, args3 }); + } + + // 上面几个重载可以应对大多数情况, 避免使用这个可以提高性能的 + public String message(String code, Object... args) { + return this.messageWithDefaultMessage(code, null, args); + } + + public String messageWithDefaultMessage(String code, String defaultMessage) { + return this.messageWithDefaultMessage(code, defaultMessage, + new Object[] {}); + } + + /** + * @param args + * MessageFormat会依次调用对应对象的toString方法 + * */ + public String messageWithDefaultMessage(String code, String defaultMessage, + Object... args) { + String messageStr = null; + try { + messageStr = this.resourceBundle.getString(code); + } catch (MissingResourceException e) { + messageStr = defaultMessage; + } + if (null != messageStr && null != args && args.length > 0) { + // warn: see loadResourceBundle set default locale + return MessageFormat.format(messageStr, args); + } else { + return messageStr; + } + + } +} diff --git a/common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java b/common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java index 791f9ea1..ec353730 100755 --- a/common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java +++ b/common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java @@ -206,4 +206,27 @@ public final class RangeSplitUtil { return true; } + + /** + * List拆分工具函数,主要用于reader插件的split拆分逻辑 + * */ + public static List> doListSplit(List objects, int adviceNumber) { + List> splitLists = new ArrayList>(); + if (null == objects) { + return splitLists; + } + long[] splitPoint = RangeSplitUtil.doLongSplit(0, objects.size(), adviceNumber); + for (int startIndex = 0; startIndex < splitPoint.length - 1; startIndex++) { + List objectsForTask = new ArrayList(); + int endIndex = startIndex + 1; + for (long i = splitPoint[startIndex]; i < splitPoint[endIndex]; i++) { + objectsForTask.add(objects.get((int) i)); + } + if (!objectsForTask.isEmpty()) { + splitLists.add(objectsForTask); + } + } + return splitLists; + } + } diff --git a/core/pom.xml b/core/pom.xml index 174a18d3..970f95a6 100755 --- a/core/pom.xml +++ b/core/pom.xml @@ -100,6 +100,14 @@ + + + src/main/java + + **/*.properties + + + org.apache.maven.plugins diff --git a/core/src/main/bin/datax.py b/core/src/main/bin/datax.py index 1099ed3a..4811ae8d 100755 --- a/core/src/main/bin/datax.py +++ b/core/src/main/bin/datax.py @@ -1,23 +1,26 @@ #!/usr/bin/env python # -*- coding:utf-8 -*- -import sys -import os -import signal -import subprocess -import time -import re -import socket -import json -from optparse import OptionParser -from optparse import OptionGroup -from string import Template import codecs +import json +import os import platform +import re +import signal +import socket +import subprocess +import sys +import time +from optparse import OptionGroup +from optparse import OptionParser +from string import Template + +ispy2 = sys.version_info.major == 2 def isWindows(): return platform.system() == 'Windows' + DATAX_HOME = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) DATAX_VERSION = 'DATAX-OPENSOURCE-3.0' @@ -52,13 +55,19 @@ def getLocalIp(): def suicide(signum, e): global child_process - print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + if ispy2: + print >> sys.stderr, "[Error] DataX receive unexpected signal %d, starts to suicide." % (signum) + else: + print("[Error] DataX receive unexpected signal %d, starts to suicide." % (signum), sys.stderr) if child_process: child_process.send_signal(signal.SIGQUIT) time.sleep(1) child_process.kill() - print >> sys.stderr, "DataX Process was killed ! you did ?" + if ispy2: + print >> sys.stderr, "DataX Process was killed ! you did ?" + else: + print("DataX Process was killed ! you did ?", sys.stderr) sys.exit(RET_STATE["KILL"]) @@ -92,10 +101,10 @@ def getOptionParser(): 'if you have mutiple parameters: -p"-DtableName=your-table-name -DcolumnName=your-column-name".' 'Note: you should config in you job tableName with ${tableName}.') prodEnvOptionGroup.add_option("-r", "--reader", metavar="", - action="store", dest="reader",type="string", + action="store", dest="reader", type="string", help='View job config[reader] template, eg: mysqlreader,streamreader') prodEnvOptionGroup.add_option("-w", "--writer", metavar="", - action="store", dest="writer",type="string", + action="store", dest="writer", type="string", help='View job config[writer] template, eg: mysqlwriter,streamwriter') parser.add_option_group(prodEnvOptionGroup) @@ -108,45 +117,50 @@ def getOptionParser(): parser.add_option_group(devEnvOptionGroup) return parser + def generateJobConfigTemplate(reader, writer): - readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % (reader,reader,reader) - writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % (writer,writer,writer) - print readerRef - print writerRef + readerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n" % ( + reader, reader, reader) + writerRef = "Please refer to the %s document:\n https://github.com/alibaba/DataX/blob/master/%s/doc/%s.md \n " % ( + writer, writer, writer) + print(readerRef) + print(writerRef) jobGuid = 'Please save the following configuration as a json file and use\n python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json \nto run the job.\n' - print jobGuid - jobTemplate={ - "job": { - "setting": { - "speed": { - "channel": "" - } - }, - "content": [ - { - "reader": {}, - "writer": {} - } - ] - } + print(jobGuid) + jobTemplate = { + "job": { + "setting": { + "speed": { + "channel": "" + } + }, + "content": [ + { + "reader": {}, + "writer": {} + } + ] + } } - readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME,reader) - writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME,writer) + readerTemplatePath = "%s/plugin/reader/%s/plugin_job_template.json" % (DATAX_HOME, reader) + writerTemplatePath = "%s/plugin/writer/%s/plugin_job_template.json" % (DATAX_HOME, writer) try: - readerPar = readPluginTemplate(readerTemplatePath); - except Exception, e: - print "Read reader[%s] template error: can\'t find file %s" % (reader,readerTemplatePath) + readerPar = readPluginTemplate(readerTemplatePath) + except: + print("Read reader[%s] template error: can\'t find file %s" % (reader, readerTemplatePath)) try: - writerPar = readPluginTemplate(writerTemplatePath); - except Exception, e: - print "Read writer[%s] template error: : can\'t find file %s" % (writer,writerTemplatePath) - jobTemplate['job']['content'][0]['reader'] = readerPar; - jobTemplate['job']['content'][0]['writer'] = writerPar; - print json.dumps(jobTemplate, indent=4, sort_keys=True) + writerPar = readPluginTemplate(writerTemplatePath) + except: + print("Read writer[%s] template error: : can\'t find file %s" % (writer, writerTemplatePath)) + jobTemplate['job']['content'][0]['reader'] = readerPar + jobTemplate['job']['content'][0]['writer'] = writerPar + print(json.dumps(jobTemplate, indent=4, sort_keys=True)) + def readPluginTemplate(plugin): with open(plugin, 'r') as f: - return json.load(f) + return json.load(f) + def isUrl(path): if not path: @@ -168,7 +182,7 @@ def buildStartCommand(options, args): if options.remoteDebug: tempJVMCommand = tempJVMCommand + " " + REMOTE_DEBUG_CONFIG - print 'local ip: ', getLocalIp() + print('local ip: ', getLocalIp()) if options.loglevel: tempJVMCommand = tempJVMCommand + " " + ("-Dloglevel=%s" % (options.loglevel)) @@ -198,11 +212,11 @@ def buildStartCommand(options, args): def printCopyright(): - print ''' + print(''' DataX (%s), From Alibaba ! Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved. -''' % DATAX_VERSION +''' % DATAX_VERSION) sys.stdout.flush() @@ -211,7 +225,7 @@ if __name__ == "__main__": parser = getOptionParser() options, args = parser.parse_args(sys.argv[1:]) if options.reader is not None and options.writer is not None: - generateJobConfigTemplate(options.reader,options.writer) + generateJobConfigTemplate(options.reader, options.writer) sys.exit(RET_STATE['OK']) if len(args) != 1: parser.print_help() diff --git a/core/src/main/java/com/alibaba/datax/core/Engine.java b/core/src/main/java/com/alibaba/datax/core/Engine.java index f80d792f..38342532 100755 --- a/core/src/main/java/com/alibaba/datax/core/Engine.java +++ b/core/src/main/java/com/alibaba/datax/core/Engine.java @@ -6,6 +6,7 @@ import com.alibaba.datax.common.spi.ErrorCode; import com.alibaba.datax.common.statistics.PerfTrace; import com.alibaba.datax.common.statistics.VMInfo; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.core.job.JobContainer; import com.alibaba.datax.core.taskgroup.TaskGroupContainer; import com.alibaba.datax.core.util.ConfigParser; @@ -73,7 +74,7 @@ public class Engine { boolean traceEnable = allConf.getBool(CoreConstant.DATAX_CORE_CONTAINER_TRACE_ENABLE, true); boolean perfReportEnable = allConf.getBool(CoreConstant.DATAX_CORE_REPORT_DATAX_PERFLOG, true); - //standlone模式的datax shell任务不进行汇报 + //standalone模式的 datax shell任务不进行汇报 if(instanceId == -1){ perfReportEnable = false; } @@ -135,6 +136,9 @@ public class Engine { RUNTIME_MODE = cl.getOptionValue("mode"); Configuration configuration = ConfigParser.parse(jobPath); + // 绑定i18n信息 + MessageSource.init(configuration); + MessageSource.reloadResourceBundle(Configuration.class); long jobId; if (!"-1".equalsIgnoreCase(jobIdString)) { diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings.properties new file mode 100644 index 00000000..97d46f07 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings.properties @@ -0,0 +1,5 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + +engine.1=\u975e standalone \u6a21\u5f0f\u5fc5\u987b\u5728 URL \u4e2d\u63d0\u4f9b\u6709\u6548\u7684 jobId. +engine.2=\n\n\u7ecfDataX\u667a\u80fd\u5206\u6790,\u8be5\u4efb\u52a1\u6700\u53ef\u80fd\u7684\u9519\u8bef\u539f\u56e0\u662f:\n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings_en_US.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings_en_US.properties new file mode 100644 index 00000000..7ff93838 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings_en_US.properties @@ -0,0 +1,5 @@ +very_like_yixiao=1{0}2{1}3 + +engine.1=A valid job ID must be provided in the URL for the non-standalone mode. +engine.2=\n\nThrough the intelligent analysis by DataX, the most likely error reason of this task is: \n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings_ja_JP.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..dfbad970 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings_ja_JP.properties @@ -0,0 +1,5 @@ +very_like_yixiao=1{0}2{1}3 + +engine.1=\u975e standalone \u6a21\u5f0f\u5fc5\u987b\u5728 URL \u4e2d\u63d0\u4f9b\u6709\u6548\u7684 jobId. +engine.2=\n\n\u7ecfDataX\u667a\u80fd\u5206\u6790,\u8be5\u4efb\u52a1\u6700\u53ef\u80fd\u7684\u9519\u8bef\u539f\u56e0\u662f:\n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_CN.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..97d46f07 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_CN.properties @@ -0,0 +1,5 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + +engine.1=\u975e standalone \u6a21\u5f0f\u5fc5\u987b\u5728 URL \u4e2d\u63d0\u4f9b\u6709\u6548\u7684 jobId. +engine.2=\n\n\u7ecfDataX\u667a\u80fd\u5206\u6790,\u8be5\u4efb\u52a1\u6700\u53ef\u80fd\u7684\u9519\u8bef\u539f\u56e0\u662f:\n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_HK.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..2587e0ab --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_HK.properties @@ -0,0 +1,10 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + +engine.1=\u975e standalone \u6a21\u5f0f\u5fc5\u987b\u5728 URL \u4e2d\u63d0\u4f9b\u6709\u6548\u7684 jobId. +engine.2=\n\n\u7ecfDataX\u667a\u80fd\u5206\u6790,\u8be5\u4efb\u52a1\u6700\u53ef\u80fd\u7684\u9519\u8bef\u539f\u56e0\u662f:\n{0} + +very_like_yixiao=一{0}二{1}三 + +engine.1=非 standalone 模式必須在 URL 中提供有效的 jobId. +engine.2=\n\n經DataX智能分析,該任務最可能的錯誤原因是:\n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_TW.properties b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..2587e0ab --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/LocalStrings_zh_TW.properties @@ -0,0 +1,10 @@ +very_like_yixiao=\u4e00{0}\u4e8c{1}\u4e09 + +engine.1=\u975e standalone \u6a21\u5f0f\u5fc5\u987b\u5728 URL \u4e2d\u63d0\u4f9b\u6709\u6548\u7684 jobId. +engine.2=\n\n\u7ecfDataX\u667a\u80fd\u5206\u6790,\u8be5\u4efb\u52a1\u6700\u53ef\u80fd\u7684\u9519\u8bef\u539f\u56e0\u662f:\n{0} + +very_like_yixiao=一{0}二{1}三 + +engine.1=非 standalone 模式必須在 URL 中提供有效的 jobId. +engine.2=\n\n經DataX智能分析,該任務最可能的錯誤原因是:\n{0} + diff --git a/core/src/main/java/com/alibaba/datax/core/statistics/plugin/task/util/DirtyRecord.java b/core/src/main/java/com/alibaba/datax/core/statistics/plugin/task/util/DirtyRecord.java index fdc5d821..1b0d5238 100755 --- a/core/src/main/java/com/alibaba/datax/core/statistics/plugin/task/util/DirtyRecord.java +++ b/core/src/main/java/com/alibaba/datax/core/statistics/plugin/task/util/DirtyRecord.java @@ -11,15 +11,18 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; public class DirtyRecord implements Record { private List columns = new ArrayList(); + private Map meta; public static DirtyRecord asDirtyRecord(final Record record) { DirtyRecord result = new DirtyRecord(); for (int i = 0; i < record.getColumnNumber(); i++) { result.addColumn(record.getColumn(i)); } + result.setMeta(record.getMeta()); return result; } @@ -65,6 +68,16 @@ public class DirtyRecord implements Record { "该方法不支持!"); } + @Override + public void setMeta(Map meta) { + this.meta = meta; + } + + @Override + public Map getMeta() { + return this.meta; + } + public List getColumns() { return columns; } @@ -119,6 +132,12 @@ class DirtyColumn extends Column { throw DataXException.asDataXException(FrameworkErrorCode.RUNTIME_ERROR, "该方法不支持!"); } + + @Override + public Date asDate(String dateFormat) { + throw DataXException.asDataXException(FrameworkErrorCode.RUNTIME_ERROR, + "该方法不支持!"); + } @Override public byte[] asBytes() { diff --git a/core/src/main/java/com/alibaba/datax/core/transport/record/DefaultRecord.java b/core/src/main/java/com/alibaba/datax/core/transport/record/DefaultRecord.java index 2598bc8c..c78a2a87 100755 --- a/core/src/main/java/com/alibaba/datax/core/transport/record/DefaultRecord.java +++ b/core/src/main/java/com/alibaba/datax/core/transport/record/DefaultRecord.java @@ -27,6 +27,8 @@ public class DefaultRecord implements Record { // 首先是Record本身需要的内存 private int memorySize = ClassSize.DefaultRecordHead; + private Map meta; + public DefaultRecord() { this.columns = new ArrayList(RECORD_AVERGAE_COLUMN_NUMBER); } @@ -83,6 +85,16 @@ public class DefaultRecord implements Record { return memorySize; } + @Override + public void setMeta(Map meta) { + this.meta = meta; + } + + @Override + public Map getMeta() { + return this.meta; + } + private void decrByteSize(final Column column) { if (null == column) { return; diff --git a/core/src/main/java/com/alibaba/datax/core/transport/record/TerminateRecord.java b/core/src/main/java/com/alibaba/datax/core/transport/record/TerminateRecord.java index 928609ab..7cb1cff1 100755 --- a/core/src/main/java/com/alibaba/datax/core/transport/record/TerminateRecord.java +++ b/core/src/main/java/com/alibaba/datax/core/transport/record/TerminateRecord.java @@ -3,6 +3,8 @@ package com.alibaba.datax.core.transport.record; import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; +import java.util.Map; + /** * 作为标示 生产者已经完成生产的标志 * @@ -41,6 +43,16 @@ public class TerminateRecord implements Record { return 0; } + @Override + public void setMeta(Map meta) { + + } + + @Override + public Map getMeta() { + return null; + } + @Override public void setColumn(int i, Column column) { return; diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings.properties new file mode 100644 index 00000000..a90f7829 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings.properties @@ -0,0 +1,58 @@ +configparser.1=\u63D2\u4EF6[{0},{1}]\u52A0\u8F7D\u5931\u8D25\uFF0C1s\u540E\u91CD\u8BD5... Exception:{2} +configparser.2=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.3=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.4=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.5=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u63D2\u4EF6\u52A0\u8F7D:{0} +configparser.6=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25,\u5B58\u5728\u91CD\u590D\u63D2\u4EF6:{0} + +dataxserviceutil.1=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u810F\u6570\u636E\u767E\u5206\u6BD4\u9650\u5236\u5E94\u8BE5\u5728[0.0, 1.0]\u4E4B\u95F4 +errorrecordchecker.2=\u810F\u6570\u636E\u6761\u6570\u73B0\u5728\u5E94\u8BE5\u4E3A\u975E\u8D1F\u6574\u6570 +errorrecordchecker.3=\u810F\u6570\u636E\u6761\u6570\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\u6761\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u4E86[{1}]\u6761. +errorrecordchecker.4=\u810F\u6570\u636E\u767E\u5206\u6BD4\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88C5\u9519\u8BEF, \u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.argument_error=DataX\u5F15\u64CE\u8FD0\u884C\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8E\u5185\u90E8\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 . +errorcode.runtime_error=DataX\u5F15\u64CE\u8FD0\u884C\u8FC7\u7A0B\u51FA\u9519\uFF0C\u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u9519\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.hook_load_error=\u52A0\u8F7D\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF\uFF0C\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u6267\u884C\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF +errorcode.plugin_install_error=DataX\u63D2\u4EF6\u5B89\u88C5\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_not_found=DataX\u63D2\u4EF6\u914D\u7F6E\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_init_error=DataX\u63D2\u4EF6\u521D\u59CB\u5316\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_runtime_error=DataX\u63D2\u4EF6\u8FD0\u884C\u65F6\u51FA\u9519, \u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.plugin_dirty_data_limit_exceed=DataX\u4F20\u8F93\u810F\u6570\u636E\u8D85\u8FC7\u7528\u6237\u9884\u671F\uFF0C\u8BE5\u9519\u8BEF\u901A\u5E38\u662F\u7531\u4E8E\u6E90\u7AEF\u6570\u636E\u5B58\u5728\u8F83\u591A\u4E1A\u52A1\u810F\u6570\u636E\u5BFC\u81F4\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5DataX\u6C47\u62A5\u7684\u810F\u6570\u636E\u65E5\u5FD7\u4FE1\u606F, \u6216\u8005\u60A8\u53EF\u4EE5\u9002\u5F53\u8C03\u5927\u810F\u6570\u636E\u9608\u503C . +errorcode.plugin_split_error=DataX\u63D2\u4EF6\u5207\u5206\u51FA\u9519, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5404\u4E2A\u63D2\u4EF6\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.kill_job_timeout_error=kill \u4EFB\u52A1\u8D85\u65F6\uFF0C\u8BF7\u8054\u7CFBPE\u89E3\u51B3 +errorcode.start_taskgroup_error=taskGroup\u542F\u52A8\u5931\u8D25,\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.call_datax_service_failed=\u8BF7\u6C42 DataX Service \u51FA\u9519. +errorcode.call_remote_failed=\u8FDC\u7A0B\u8C03\u7528\u5931\u8D25 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1}, STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 + + +secretutil.1=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.2=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u9519 +secretutil.4=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u9519 +secretutil.6=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.7=\u6784\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u9519 +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u5BC6\u94A5\u7684\u914D\u7F6E\u6587\u4EF6 +secretutil.9=\u8BFB\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6587\u4EF6\u51FA\u9519 +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u94A5\u4E3A\u7A7A\u7684\u60C5\u51B5 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u94A5\u5BF9\u5B58\u5728\u4E3A\u7A7A\u7684\u60C5\u51B5\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_en_US.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_en_US.properties new file mode 100644 index 00000000..8e01b153 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_en_US.properties @@ -0,0 +1,58 @@ +configparser.1=Failed to load the plug-in [{0},{1}]. We will retry in 1s... Exception: {2} +configparser.2=Failed to obtain the job configuration information: {0} +configparser.3=Failed to obtain the job configuration information: {0} +configparser.4=Failed to obtain the job configuration information: {0} +configparser.5=Failed to load the plug-in. Loading of the specific plug-in:{0} is not completed +configparser.6=Failed to load the plug-in. A duplicate plug-in: {0} exists + +dataxserviceutil.1=Exception in creating signature. NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=Exception in creating signature. InvalidKeyException, [{0}] +dataxserviceutil.3=Exception in creating signature. UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=The percentage of dirty data should be limited to within [0.0, 1.0] +errorrecordchecker.2=The number of dirty data entries should now be a nonnegative integer +errorrecordchecker.3=Check for the number of dirty data entries has not passed. The limit is [{0}] entries, but [{1}] entries have been captured. +errorrecordchecker.4=Check for the percentage of dirty data has not passed. The limit is [{0}], but [{1}] of dirty data has been captured. + + +errorcode.install_error=Error in installing DataX engine. Please contact your O&M team to solve the problem. +errorcode.argument_error=Error in running DataX engine. This problem is generally caused by an internal programming error. Please contact the DataX developer team to solve the problem. +errorcode.runtime_error=The DataX engine encountered an error during running. For the specific cause, refer to the error diagnosis after DataX stops running. +errorcode.config_error=Error in DataX engine configuration. This problem is generally caused by a DataX installation error. Please contact your O&M team to solve the problem. +errorcode.secret_error=Error in DataX engine encryption or decryption. This problem is generally caused by a DataX key configuration error. Please contact your O&M team to solve the problem. +errorcode.hook_load_error=Error in loading the external hook. This problem is generally caused by the DataX installation. +errorcode.hook_fail_error=Error in executing the external hook +errorcode.plugin_install_error=Error in installing DataX plug-in. This problem is generally caused by a DataX installation error. Please contact your O&M team to solve the problem. +errorcode.plugin_not_found=Error in DataX plug-in configuration. This problem is generally caused by a DataX installation error. Please contact your O&M team to solve the problem. +errorcode.plugin_init_error=Error in DataX plug-in initialization. This problem is generally caused by a DataX installation error. Please contact your O&M team to solve the problem. +errorcode.plugin_runtime_error=The DataX plug-in encountered an error during running. For the specific cause, refer to the error diagnosis after DataX stops running. +errorcode.plugin_dirty_data_limit_exceed=The dirty data transmitted by DataX exceeds user expectations. This error often occurs when a lot dirty data exists in the source data. Please carefully check the dirty data log information reported by DataX, or you can tune up the dirty data threshold value. +errorcode.plugin_split_error=Error in DataX plug-in slicing. This problem is generally caused by a programming error in some DataX plug-in. Please contact the DataX developer team to solve the problem. +errorcode.kill_job_timeout_error=The kill task times out. Please contact the PE to solve the problem +errorcode.start_taskgroup_error=Failed to start the task group. Please contact the DataX developer team to solve the problem +errorcode.call_datax_service_failed=Error in requesting DataX Service. +errorcode.call_remote_failed=Remote call failure +errorcode.killed_exit_value=The job has received a Kill command. + + +httpclientutil.1=Request address: {0}. Request method: {1}. STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=The remote interface returns -1. We will try again + + +secretutil.1=System programing error. Unsupported encryption type +secretutil.2=System programing error. Unsupported encryption type +secretutil.3=RSA encryption error +secretutil.4=RSA decryption error +secretutil.5=Triple DES encryption error +secretutil.6=RSA decryption error +secretutil.7=Error in building Triple DES key +secretutil.8=DataX configuration requires encryption and decryption, but unable to find the key configuration file +secretutil.9=Error in reading the encryption and decryption configuration file +secretutil.10=The version of the DataX-configured key is [{0}], but there is no configuration in the system. Error in task key configuration. The key version you configured does not exist +secretutil.11=The version of the DataX-configured key is [{0}], but there is no configuration in the system. There may be an error in task key configuration, or a problem in system maintenance +secretutil.12=The version of the DataX-configured key is [{0}], but there is no configuration in the system. Error in task key configuration. The key version you configured does not exist +secretutil.13=The version of the DataX-configured key is [{0}], but there is no configuration in the system. There may be an error in task key configuration, or a problem in system maintenance +secretutil.14=DataX configuration requires encryption and decryption, but some key in the configured key version [{0}] is empty +secretutil.15=DataX configuration requires encryption and decryption, but some configured public/private key pairs are empty and the version is [{0}] +secretutil.16=DataX configuration requires encryption and decryption, but the encryption and decryption configuration cannot be found + diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_ja_JP.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..7a0c95ac --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_ja_JP.properties @@ -0,0 +1,58 @@ +configparser.1=\u63D2\u4EF6[{0},{1}]\u52A0\u8F7D\u5931\u8D25\uFF0C1s\u540E\u91CD\u8BD5... Exception:{2} +configparser.2=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.3=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.4=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.5=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u63D2\u4EF6\u52A0\u8F7D:{0} +configparser.6=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25,\u5B58\u5728\u91CD\u590D\u63D2\u4EF6:{0} + +dataxserviceutil.1=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u810F\u6570\u636E\u767E\u5206\u6BD4\u9650\u5236\u5E94\u8BE5\u5728[0.0, 1.0]\u4E4B\u95F4 +errorrecordchecker.2=\u810F\u6570\u636E\u6761\u6570\u73B0\u5728\u5E94\u8BE5\u4E3A\u975E\u8D1F\u6574\u6570 +errorrecordchecker.3=\u810F\u6570\u636E\u6761\u6570\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\u6761\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u4E86[{1}]\u6761. +errorrecordchecker.4=\u810F\u6570\u636E\u767E\u5206\u6BD4\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88C5\u9519\u8BEF, \u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.argument_error=DataX\u5F15\u64CE\u8FD0\u884C\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8E\u5185\u90E8\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 . +errorcode.runtime_error=DataX\u5F15\u64CE\u8FD0\u884C\u8FC7\u7A0B\u51FA\u9519\uFF0C\u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u9519\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.hook_load_error=\u52A0\u8F7D\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF\uFF0C\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u6267\u884C\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF +errorcode.plugin_install_error=DataX\u63D2\u4EF6\u5B89\u88C5\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_not_found=DataX\u63D2\u4EF6\u914D\u7F6E\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_init_error=DataX\u63D2\u4EF6\u521D\u59CB\u5316\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_runtime_error=DataX\u63D2\u4EF6\u8FD0\u884C\u65F6\u51FA\u9519, \u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.plugin_dirty_data_limit_exceed=DataX\u4F20\u8F93\u810F\u6570\u636E\u8D85\u8FC7\u7528\u6237\u9884\u671F\uFF0C\u8BE5\u9519\u8BEF\u901A\u5E38\u662F\u7531\u4E8E\u6E90\u7AEF\u6570\u636E\u5B58\u5728\u8F83\u591A\u4E1A\u52A1\u810F\u6570\u636E\u5BFC\u81F4\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5DataX\u6C47\u62A5\u7684\u810F\u6570\u636E\u65E5\u5FD7\u4FE1\u606F, \u6216\u8005\u60A8\u53EF\u4EE5\u9002\u5F53\u8C03\u5927\u810F\u6570\u636E\u9608\u503C . +errorcode.plugin_split_error=DataX\u63D2\u4EF6\u5207\u5206\u51FA\u9519, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5404\u4E2A\u63D2\u4EF6\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.kill_job_timeout_error=kill \u4EFB\u52A1\u8D85\u65F6\uFF0C\u8BF7\u8054\u7CFBPE\u89E3\u51B3 +errorcode.start_taskgroup_error=taskGroup\u542F\u52A8\u5931\u8D25,\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.call_datax_service_failed=\u8BF7\u6C42 DataX Service \u51FA\u9519. +errorcode.call_remote_failed=\u8FDC\u7A0B\u8C03\u7528\u5931\u8D25 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 + + +secretutil.1=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.2=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u9519 +secretutil.4=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u9519 +secretutil.6=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.7=\u6784\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u9519 +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u5BC6\u94A5\u7684\u914D\u7F6E\u6587\u4EF6 +secretutil.9=\u8BFB\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6587\u4EF6\u51FA\u9519 +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u94A5\u4E3A\u7A7A\u7684\u60C5\u51B5 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u94A5\u5BF9\u5B58\u5728\u4E3A\u7A7A\u7684\u60C5\u51B5\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_CN.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..7a0c95ac --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_CN.properties @@ -0,0 +1,58 @@ +configparser.1=\u63D2\u4EF6[{0},{1}]\u52A0\u8F7D\u5931\u8D25\uFF0C1s\u540E\u91CD\u8BD5... Exception:{2} +configparser.2=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.3=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.4=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.5=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u63D2\u4EF6\u52A0\u8F7D:{0} +configparser.6=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25,\u5B58\u5728\u91CD\u590D\u63D2\u4EF6:{0} + +dataxserviceutil.1=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u810F\u6570\u636E\u767E\u5206\u6BD4\u9650\u5236\u5E94\u8BE5\u5728[0.0, 1.0]\u4E4B\u95F4 +errorrecordchecker.2=\u810F\u6570\u636E\u6761\u6570\u73B0\u5728\u5E94\u8BE5\u4E3A\u975E\u8D1F\u6574\u6570 +errorrecordchecker.3=\u810F\u6570\u636E\u6761\u6570\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\u6761\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u4E86[{1}]\u6761. +errorrecordchecker.4=\u810F\u6570\u636E\u767E\u5206\u6BD4\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88C5\u9519\u8BEF, \u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.argument_error=DataX\u5F15\u64CE\u8FD0\u884C\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8E\u5185\u90E8\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 . +errorcode.runtime_error=DataX\u5F15\u64CE\u8FD0\u884C\u8FC7\u7A0B\u51FA\u9519\uFF0C\u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u9519\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.hook_load_error=\u52A0\u8F7D\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF\uFF0C\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u6267\u884C\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF +errorcode.plugin_install_error=DataX\u63D2\u4EF6\u5B89\u88C5\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_not_found=DataX\u63D2\u4EF6\u914D\u7F6E\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_init_error=DataX\u63D2\u4EF6\u521D\u59CB\u5316\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_runtime_error=DataX\u63D2\u4EF6\u8FD0\u884C\u65F6\u51FA\u9519, \u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.plugin_dirty_data_limit_exceed=DataX\u4F20\u8F93\u810F\u6570\u636E\u8D85\u8FC7\u7528\u6237\u9884\u671F\uFF0C\u8BE5\u9519\u8BEF\u901A\u5E38\u662F\u7531\u4E8E\u6E90\u7AEF\u6570\u636E\u5B58\u5728\u8F83\u591A\u4E1A\u52A1\u810F\u6570\u636E\u5BFC\u81F4\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5DataX\u6C47\u62A5\u7684\u810F\u6570\u636E\u65E5\u5FD7\u4FE1\u606F, \u6216\u8005\u60A8\u53EF\u4EE5\u9002\u5F53\u8C03\u5927\u810F\u6570\u636E\u9608\u503C . +errorcode.plugin_split_error=DataX\u63D2\u4EF6\u5207\u5206\u51FA\u9519, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5404\u4E2A\u63D2\u4EF6\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.kill_job_timeout_error=kill \u4EFB\u52A1\u8D85\u65F6\uFF0C\u8BF7\u8054\u7CFBPE\u89E3\u51B3 +errorcode.start_taskgroup_error=taskGroup\u542F\u52A8\u5931\u8D25,\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.call_datax_service_failed=\u8BF7\u6C42 DataX Service \u51FA\u9519. +errorcode.call_remote_failed=\u8FDC\u7A0B\u8C03\u7528\u5931\u8D25 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 + + +secretutil.1=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.2=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u9519 +secretutil.4=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u9519 +secretutil.6=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.7=\u6784\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u9519 +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u5BC6\u94A5\u7684\u914D\u7F6E\u6587\u4EF6 +secretutil.9=\u8BFB\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6587\u4EF6\u51FA\u9519 +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u94A5\u4E3A\u7A7A\u7684\u60C5\u51B5 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u94A5\u5BF9\u5B58\u5728\u4E3A\u7A7A\u7684\u60C5\u51B5\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_HK.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..59ce9fd9 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_HK.properties @@ -0,0 +1,116 @@ +configparser.1=\u63D2\u4EF6[{0},{1}]\u52A0\u8F7D\u5931\u8D25\uFF0C1s\u540E\u91CD\u8BD5... Exception:{2} +configparser.2=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.3=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.4=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.5=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u63D2\u4EF6\u52A0\u8F7D:{0} +configparser.6=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25,\u5B58\u5728\u91CD\u590D\u63D2\u4EF6:{0} + +dataxserviceutil.1=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u810F\u6570\u636E\u767E\u5206\u6BD4\u9650\u5236\u5E94\u8BE5\u5728[0.0, 1.0]\u4E4B\u95F4 +errorrecordchecker.2=\u810F\u6570\u636E\u6761\u6570\u73B0\u5728\u5E94\u8BE5\u4E3A\u975E\u8D1F\u6574\u6570 +errorrecordchecker.3=\u810F\u6570\u636E\u6761\u6570\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\u6761\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u4E86[{1}]\u6761. +errorrecordchecker.4=\u810F\u6570\u636E\u767E\u5206\u6BD4\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88C5\u9519\u8BEF, \u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.argument_error=DataX\u5F15\u64CE\u8FD0\u884C\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8E\u5185\u90E8\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 . +errorcode.runtime_error=DataX\u5F15\u64CE\u8FD0\u884C\u8FC7\u7A0B\u51FA\u9519\uFF0C\u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u9519\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.hook_load_error=\u52A0\u8F7D\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF\uFF0C\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u6267\u884C\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF +errorcode.plugin_install_error=DataX\u63D2\u4EF6\u5B89\u88C5\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_not_found=DataX\u63D2\u4EF6\u914D\u7F6E\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_init_error=DataX\u63D2\u4EF6\u521D\u59CB\u5316\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_runtime_error=DataX\u63D2\u4EF6\u8FD0\u884C\u65F6\u51FA\u9519, \u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.plugin_dirty_data_limit_exceed=DataX\u4F20\u8F93\u810F\u6570\u636E\u8D85\u8FC7\u7528\u6237\u9884\u671F\uFF0C\u8BE5\u9519\u8BEF\u901A\u5E38\u662F\u7531\u4E8E\u6E90\u7AEF\u6570\u636E\u5B58\u5728\u8F83\u591A\u4E1A\u52A1\u810F\u6570\u636E\u5BFC\u81F4\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5DataX\u6C47\u62A5\u7684\u810F\u6570\u636E\u65E5\u5FD7\u4FE1\u606F, \u6216\u8005\u60A8\u53EF\u4EE5\u9002\u5F53\u8C03\u5927\u810F\u6570\u636E\u9608\u503C . +errorcode.plugin_split_error=DataX\u63D2\u4EF6\u5207\u5206\u51FA\u9519, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5404\u4E2A\u63D2\u4EF6\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.kill_job_timeout_error=kill \u4EFB\u52A1\u8D85\u65F6\uFF0C\u8BF7\u8054\u7CFBPE\u89E3\u51B3 +errorcode.start_taskgroup_error=taskGroup\u542F\u52A8\u5931\u8D25,\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.call_datax_service_failed=\u8BF7\u6C42 DataX Service \u51FA\u9519. +errorcode.call_remote_failed=\u8FDC\u7A0B\u8C03\u7528\u5931\u8D25 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 + + +secretutil.1=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.2=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u9519 +secretutil.4=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u9519 +secretutil.6=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.7=\u6784\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u9519 +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u5BC6\u94A5\u7684\u914D\u7F6E\u6587\u4EF6 +secretutil.9=\u8BFB\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6587\u4EF6\u51FA\u9519 +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u94A5\u4E3A\u7A7A\u7684\u60C5\u51B5 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u94A5\u5BF9\u5B58\u5728\u4E3A\u7A7A\u7684\u60C5\u51B5\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + +configparser.1=\u5916\u639B\u7A0B\u5F0F[{0},{1}]\u8F09\u5165\u5931\u6557\uFF0C1s\u5F8C\u91CD\u8A66... Exception:{2} +configparser.2=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.3=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.4=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.5=\u5916\u639B\u7A0B\u5F0F\u8F09\u5165\u5931\u6557\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u5916\u639B\u7A0B\u5F0F\u8F09\u5165:{0} +configparser.6=\u5916\u639B\u7A0B\u5F0F\u8F09\u5165\u5931\u6557,\u5B58\u5728\u91CD\u8907\u5916\u639B\u7A0B\u5F0F:{0} + +dataxserviceutil.1=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u9AD2\u6578\u64DA\u767E\u5206\u6BD4\u9650\u5236\u61C9\u8A72\u5728[0.0, 1.0]\u4E4B\u9593 +errorrecordchecker.2=\u9AD2\u6578\u64DA\u689D\u6578\u73FE\u5728\u61C9\u8A72\u70BA\u975E\u8CA0\u6574\u6578 +errorrecordchecker.3=\u9AD2\u6578\u64DA\u689D\u6578\u6AA2\u67E5\u4E0D\u901A\u904E\uFF0C\u9650\u5236\u662F[{0}]\u689D\uFF0C\u4F46\u5BE6\u969B\u4E0A\u6355\u7372\u4E86[{1}]\u689D. +errorrecordchecker.4=\u9AD2\u6578\u64DA\u767E\u5206\u6BD4\u6AA2\u67E5\u4E0D\u901A\u904E\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5BE6\u969B\u4E0A\u6355\u7372\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88DD\u932F\u8AA4, \u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.argument_error=DataX\u5F15\u64CE\u904B\u884C\u932F\u8AA4\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BC\u5167\u90E8\u7DE8\u7A0B\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A . +errorcode.runtime_error=DataX\u5F15\u64CE\u904B\u884C\u904E\u7A0B\u51FA\u932F\uFF0C\u5177\u9AD4\u539F\u56E0\u8ACB\u53C3\u770BDataX\u904B\u884C\u7D50\u675F\u6642\u7684\u932F\u8AA4\u8A3A\u65B7\u8CC7\u8A0A . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u932F\u8AA4\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u932F\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.hook_load_error=\u8F09\u5165\u5916\u90E8Hook\u51FA\u73FE\u932F\u8AA4\uFF0C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u57F7\u884C\u5916\u90E8Hook\u51FA\u73FE\u932F\u8AA4 +errorcode.plugin_install_error=DataX\u5916\u639B\u7A0B\u5F0F\u5B89\u88DD\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_not_found=DataX\u5916\u639B\u7A0B\u5F0F\u914D\u7F6E\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_init_error=DataX\u5916\u639B\u7A0B\u5F0F\u521D\u59CB\u5316\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_runtime_error=DataX\u5916\u639B\u7A0B\u5F0F\u904B\u884C\u6642\u51FA\u932F, \u5177\u9AD4\u539F\u56E0\u8ACB\u53C3\u770BDataX\u904B\u884C\u7D50\u675F\u6642\u7684\u932F\u8AA4\u8A3A\u65B7\u8CC7\u8A0A . +errorcode.plugin_dirty_data_limit_exceed=DataX\u50B3\u8F38\u9AD2\u6578\u64DA\u8D85\u904E\u7528\u6236\u9810\u671F\uFF0C\u8A72\u932F\u8AA4\u901A\u5E38\u662F\u7531\u65BC\u6E90\u7AEF\u6578\u64DA\u5B58\u5728\u8F03\u591A\u696D\u52D9\u9AD2\u6578\u64DA\u5C0E\u81F4\uFF0C\u8ACB\u4ED4\u7D30\u6AA2\u67E5DataX\u5F59\u5831\u7684\u9AD2\u6578\u64DA\u65E5\u8A8C\u8CC7\u8A0A, \u6216\u8005\u60A8\u53EF\u4EE5\u9069\u7576\u8ABF\u5927\u9AD2\u6578\u64DA\u95BE\u503C . +errorcode.plugin_split_error=DataX\u5916\u639B\u7A0B\u5F0F\u5207\u5206\u51FA\u932F, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5404\u500B\u5916\u639B\u7A0B\u5F0F\u7DE8\u7A0B\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A +errorcode.kill_job_timeout_error=kill \u4EFB\u52D9\u903E\u6642\uFF0C\u8ACB\u806F\u7D61PE\u89E3\u6C7A +errorcode.start_taskgroup_error=taskGroup\u555F\u52D5\u5931\u6557,\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A +errorcode.call_datax_service_failed=\u8ACB\u6C42 DataX Service \u51FA\u932F. +errorcode.call_remote_failed=\u9060\u7A0B\u8ABF\u7528\u5931\u6557 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8ACB\u6C42\u5730\u5740\uFF1A{0}, \u8ACB\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u9060\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C07\u91CD\u8A66 + + +secretutil.1=\u7CFB\u7D71\u7DE8\u7A0B\u932F\u8AA4,\u4E0D\u652F\u63F4\u7684\u52A0\u5BC6\u985E\u578B +secretutil.2=\u7CFB\u7D71\u7DE8\u7A0B\u932F\u8AA4,\u4E0D\u652F\u63F4\u7684\u52A0\u5BC6\u985E\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u932F +secretutil.4=rsa\u89E3\u5BC6\u51FA\u932F +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u932F +secretutil.6=rsa\u89E3\u5BC6\u51FA\u932F +secretutil.7=\u69CB\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u932F +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u7121\u6CD5\u627E\u5230\u5BC6\u9470\u7684\u914D\u7F6E\u6A94\u6848 +secretutil.9=\u8B80\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6A94\u6848\u51FA\u932F +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7D71\u7DAD\u8B77\u554F\u984C +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7D71\u7DAD\u8B77\u554F\u984C +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u9470\u70BA\u7A7A\u7684\u60C5\u6CC1 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u9470\u5C0D\u5B58\u5728\u70BA\u7A7A\u7684\u60C5\u6CC1\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u7121\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + diff --git a/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_TW.properties b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..59ce9fd9 --- /dev/null +++ b/core/src/main/java/com/alibaba/datax/core/util/LocalStrings_zh_TW.properties @@ -0,0 +1,116 @@ +configparser.1=\u63D2\u4EF6[{0},{1}]\u52A0\u8F7D\u5931\u8D25\uFF0C1s\u540E\u91CD\u8BD5... Exception:{2} +configparser.2=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.3=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.4=\u83B7\u53D6\u4F5C\u4E1A\u914D\u7F6E\u4FE1\u606F\u5931\u8D25:{0} +configparser.5=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u63D2\u4EF6\u52A0\u8F7D:{0} +configparser.6=\u63D2\u4EF6\u52A0\u8F7D\u5931\u8D25,\u5B58\u5728\u91CD\u590D\u63D2\u4EF6:{0} + +dataxserviceutil.1=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u521B\u5EFA\u7B7E\u540D\u5F02\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u810F\u6570\u636E\u767E\u5206\u6BD4\u9650\u5236\u5E94\u8BE5\u5728[0.0, 1.0]\u4E4B\u95F4 +errorrecordchecker.2=\u810F\u6570\u636E\u6761\u6570\u73B0\u5728\u5E94\u8BE5\u4E3A\u975E\u8D1F\u6574\u6570 +errorrecordchecker.3=\u810F\u6570\u636E\u6761\u6570\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\u6761\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u4E86[{1}]\u6761. +errorrecordchecker.4=\u810F\u6570\u636E\u767E\u5206\u6BD4\u68C0\u67E5\u4E0D\u901A\u8FC7\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5B9E\u9645\u4E0A\u6355\u83B7\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88C5\u9519\u8BEF, \u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.argument_error=DataX\u5F15\u64CE\u8FD0\u884C\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8E\u5185\u90E8\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 . +errorcode.runtime_error=DataX\u5F15\u64CE\u8FD0\u884C\u8FC7\u7A0B\u51FA\u9519\uFF0C\u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u9519\u8BEF\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u9519\uFF0C\u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.hook_load_error=\u52A0\u8F7D\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF\uFF0C\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u6267\u884C\u5916\u90E8Hook\u51FA\u73B0\u9519\u8BEF +errorcode.plugin_install_error=DataX\u63D2\u4EF6\u5B89\u88C5\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_not_found=DataX\u63D2\u4EF6\u914D\u7F6E\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_init_error=DataX\u63D2\u4EF6\u521D\u59CB\u5316\u9519\u8BEF, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5B89\u88C5\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFB\u60A8\u7684\u8FD0\u7EF4\u89E3\u51B3 . +errorcode.plugin_runtime_error=DataX\u63D2\u4EF6\u8FD0\u884C\u65F6\u51FA\u9519, \u5177\u4F53\u539F\u56E0\u8BF7\u53C2\u770BDataX\u8FD0\u884C\u7ED3\u675F\u65F6\u7684\u9519\u8BEF\u8BCA\u65AD\u4FE1\u606F . +errorcode.plugin_dirty_data_limit_exceed=DataX\u4F20\u8F93\u810F\u6570\u636E\u8D85\u8FC7\u7528\u6237\u9884\u671F\uFF0C\u8BE5\u9519\u8BEF\u901A\u5E38\u662F\u7531\u4E8E\u6E90\u7AEF\u6570\u636E\u5B58\u5728\u8F83\u591A\u4E1A\u52A1\u810F\u6570\u636E\u5BFC\u81F4\uFF0C\u8BF7\u4ED4\u7EC6\u68C0\u67E5DataX\u6C47\u62A5\u7684\u810F\u6570\u636E\u65E5\u5FD7\u4FE1\u606F, \u6216\u8005\u60A8\u53EF\u4EE5\u9002\u5F53\u8C03\u5927\u810F\u6570\u636E\u9608\u503C . +errorcode.plugin_split_error=DataX\u63D2\u4EF6\u5207\u5206\u51FA\u9519, \u8BE5\u95EE\u9898\u901A\u5E38\u662F\u7531\u4E8EDataX\u5404\u4E2A\u63D2\u4EF6\u7F16\u7A0B\u9519\u8BEF\u5F15\u8D77\uFF0C\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.kill_job_timeout_error=kill \u4EFB\u52A1\u8D85\u65F6\uFF0C\u8BF7\u8054\u7CFBPE\u89E3\u51B3 +errorcode.start_taskgroup_error=taskGroup\u542F\u52A8\u5931\u8D25,\u8BF7\u8054\u7CFBDataX\u5F00\u53D1\u56E2\u961F\u89E3\u51B3 +errorcode.call_datax_service_failed=\u8BF7\u6C42 DataX Service \u51FA\u9519. +errorcode.call_remote_failed=\u8FDC\u7A0B\u8C03\u7528\u5931\u8D25 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8BF7\u6C42\u5730\u5740\uFF1A{0}, \u8BF7\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u8FDC\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C06\u91CD\u8BD5 + + +secretutil.1=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.2=\u7CFB\u7EDF\u7F16\u7A0B\u9519\u8BEF,\u4E0D\u652F\u6301\u7684\u52A0\u5BC6\u7C7B\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u9519 +secretutil.4=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u9519 +secretutil.6=rsa\u89E3\u5BC6\u51FA\u9519 +secretutil.7=\u6784\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u9519 +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u5BC6\u94A5\u7684\u914D\u7F6E\u6587\u4EF6 +secretutil.9=\u8BFB\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6587\u4EF6\u51FA\u9519 +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C\u4E3A[{0}]\uFF0C\u4F46\u5728\u7CFB\u7EDF\u4E2D\u6CA1\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52A1\u5BC6\u94A5\u914D\u7F6E\u9519\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7EDF\u7EF4\u62A4\u95EE\u9898 +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u94A5\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u94A5\u4E3A\u7A7A\u7684\u60C5\u51B5 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u94A5\u5BF9\u5B58\u5728\u4E3A\u7A7A\u7684\u60C5\u51B5\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u65E0\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + +configparser.1=\u5916\u639B\u7A0B\u5F0F[{0},{1}]\u8F09\u5165\u5931\u6557\uFF0C1s\u5F8C\u91CD\u8A66... Exception:{2} +configparser.2=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.3=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.4=\u7372\u53D6\u4F5C\u696D\u914D\u7F6E\u8CC7\u8A0A\u5931\u6557:{0} +configparser.5=\u5916\u639B\u7A0B\u5F0F\u8F09\u5165\u5931\u6557\uFF0C\u672A\u5B8C\u6210\u6307\u5B9A\u5916\u639B\u7A0B\u5F0F\u8F09\u5165:{0} +configparser.6=\u5916\u639B\u7A0B\u5F0F\u8F09\u5165\u5931\u6557,\u5B58\u5728\u91CD\u8907\u5916\u639B\u7A0B\u5F0F:{0} + +dataxserviceutil.1=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38NoSuchAlgorithmException, [{0}] +dataxserviceutil.2=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38InvalidKeyException, [{0}] +dataxserviceutil.3=\u5EFA\u7ACB\u7C3D\u540D\u7570\u5E38UnsupportedEncodingException, [{0}] + +errorrecordchecker.1=\u9AD2\u6578\u64DA\u767E\u5206\u6BD4\u9650\u5236\u61C9\u8A72\u5728[0.0, 1.0]\u4E4B\u9593 +errorrecordchecker.2=\u9AD2\u6578\u64DA\u689D\u6578\u73FE\u5728\u61C9\u8A72\u70BA\u975E\u8CA0\u6574\u6578 +errorrecordchecker.3=\u9AD2\u6578\u64DA\u689D\u6578\u6AA2\u67E5\u4E0D\u901A\u904E\uFF0C\u9650\u5236\u662F[{0}]\u689D\uFF0C\u4F46\u5BE6\u969B\u4E0A\u6355\u7372\u4E86[{1}]\u689D. +errorrecordchecker.4=\u9AD2\u6578\u64DA\u767E\u5206\u6BD4\u6AA2\u67E5\u4E0D\u901A\u904E\uFF0C\u9650\u5236\u662F[{0}]\uFF0C\u4F46\u5BE6\u969B\u4E0A\u6355\u7372\u5230[{1}]. + + +errorcode.install_error=DataX\u5F15\u64CE\u5B89\u88DD\u932F\u8AA4, \u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.argument_error=DataX\u5F15\u64CE\u904B\u884C\u932F\u8AA4\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BC\u5167\u90E8\u7DE8\u7A0B\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A . +errorcode.runtime_error=DataX\u5F15\u64CE\u904B\u884C\u904E\u7A0B\u51FA\u932F\uFF0C\u5177\u9AD4\u539F\u56E0\u8ACB\u53C3\u770BDataX\u904B\u884C\u7D50\u675F\u6642\u7684\u932F\u8AA4\u8A3A\u65B7\u8CC7\u8A0A . +errorcode.config_error=DataX\u5F15\u64CE\u914D\u7F6E\u932F\u8AA4\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.secret_error=DataX\u5F15\u64CE\u52A0\u89E3\u5BC6\u51FA\u932F\uFF0C\u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.hook_load_error=\u8F09\u5165\u5916\u90E8Hook\u51FA\u73FE\u932F\u8AA4\uFF0C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u5F15\u8D77\u7684 +errorcode.hook_fail_error=\u57F7\u884C\u5916\u90E8Hook\u51FA\u73FE\u932F\u8AA4 +errorcode.plugin_install_error=DataX\u5916\u639B\u7A0B\u5F0F\u5B89\u88DD\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_not_found=DataX\u5916\u639B\u7A0B\u5F0F\u914D\u7F6E\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_init_error=DataX\u5916\u639B\u7A0B\u5F0F\u521D\u59CB\u5316\u932F\u8AA4, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5B89\u88DD\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61\u60A8\u7684\u904B\u7DAD\u89E3\u6C7A . +errorcode.plugin_runtime_error=DataX\u5916\u639B\u7A0B\u5F0F\u904B\u884C\u6642\u51FA\u932F, \u5177\u9AD4\u539F\u56E0\u8ACB\u53C3\u770BDataX\u904B\u884C\u7D50\u675F\u6642\u7684\u932F\u8AA4\u8A3A\u65B7\u8CC7\u8A0A . +errorcode.plugin_dirty_data_limit_exceed=DataX\u50B3\u8F38\u9AD2\u6578\u64DA\u8D85\u904E\u7528\u6236\u9810\u671F\uFF0C\u8A72\u932F\u8AA4\u901A\u5E38\u662F\u7531\u65BC\u6E90\u7AEF\u6578\u64DA\u5B58\u5728\u8F03\u591A\u696D\u52D9\u9AD2\u6578\u64DA\u5C0E\u81F4\uFF0C\u8ACB\u4ED4\u7D30\u6AA2\u67E5DataX\u5F59\u5831\u7684\u9AD2\u6578\u64DA\u65E5\u8A8C\u8CC7\u8A0A, \u6216\u8005\u60A8\u53EF\u4EE5\u9069\u7576\u8ABF\u5927\u9AD2\u6578\u64DA\u95BE\u503C . +errorcode.plugin_split_error=DataX\u5916\u639B\u7A0B\u5F0F\u5207\u5206\u51FA\u932F, \u8A72\u554F\u984C\u901A\u5E38\u662F\u7531\u65BCDataX\u5404\u500B\u5916\u639B\u7A0B\u5F0F\u7DE8\u7A0B\u932F\u8AA4\u5F15\u8D77\uFF0C\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A +errorcode.kill_job_timeout_error=kill \u4EFB\u52D9\u903E\u6642\uFF0C\u8ACB\u806F\u7D61PE\u89E3\u6C7A +errorcode.start_taskgroup_error=taskGroup\u555F\u52D5\u5931\u6557,\u8ACB\u806F\u7D61DataX\u958B\u767C\u5718\u968A\u89E3\u6C7A +errorcode.call_datax_service_failed=\u8ACB\u6C42 DataX Service \u51FA\u932F. +errorcode.call_remote_failed=\u9060\u7A0B\u8ABF\u7528\u5931\u6557 +errorcode.killed_exit_value=Job \u6536\u5230\u4E86 Kill \u547D\u4EE4. + + +httpclientutil.1=\u8ACB\u6C42\u5730\u5740\uFF1A{0}, \u8ACB\u6C42\u65B9\u6CD5\uFF1A{1},STATUS CODE = {2}, Response Entity: {3} +httpclientutil.2=\u9060\u7A0B\u63A5\u53E3\u8FD4\u56DE-1,\u5C07\u91CD\u8A66 + + +secretutil.1=\u7CFB\u7D71\u7DE8\u7A0B\u932F\u8AA4,\u4E0D\u652F\u63F4\u7684\u52A0\u5BC6\u985E\u578B +secretutil.2=\u7CFB\u7D71\u7DE8\u7A0B\u932F\u8AA4,\u4E0D\u652F\u63F4\u7684\u52A0\u5BC6\u985E\u578B +secretutil.3=rsa\u52A0\u5BC6\u51FA\u932F +secretutil.4=rsa\u89E3\u5BC6\u51FA\u932F +secretutil.5=3\u91CDDES\u52A0\u5BC6\u51FA\u932F +secretutil.6=rsa\u89E3\u5BC6\u51FA\u932F +secretutil.7=\u69CB\u5EFA\u4E09\u91CDDES\u5BC6\u5319\u51FA\u932F +secretutil.8=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u7121\u6CD5\u627E\u5230\u5BC6\u9470\u7684\u914D\u7F6E\u6A94\u6848 +secretutil.9=\u8B80\u53D6\u52A0\u89E3\u5BC6\u914D\u7F6E\u6A94\u6848\u51FA\u932F +secretutil.10=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C +secretutil.11=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7D71\u7DAD\u8B77\u554F\u984C +secretutil.12=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E0D\u5B58\u5728\u60A8\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C +secretutil.13=DataX\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C\u70BA[{0}]\uFF0C\u4F46\u5728\u7CFB\u7D71\u4E2D\u6C92\u6709\u914D\u7F6E\uFF0C\u53EF\u80FD\u662F\u4EFB\u52D9\u5BC6\u9470\u914D\u7F6E\u932F\u8AA4\uFF0C\u4E5F\u53EF\u80FD\u662F\u7CFB\u7D71\u7DAD\u8B77\u554F\u984C +secretutil.14=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u5BC6\u9470\u7248\u672C[{0}]\u5B58\u5728\u5BC6\u9470\u70BA\u7A7A\u7684\u60C5\u6CC1 +secretutil.15=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u914D\u7F6E\u7684\u516C\u79C1\u9470\u5C0D\u5B58\u5728\u70BA\u7A7A\u7684\u60C5\u6CC1\uFF0C\u7248\u672C[{0}] +secretutil.16=DataX\u914D\u7F6E\u8981\u6C42\u52A0\u89E3\u5BC6\uFF0C\u4F46\u7121\u6CD5\u627E\u5230\u52A0\u89E3\u5BC6\u914D\u7F6E + diff --git a/drdsreader/doc/drdsreader.md b/drdsreader/doc/drdsreader.md index 25df9200..c54e6bd1 100644 --- a/drdsreader/doc/drdsreader.md +++ b/drdsreader/doc/drdsreader.md @@ -50,7 +50,7 @@ DRDS的插件目前DataX只适配了Mysql引擎的场景,DRDS对于DataX而言 // 数据库连接密码 "password": "root", "column": [ - "id","name" + "id","name" ], "connection": [ { diff --git a/hbase11xsqlreader/src/main/resources/plugin.json b/hbase11xsqlreader/src/main/resources/plugin.json index e245ca27..162f5712 100644 --- a/hbase11xsqlreader/src/main/resources/plugin.json +++ b/hbase11xsqlreader/src/main/resources/plugin.json @@ -2,6 +2,6 @@ "name": "hbase11xsqlreader", "class": "com.alibaba.datax.plugin.reader.hbase11xsqlreader.HbaseSQLReader", "description": "useScene: prod. mechanism: Scan to read data.", - "developer": "liwei.li, bug reported to : liwei.li@alibaba-inc.com" + "developer": "alibaba" } diff --git a/hbase11xwriter/doc/hbase11xwriter.md b/hbase11xwriter/doc/hbase11xwriter.md index ff20abe9..969f2e47 100644 --- a/hbase11xwriter/doc/hbase11xwriter.md +++ b/hbase11xwriter/doc/hbase11xwriter.md @@ -203,19 +203,20 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase字段。index:指定该列对应reader端column的索引,从0开始;name:指定hbase表中的列,必须为 列族:列名 的格式;type:指定写入数据类型,用于转换HBase byte[]。配置格式如下: ``` -"column": [ - { - "index":1, - "name": "cf1:q1", - "type": "string" - }, - { - "index":2, - "name": "cf1:q2", - "type": "string" - } - ] - + + "column": [ + { + "index":1, + "name": "cf1:q1", + "type": "string" + }, + { + "index":2, + "name": "cf1:q2", + "type": "string" + } + ] + ``` * 必选:是
@@ -227,17 +228,17 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:要写入的hbase的rowkey列。index:指定该列对应reader端column的索引,从0开始,若为常量index为-1;type:指定写入数据类型,用于转换HBase byte[];value:配置常量,常作为多个字段的拼接符。hbasewriter会将rowkeyColumn中所有列按照配置顺序进行拼接作为写入hbase的rowkey,不能全为常量。配置格式如下: ``` -"rowkeyColumn": [ - { - "index":0, - "type":"string" - }, - { - "index":-1, - "type":"string", - "value":"_" - } - ] + "rowkeyColumn": [ + { + "index":0, + "type":"string" + }, + { + "index":-1, + "type":"string", + "value":"_" + } + ] ``` @@ -250,19 +251,19 @@ HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,Hba * 描述:指定写入hbase的时间戳。支持:当前时间、指定时间列,指定时间,三者选一。若不配置表示用当前时间。index:指定对应reader端column的索引,从0开始,需保证能转换为long,若是Date类型,会尝试用yyyy-MM-dd HH:mm:ss和yyyy-MM-dd HH:mm:ss SSS去解析;若为指定时间index为-1;value:指定时间的值,long值。配置格式如下: ``` -"versionColumn":{ - "index":1 -} + "versionColumn":{ + "index":1 + } ``` 或者 ``` -"versionColumn":{ - "index":-1, - "value":123456789 -} + "versionColumn":{ + "index":-1, + "value":123456789 + } ``` diff --git a/hdfsreader/pom.xml b/hdfsreader/pom.xml index 5d07dc25..a5c2da2c 100644 --- a/hdfsreader/pom.xml +++ b/hdfsreader/pom.xml @@ -16,6 +16,17 @@ 2.7.1 + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -51,6 +62,11 @@ hadoop-yarn-common ${hadoop.version} + + com.aliyun.oss + hadoop-aliyun + 2.7.2 + org.apache.hadoop hadoop-mapreduce-client-core diff --git a/hdfswriter/pom.xml b/hdfswriter/pom.xml index 15b3780a..741159cb 100644 --- a/hdfswriter/pom.xml +++ b/hdfswriter/pom.xml @@ -19,6 +19,17 @@ + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -30,6 +41,11 @@ + + com.aliyun.oss + hadoop-aliyun + 2.7.2 + org.slf4j slf4j-api @@ -132,4 +148,4 @@
- \ No newline at end of file + diff --git a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsHelper.java b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsHelper.java index c8bfa50b..1ecdb578 100644 --- a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsHelper.java +++ b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsHelper.java @@ -6,10 +6,13 @@ import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.unstructuredstorage.util.ColumnTypeUtil; +import com.alibaba.datax.plugin.unstructuredstorage.util.HdfsUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.hadoop.fs.*; import org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat; @@ -24,6 +27,10 @@ import org.apache.hadoop.mapred.*; import org.apache.hadoop.security.UserGroupInformation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import parquet.schema.OriginalType; +import parquet.schema.PrimitiveType; +import parquet.schema.Types; + import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -556,4 +563,67 @@ public class HdfsHelper { transportResult.setLeft(recordList); return transportResult; } + + + public static String generateParquetSchemaFromColumnAndType(List columns) { + Map decimalColInfo = new HashMap<>(16); + ColumnTypeUtil.DecimalInfo PARQUET_DEFAULT_DECIMAL_INFO = new ColumnTypeUtil.DecimalInfo(10, 2); + Types.MessageTypeBuilder typeBuilder = Types.buildMessage(); + for (Configuration column : columns) { + String name = column.getString("name"); + String colType = column.getString("type"); + Validate.notNull(name, "column.name can't be null"); + Validate.notNull(colType, "column.type can't be null"); + switch (colType.toLowerCase()) { + case "tinyint": + case "smallint": + case "int": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.INT32).named(name); + break; + case "bigint": + case "long": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.INT64).named(name); + break; + case "float": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.FLOAT).named(name); + break; + case "double": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.DOUBLE).named(name); + break; + case "binary": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.BINARY).named(name); + break; + case "char": + case "varchar": + case "string": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.BINARY).as(OriginalType.UTF8).named(name); + break; + case "boolean": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.BOOLEAN).named(name); + break; + case "timestamp": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.INT96).named(name); + break; + case "date": + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.INT32).as(OriginalType.DATE).named(name); + break; + default: + if (ColumnTypeUtil.isDecimalType(colType)) { + ColumnTypeUtil.DecimalInfo decimalInfo = ColumnTypeUtil.getDecimalInfo(colType, PARQUET_DEFAULT_DECIMAL_INFO); + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) + .as(OriginalType.DECIMAL) + .precision(decimalInfo.getPrecision()) + .scale(decimalInfo.getScale()) + .length(HdfsUtil.computeMinBytesForPrecision(decimalInfo.getPrecision())) + .named(name); + + decimalColInfo.put(name, decimalInfo); + } else { + typeBuilder.optional(PrimitiveType.PrimitiveTypeName.BINARY).named(name); + } + break; + } + } + return typeBuilder.named("m").toString(); + } } diff --git a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsWriter.java b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsWriter.java index 853613a2..59ec6d18 100644 --- a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsWriter.java +++ b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/HdfsWriter.java @@ -9,9 +9,11 @@ import com.google.common.collect.Sets; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; import org.apache.hadoop.fs.Path; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import parquet.schema.MessageTypeParser; import java.util.*; @@ -323,8 +325,55 @@ public class HdfsWriter extends Writer { } return tmpFilePath; } + public void unitizeParquetConfig(Configuration writerSliceConfig) { + String parquetSchema = writerSliceConfig.getString(Key.PARQUET_SCHEMA); + if (StringUtils.isNotBlank(parquetSchema)) { + LOG.info("parquetSchema has config. use parquetSchema:\n{}", parquetSchema); + return; + } + + List columns = writerSliceConfig.getListConfiguration(Key.COLUMN); + if (columns == null || columns.isEmpty()) { + throw DataXException.asDataXException("parquetSchema or column can't be blank!"); + } + + parquetSchema = generateParquetSchemaFromColumn(columns); + // 为了兼容历史逻辑,对之前的逻辑做保留,但是如果配置的时候报错,则走新逻辑 + try { + MessageTypeParser.parseMessageType(parquetSchema); + } catch (Throwable e) { + LOG.warn("The generated parquetSchema {} is illegal, try to generate parquetSchema in another way", parquetSchema); + parquetSchema = HdfsHelper.generateParquetSchemaFromColumnAndType(columns); + LOG.info("The last generated parquet schema is {}", parquetSchema); + } + writerSliceConfig.set(Key.PARQUET_SCHEMA, parquetSchema); + LOG.info("dataxParquetMode use default fields."); + writerSliceConfig.set(Key.DATAX_PARQUET_MODE, "fields"); + } + + private String generateParquetSchemaFromColumn(List columns) { + StringBuffer parquetSchemaStringBuffer = new StringBuffer(); + parquetSchemaStringBuffer.append("message m {"); + for (Configuration column: columns) { + String name = column.getString("name"); + Validate.notNull(name, "column.name can't be null"); + + String type = column.getString("type"); + Validate.notNull(type, "column.type can't be null"); + + String parquetColumn = String.format("optional %s %s;", type, name); + parquetSchemaStringBuffer.append(parquetColumn); + } + parquetSchemaStringBuffer.append("}"); + String parquetSchema = parquetSchemaStringBuffer.toString(); + LOG.info("generate parquetSchema:\n{}", parquetSchema); + return parquetSchema; + } + } + + public static class Task extends Writer.Task { private static final Logger LOG = LoggerFactory.getLogger(Task.class); diff --git a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/Key.java b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/Key.java index f1f63096..2b1fab98 100644 --- a/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/Key.java +++ b/hdfswriter/src/main/java/com/alibaba/datax/plugin/writer/hdfswriter/Key.java @@ -33,4 +33,17 @@ public class Key { public static final String KERBEROS_PRINCIPAL = "kerberosPrincipal"; // hadoop config public static final String HADOOP_CONFIG = "hadoopConfig"; + + // useOldRawDataTransf + public final static String PARQUET_FILE_USE_RAW_DATA_TRANSF = "useRawDataTransf"; + + public final static String DATAX_PARQUET_MODE = "dataxParquetMode"; + + // hdfs username 默认值 admin + public final static String HDFS_USERNAME = "hdfsUsername"; + + public static final String PROTECTION = "protection"; + + public static final String PARQUET_SCHEMA = "parquetSchema"; + public static final String PARQUET_MERGE_RESULT = "parquetMergeResult"; } diff --git a/hologresjdbcwriter/doc/hologresjdbcwriter.md b/hologresjdbcwriter/doc/hologresjdbcwriter.md new file mode 100644 index 00000000..8b163017 --- /dev/null +++ b/hologresjdbcwriter/doc/hologresjdbcwriter.md @@ -0,0 +1,204 @@ +# DataX HologresJdbcWriter + + +--- + + +## 1 快速介绍 + +HologresJdbcWriter 插件实现了写入数据到 Hologres目的表的功能。在底层实现上,HologresJdbcWriter通过JDBC连接远程 Hologres 数据库,并执行相应的 insert into ... on conflict sql 语句将数据写入 Hologres,内部会分批次提交入库。 + +
+ +* HologresJdbcWriter 只支持单表同步 + +## 2 实现原理 + +HologresJdbcWriter 通过 DataX 框架获取 Reader 生成的协议数据,根据你配置生成相应的SQL插入语句 + +* `insert into... on conflict ` + + +## 3 功能说明 + +### 3.1 配置样例 + +* 这里使用一份从内存产生到 HologresJdbcWriter导入的数据。 + +```json +{ + "job": { + "setting": { + "speed": { + "channel": 1 + } + }, + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column" : [ + { + "value": "DataX", + "type": "string" + }, + { + "value": 19880808, + "type": "long" + }, + { + "value": "1988-08-08 08:08:08", + "type": "date" + }, + { + "value": true, + "type": "bool" + }, + { + "value": "test", + "type": "bytes" + } + ], + "sliceRecordCount": 1000 + } + }, + "writer": { + "name": "hologresjdbcwriter", + "parameter": { + "username": "xx", + "password": "xx", + "column": [ + "id", + "name" + ], + "preSql": [ + "delete from test" + ], + "connection": [ + { + "jdbcUrl": "jdbc:postgresql://127.0.0.1:3002/datax", + "table": [ + "test" + ] + } + ], + "writeMode" : "REPLACE", + "client" : { + "writeThreadSize" : 3 + } + } + } + } + ] + } +} + +``` + + +### 3.2 参数说明 + +* **jdbcUrl** + + * 描述:目的数据库的 JDBC 连接信息 ,jdbcUrl必须包含在connection配置单元中。 + + 注意:1、在一个数据库上只能配置一个值。 + 2、jdbcUrl按照PostgreSQL官方规范,并可以填写连接附加参数信息。具体请参看PostgreSQL官方文档或者咨询对应 DBA。 + + + * 必选:是
+ + * 默认值:无
+ +* **username** + + * 描述:目的数据库的用户名
+ + * 必选:是
+ + * 默认值:无
+ +* **password** + + * 描述:目的数据库的密码
+ + * 必选:是
+ + * 默认值:无
+ +* **table** + + * 描述:目的表的表名称。只支持写入一个表。 + + 注意:table 和 jdbcUrl 必须包含在 connection 配置单元中 + + * 必选:是
+ + * 默认值:无
+ +* **column** + + * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。如果要依次写入全部列,使用\*表示, 例如: "column": ["\*"] + + 注意:1、我们强烈不推荐你这样配置,因为当你目的表字段个数、类型等有改动时,你的任务可能运行不正确或者失败 + 2、此处 column 不能配置任何常量值 + + * 必选:是
+ + * 默认值:否
+ +* **preSql** + + * 描述:写入数据到目的表前,会先执行这里的标准语句。如果 Sql 中有你需要操作到的表名称,请使用 `@table` 表示,这样在实际执行 Sql 语句时,会对变量按照实际表名称进行替换。
+ + * 必选:否
+ + * 默认值:无
+ +* **postSql** + + * 描述:写入数据到目的表后,会执行这里的标准语句。(原理同 preSql )
+ + * 必选:否
+ + * 默认值:无
+ +* **batchSize** + + * 描述:一次性批量提交的记录数大小,该值可以极大减少DataX与HologresJdbcWriter的网络交互次数,并提升整体吞吐量。但是该值设置过大可能会造成DataX运行进程OOM情况。
+ + * 必选:否
+ + * 默认值:512
+ +* **writeMode** + + * 描述:当写入hologres有主键表时,控制主键冲突后的策略。REPLACE表示冲突后hologres表的所有字段都被覆盖(未在writer中配置的字段将填充null);UPDATE表示冲突后hologres表writer配置的字段将被覆盖;IGNORE表示冲突后丢弃新数据,不覆盖。
+ + * 必选:否
+ + * 默认值:REPLACE
+ +* **client.writeThreadSize** + + * 描述:写入hologres的连接池大小,多个连接将并行写入数据。
+ + * 必选:否
+ + * 默认值:1
+ +### 3.3 类型转换 + +目前 HologresJdbcWriter支持大部分 Hologres类型,但也存在部分没有支持的情况,请注意检查你的类型。 + +下面列出 HologresJdbcWriter针对 Hologres类型转换列表: + +| DataX 内部类型| Hologres 数据类型 | +| -------- | ----- | +| Long |bigint, integer, smallint | +| Double |double precision, money, numeric, real | +| String |varchar, char, text, bit| +| Date |date, time, timestamp | +| Boolean |bool| +| Bytes |bytea| diff --git a/hologresjdbcwriter/pom.xml b/hologresjdbcwriter/pom.xml new file mode 100644 index 00000000..a908dfed --- /dev/null +++ b/hologresjdbcwriter/pom.xml @@ -0,0 +1,90 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + hologresjdbcwriter + hologresjdbcwriter + jar + writer data into hologres using jdbc + + + 1.8 + + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + org.slf4j + slf4j-api + + + + ch.qos.logback + logback-classic + + + + com.alibaba.datax + plugin-rdbms-util + ${datax-project-version} + + + + com.alibaba.hologres + holo-client + 2.1.0 + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + \ No newline at end of file diff --git a/hologresjdbcwriter/src/main/assembly/package.xml b/hologresjdbcwriter/src/main/assembly/package.xml new file mode 100755 index 00000000..db8100e1 --- /dev/null +++ b/hologresjdbcwriter/src/main/assembly/package.xml @@ -0,0 +1,35 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/hologresjdbcwriter + + + target/ + + hologresjdbcwriter-0.0.1-SNAPSHOT.jar + + plugin/writer/hologresjdbcwriter + + + + + + false + plugin/writer/hologresjdbcwriter/libs + runtime + + + diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/BaseWriter.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/BaseWriter.java new file mode 100644 index 00000000..2c390bcb --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/BaseWriter.java @@ -0,0 +1,526 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.LongColumn; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.RetryUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.writer.hologresjdbcwriter.util.ConfLoader; +import com.alibaba.datax.plugin.writer.hologresjdbcwriter.util.OriginalConfPretreatmentUtil; +import com.alibaba.datax.plugin.writer.hologresjdbcwriter.util.WriterUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.hologres.client.HoloClient; +import com.alibaba.hologres.client.HoloConfig; +import com.alibaba.hologres.client.Put; +import com.alibaba.hologres.client.exception.HoloClientWithDetailsException; +import com.alibaba.hologres.client.model.TableSchema; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Time; +import java.sql.Timestamp; +import java.sql.Types; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class BaseWriter { + + protected static final Set ignoreConfList; + + static { + ignoreConfList = new HashSet<>(); + ignoreConfList.add("jdbcUrl"); + ignoreConfList.add("username"); + ignoreConfList.add("password"); + ignoreConfList.add("writeMode"); + } + + enum WriteMode { + IGNORE, + UPDATE, + REPLACE + } + + private static WriteMode getWriteMode(String text) { + text = text.toUpperCase(); + switch (text) { + case "IGNORE": + return WriteMode.IGNORE; + case "UPDATE": + return WriteMode.UPDATE; + case "REPLACE": + return WriteMode.REPLACE; + default: + throw DataXException.asDataXException(DBUtilErrorCode.ILLEGAL_VALUE, "writeMode只支持IGNORE,UPDATE,REPLACE,无法识别 " + text); + } + } + + public static class Job { + private DataBaseType dataBaseType; + + private static final Logger LOG = LoggerFactory + .getLogger(BaseWriter.Job.class); + + public Job(DataBaseType dataBaseType) { + this.dataBaseType = dataBaseType; + OriginalConfPretreatmentUtil.DATABASE_TYPE = this.dataBaseType; + } + + public void init(Configuration originalConfig) { + OriginalConfPretreatmentUtil.doPretreatment(originalConfig, this.dataBaseType); + checkConf(originalConfig); + LOG.debug("After job init(), originalConfig now is:[\n{}\n]", + originalConfig.toJSON()); + } + + private void checkConf(Configuration originalConfig) { + getWriteMode(originalConfig.getString(Key.WRITE_MODE, "REPLACE")); + List userConfiguredColumns = originalConfig.getList(Key.COLUMN, String.class); + List conns = originalConfig.getList(Constant.CONN_MARK, + JSONObject.class); + if (conns.size() > 1) { + throw DataXException.asDataXException(DBUtilErrorCode.ILLEGAL_VALUE, "只支持单表同步"); + } + int tableNumber = originalConfig.getInt(Constant.TABLE_NUMBER_MARK); + if (tableNumber > 1) { + throw DataXException.asDataXException(DBUtilErrorCode.ILLEGAL_VALUE, "只支持单表同步"); + } + JSONObject connConf = conns.get(0); + String jdbcUrl = connConf.getString(Key.JDBC_URL); + String username = originalConfig.getString(Key.USERNAME); + String password = originalConfig.getString(Key.PASSWORD); + + String table = connConf.getJSONArray(Key.TABLE).getString(0); + + Map clientConf = originalConfig.getMap("client"); + + HoloConfig config = new HoloConfig(); + config.setJdbcUrl(jdbcUrl); + config.setUsername(username); + config.setPassword(password); + if (clientConf != null) { + try { + config = ConfLoader.load(clientConf, config, ignoreConfList); + } catch (Exception e) { + throw DataXException + .asDataXException( + DBUtilErrorCode.CONF_ERROR, + "配置解析失败."); + } + } + + try (HoloClient client = new HoloClient(config)) { + TableSchema schema = client.getTableSchema(table); + LOG.info("table {} column info:", schema.getTableNameObj().getFullName()); + for (com.alibaba.hologres.client.model.Column column : schema.getColumnSchema()) { + LOG.info("name:{},type:{},typeName:{},nullable:{},defaultValue:{}", column.getName(), column.getType(), column.getTypeName(), column.getAllowNull(), column.getDefaultValue()); + } + for (String userColumn : userConfiguredColumns) { + if (schema.getColumnIndex(userColumn) == null) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, "配置的列 " + userColumn + " 不存在"); + } + } + } catch (Exception e) { + throw DataXException.asDataXException(DBUtilErrorCode.CONN_DB_ERROR, "获取表schema失败", e); + } + + } + + // 一般来说,是需要推迟到 task 中进行pre 的执行(单表情况例外) + public void prepare(Configuration originalConfig) { + + try { + String username = originalConfig.getString(Key.USERNAME); + String password = originalConfig.getString(Key.PASSWORD); + + List conns = originalConfig.getList(Constant.CONN_MARK, + Object.class); + Configuration connConf = Configuration.from(conns.get(0) + .toString()); + + String jdbcUrl = connConf.getString(Key.JDBC_URL); + originalConfig.set(Key.JDBC_URL, jdbcUrl); + + String table = connConf.getList(Key.TABLE, String.class).get(0); + originalConfig.set(Key.TABLE, table); + + List preSqls = originalConfig.getList(Key.PRE_SQL, + String.class); + List renderedPreSqls = WriterUtil.renderPreOrPostSqls( + preSqls, table); + + originalConfig.remove(Constant.CONN_MARK); + if (null != renderedPreSqls && !renderedPreSqls.isEmpty()) { + // 说明有 preSql 配置,则此处删除掉 + originalConfig.remove(Key.PRE_SQL); + String tempJdbcUrl = jdbcUrl.replace("postgresql", "hologres"); + try (Connection conn = DriverManager.getConnection( + tempJdbcUrl, username, password)) { + LOG.info("Begin to execute preSqls:[{}]. context info:{}.", + StringUtils.join(renderedPreSqls, ";"), tempJdbcUrl); + + WriterUtil.executeSqls(conn, renderedPreSqls, tempJdbcUrl, dataBaseType); + } + } + LOG.debug("After job prepare(), originalConfig now is:[\n{}\n]", + originalConfig.toJSON()); + } catch (SQLException e) { + throw DataXException.asDataXException(DBUtilErrorCode.SQL_EXECUTE_FAIL, e); + } + } + + public List split(Configuration originalConfig, + int mandatoryNumber) { + return WriterUtil.doSplit(originalConfig, mandatoryNumber); + } + + // 一般来说,是需要推迟到 task 中进行post 的执行(单表情况例外) + public void post(Configuration originalConfig) { + + String username = originalConfig.getString(Key.USERNAME); + String password = originalConfig.getString(Key.PASSWORD); + + String jdbcUrl = originalConfig.getString(Key.JDBC_URL); + + String table = originalConfig.getString(Key.TABLE); + + List postSqls = originalConfig.getList(Key.POST_SQL, + String.class); + List renderedPostSqls = WriterUtil.renderPreOrPostSqls( + postSqls, table); + + if (null != renderedPostSqls && !renderedPostSqls.isEmpty()) { + // 说明有 postSql 配置,则此处删除掉 + originalConfig.remove(Key.POST_SQL); + String tempJdbcUrl = jdbcUrl.replace("postgresql", "hologres"); + Connection conn = DBUtil.getConnection(this.dataBaseType, + tempJdbcUrl, username, password); + + LOG.info( + "Begin to execute postSqls:[{}]. context info:{}.", + StringUtils.join(renderedPostSqls, ";"), tempJdbcUrl); + WriterUtil.executeSqls(conn, renderedPostSqls, tempJdbcUrl, dataBaseType); + DBUtil.closeDBResources(null, null, conn); + } + + } + + public void destroy(Configuration originalConfig) { + } + + } + + public static class Task { + protected static final Logger LOG = LoggerFactory + .getLogger(BaseWriter.Task.class); + + protected DataBaseType dataBaseType; + + protected String username; + protected String password; + protected String jdbcUrl; + protected String table; + protected List columns; + protected int batchSize; + protected int batchByteSize; + protected int columnNumber = 0; + protected TaskPluginCollector taskPluginCollector; + + // 作为日志显示信息时,需要附带的通用信息。比如信息所对应的数据库连接等信息,针对哪个表做的操作 + protected static String BASIC_MESSAGE; + + protected WriteMode writeMode; + protected String arrayDelimiter; + protected boolean emptyAsNull; + + protected HoloConfig config; + + public Task(DataBaseType dataBaseType) { + this.dataBaseType = dataBaseType; + } + + public void init(Configuration writerSliceConfig) { + this.username = writerSliceConfig.getString(Key.USERNAME); + this.password = writerSliceConfig.getString(Key.PASSWORD); + this.jdbcUrl = writerSliceConfig.getString(Key.JDBC_URL); + this.table = writerSliceConfig.getString(Key.TABLE); + + this.columns = writerSliceConfig.getList(Key.COLUMN, String.class); + this.columnNumber = this.columns.size(); + + this.arrayDelimiter = writerSliceConfig.getString(Key.Array_Delimiter); + + this.batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); + this.batchByteSize = writerSliceConfig.getInt(Key.BATCH_BYTE_SIZE, Constant.DEFAULT_BATCH_BYTE_SIZE); + + writeMode = getWriteMode(writerSliceConfig.getString(Key.WRITE_MODE, "REPLACE")); + emptyAsNull = writerSliceConfig.getBool(Key.EMPTY_AS_NULL, true); + + Map clientConf = writerSliceConfig.getMap("client"); + + config = new HoloConfig(); + config.setJdbcUrl(this.jdbcUrl); + config.setUsername(username); + config.setPassword(password); + config.setWriteMode(writeMode == WriteMode.IGNORE ? com.alibaba.hologres.client.model.WriteMode.INSERT_OR_IGNORE : (writeMode == WriteMode.UPDATE ? com.alibaba.hologres.client.model.WriteMode.INSERT_OR_UPDATE : com.alibaba.hologres.client.model.WriteMode.INSERT_OR_REPLACE)); + config.setWriteBatchSize(this.batchSize); + config.setWriteBatchTotalByteSize(this.batchByteSize); + config.setMetaCacheTTL(3600000L); + config.setEnableDefaultForNotNullColumn(false); + config.setRetryCount(5); + config.setAppName("datax"); + + if (clientConf != null) { + try { + config = ConfLoader.load(clientConf, config, ignoreConfList); + } catch (Exception e) { + throw DataXException + .asDataXException( + DBUtilErrorCode.CONF_ERROR, + "配置解析失败."); + } + } + + BASIC_MESSAGE = String.format("jdbcUrl:[%s], table:[%s]", + this.jdbcUrl, this.table); + } + + public void prepare(Configuration writerSliceConfig) { + + } + + public void startWriteWithConnection(RecordReceiver recordReceiver, TaskPluginCollector taskPluginCollector) { + this.taskPluginCollector = taskPluginCollector; + + try (HoloClient client = new HoloClient(config)) { + Record record; + TableSchema schema = RetryUtil.executeWithRetry(() -> client.getTableSchema(this.table), 3, 5000L, true); + while ((record = recordReceiver.getFromReader()) != null) { + if (record.getColumnNumber() != this.columnNumber) { + // 源头读取字段列数与目的表字段写入列数不相等,直接报错 + throw DataXException + .asDataXException( + DBUtilErrorCode.CONF_ERROR, + String.format( + "列配置信息有错误. 因为您配置的任务中,源头读取字段数:%s 与 目的表要写入的字段数:%s 不相等. 请检查您的配置并作出修改.", + record.getColumnNumber(), + this.columnNumber)); + } + Put put = convertToPut(record, schema); + if (null != put) { + try { + client.put(put); + } catch (HoloClientWithDetailsException detail) { + handleDirtyData(detail); + } + } + } + try { + client.flush(); + } catch (HoloClientWithDetailsException detail) { + handleDirtyData(detail); + } + } catch (Exception e) { + throw DataXException.asDataXException( + DBUtilErrorCode.WRITE_DATA_ERROR, e); + } + } + + private void handleDirtyData(HoloClientWithDetailsException detail) { + for (int i = 0; i < detail.size(); ++i) { + com.alibaba.hologres.client.model.Record failRecord = detail.getFailRecord(i); + if (failRecord.getAttachmentList() != null) { + for (Object obj : failRecord.getAttachmentList()) { + taskPluginCollector.collectDirtyRecord((Record) obj, detail.getException(i)); + } + } + } + } + + public void startWrite(RecordReceiver recordReceiver, + TaskPluginCollector taskPluginCollector) { + startWriteWithConnection(recordReceiver, taskPluginCollector); + } + + public void post(Configuration writerSliceConfig) { + + } + + public void destroy(Configuration writerSliceConfig) { + } + + // 直接使用了两个类变量:columnNumber,resultSetMetaData + protected Put convertToPut(Record record, TableSchema schema) { + try { + Put put = new Put(schema); + put.getRecord().addAttachment(record); + for (int i = 0; i < this.columnNumber; i++) { + fillColumn(put, schema, schema.getColumnIndex(this.columns.get(i)), record.getColumn(i)); + } + return put; + } catch (Exception e) { + taskPluginCollector.collectDirtyRecord(record, e); + return null; + } + + } + + protected void fillColumn(Put data, TableSchema schema, int index, Column column) throws SQLException { + com.alibaba.hologres.client.model.Column holoColumn = schema.getColumn(index); + switch (holoColumn.getType()) { + case Types.CHAR: + case Types.NCHAR: + case Types.CLOB: + case Types.NCLOB: + case Types.VARCHAR: + case Types.LONGVARCHAR: + case Types.NVARCHAR: + case Types.LONGNVARCHAR: + String value = column.asString(); + if (emptyAsNull && value != null && value.length() == 0) { + data.setObject(index, null); + } else { + data.setObject(index, value); + } + break; + + case Types.SMALLINT: + if (column.getByteSize() > 0) { + data.setObject(index, column.asBigInteger().shortValue()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.INTEGER: + if (column.getByteSize() > 0) { + data.setObject(index, column.asBigInteger().intValue()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.BIGINT: + if (column.getByteSize() > 0) { + data.setObject(index, column.asBigInteger().longValue()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.NUMERIC: + case Types.DECIMAL: + if (column.getByteSize() > 0) { + data.setObject(index, column.asBigDecimal()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.FLOAT: + case Types.REAL: + if (column.getByteSize() > 0) { + data.setObject(index, column.asBigDecimal().floatValue()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.DOUBLE: + if (column.getByteSize() > 0) { + data.setObject(index, column.asDouble()); + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.TIME: + if (column.getByteSize() > 0) { + if (column instanceof LongColumn || column instanceof DateColumn) { + data.setObject(index, new Time(column.asLong())); + } else { + data.setObject(index, column.asString()); + } + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.DATE: + if (column.getByteSize() > 0) { + if (column instanceof LongColumn || column instanceof DateColumn) { + data.setObject(index, column.asLong()); + } else { + data.setObject(index, column.asString()); + } + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + case Types.TIMESTAMP: + if (column.getByteSize() > 0) { + if (column instanceof LongColumn || column instanceof DateColumn) { + data.setObject(index, new Timestamp(column.asLong())); + } else { + data.setObject(index, column.asString()); + } + } else if (emptyAsNull) { + data.setObject(index, null); + } + break; + + case Types.BINARY: + case Types.VARBINARY: + case Types.BLOB: + case Types.LONGVARBINARY: + String byteValue = column.asString(); + if (null != byteValue) { + data.setObject(index, column + .asBytes()); + } + break; + case Types.BOOLEAN: + case Types.BIT: + if (column.getByteSize() == 0) { + break; + } + try { + Boolean boolValue = column.asBoolean(); + data.setObject(index, boolValue); + } catch (Exception e) { + data.setObject(index, !"0".equals(column.asString())); + } + break; + case Types.ARRAY: + String arrayString = column.asString(); + Object arrayObject = null; + if (null == arrayString || (emptyAsNull && "".equals(arrayString))) { + data.setObject(index, null); + break; + } else if (arrayDelimiter != null && arrayDelimiter.length() > 0) { + arrayObject = arrayString.split(this.arrayDelimiter); + } else { + arrayObject = JSONArray.parseArray(arrayString); + } + data.setObject(index, arrayObject); + break; + default: + throw DataXException + .asDataXException( + DBUtilErrorCode.UNSUPPORTED_TYPE, + String.format( + "您的配置文件中的列配置信息有误. 因为DataX 不支持数据库写入这种字段类型. 字段名:[%s], 字段类型:[%d], 字段Java类型:[%s]. 请修改表中该字段的类型或者不同步该字段.", + holoColumn.getName(), + holoColumn.getType(), + holoColumn.getTypeName())); + } + } + } +} diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Constant.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Constant.java new file mode 100755 index 00000000..eb51d026 --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Constant.java @@ -0,0 +1,15 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter; + +/** + * 用于插件解析用户配置时,需要进行标识(MARK)的常量的声明. + */ +public final class Constant { + public static final int DEFAULT_BATCH_SIZE = 512; + + public static final int DEFAULT_BATCH_BYTE_SIZE = 50 * 1024 * 1024; + + public static String CONN_MARK = "connection"; + + public static String TABLE_NUMBER_MARK = "tableNumber"; + +} diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/HologresJdbcWriter.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/HologresJdbcWriter.java new file mode 100755 index 00000000..811a2e11 --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/HologresJdbcWriter.java @@ -0,0 +1,78 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter; + +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; + +import java.util.List; + +public class HologresJdbcWriter extends Writer { + private static final DataBaseType DATABASE_TYPE = DataBaseType.PostgreSQL; + + public static class Job extends Writer.Job { + private Configuration originalConfig = null; + private BaseWriter.Job baseWriterMaster; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + this.baseWriterMaster = new BaseWriter.Job(DATABASE_TYPE); + this.baseWriterMaster.init(this.originalConfig); + } + + @Override + public void prepare() { + this.baseWriterMaster.prepare(this.originalConfig); + } + + @Override + public List split(int mandatoryNumber) { + return this.baseWriterMaster.split(this.originalConfig, mandatoryNumber); + } + + @Override + public void post() { + this.baseWriterMaster.post(this.originalConfig); + } + + @Override + public void destroy() { + this.baseWriterMaster.destroy(this.originalConfig); + } + + } + + public static class Task extends Writer.Task { + private Configuration writerSliceConfig; + private BaseWriter.Task baseWriterSlave; + + @Override + public void init() { + this.writerSliceConfig = super.getPluginJobConf(); + this.baseWriterSlave = new BaseWriter.Task(DATABASE_TYPE); + this.baseWriterSlave.init(this.writerSliceConfig); + } + + @Override + public void prepare() { + this.baseWriterSlave.prepare(this.writerSliceConfig); + } + + public void startWrite(RecordReceiver recordReceiver) { + this.baseWriterSlave.startWrite(recordReceiver, super.getTaskPluginCollector()); + } + + @Override + public void post() { + this.baseWriterSlave.post(this.writerSliceConfig); + } + + @Override + public void destroy() { + this.baseWriterSlave.destroy(this.writerSliceConfig); + } + + } + +} diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Key.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Key.java new file mode 100755 index 00000000..3bd5d1e2 --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/Key.java @@ -0,0 +1,31 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter; + +public final class Key { + public final static String JDBC_URL = "jdbcUrl"; + + public final static String USERNAME = "username"; + + public final static String PASSWORD = "password"; + + public final static String TABLE = "table"; + + public final static String COLUMN = "column"; + + public final static String Array_Delimiter = "arrayDelimiter"; + + public final static String WRITE_MODE = "writeMode"; + + public final static String PRE_SQL = "preSql"; + + public final static String POST_SQL = "postSql"; + + //默认值:256 + public final static String BATCH_SIZE = "batchSize"; + + //默认值:50m + public final static String BATCH_BYTE_SIZE = "batchByteSize"; + + public final static String EMPTY_AS_NULL = "emptyAsNull"; + + +} \ No newline at end of file diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/ConfLoader.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/ConfLoader.java new file mode 100644 index 00000000..48d7584e --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/ConfLoader.java @@ -0,0 +1,59 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter.util; + +import com.alibaba.hologres.client.model.WriteMode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.Field; +import java.util.Map; +import java.util.Set; + +public class ConfLoader { + public static Logger LOG = LoggerFactory.getLogger(ConfLoader.class); + + static public T load(Map props, T config, Set ignoreList) throws Exception { + Field[] fields = config.getClass().getDeclaredFields(); + for (Map.Entry entry : props.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue().toString(); + if (ignoreList.contains(key)) { + LOG.info("Config Skip {}", key); + continue; + } + boolean match = false; + for (Field field : fields) { + if (field.getName().equals(key)) { + match = true; + field.setAccessible(true); + Class type = field.getType(); + if (type.equals(String.class)) { + field.set(config, value); + } else if (type.equals(int.class)) { + field.set(config, Integer.parseInt(value)); + } else if (type.equals(long.class)) { + field.set(config, Long.parseLong(value)); + } else if (type.equals(boolean.class)) { + field.set(config, Boolean.parseBoolean(value)); + } else if (WriteMode.class.equals(type)) { + field.set(config, WriteMode.valueOf(value)); + } else { + throw new Exception("invalid type " + type + " for param " + key); + } + if ("password".equals(key)) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < value.length(); ++i) { + sb.append("*"); + } + LOG.info("Config {}={}", key, sb.toString()); + } else { + LOG.info("Config {}={}", key, value); + } + } + } + if (!match) { + throw new Exception("param " + key + " not found in HoloConfig"); + } + } + return config; + } +} diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/OriginalConfPretreatmentUtil.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/OriginalConfPretreatmentUtil.java new file mode 100755 index 00000000..70176b91 --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/OriginalConfPretreatmentUtil.java @@ -0,0 +1,82 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter.util; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.util.TableExpandUtil; +import com.alibaba.datax.plugin.writer.hologresjdbcwriter.Constant; +import com.alibaba.datax.plugin.writer.hologresjdbcwriter.Key; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public final class OriginalConfPretreatmentUtil { + private static final Logger LOG = LoggerFactory + .getLogger(OriginalConfPretreatmentUtil.class); + + public static DataBaseType DATABASE_TYPE; + + public static void doPretreatment(Configuration originalConfig, DataBaseType dataBaseType) { + // 检查 username/password 配置(必填) + originalConfig.getNecessaryValue(Key.USERNAME, DBUtilErrorCode.REQUIRED_VALUE); + originalConfig.getNecessaryValue(Key.PASSWORD, DBUtilErrorCode.REQUIRED_VALUE); + + doCheckBatchSize(originalConfig); + simplifyConf(originalConfig); + } + + public static void doCheckBatchSize(Configuration originalConfig) { + // 检查batchSize 配置(选填,如果未填写,则设置为默认值) + int batchSize = originalConfig.getInt(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); + if (batchSize < 1) { + throw DataXException.asDataXException(DBUtilErrorCode.ILLEGAL_VALUE, String.format( + "您的batchSize配置有误. 您所配置的写入数据库表的 batchSize:%s 不能小于1. 推荐配置范围为:[256-1024] (保持128的倍数), 该值越大, 内存溢出可能性越大. 请检查您的配置并作出修改.", + batchSize)); + } + + originalConfig.set(Key.BATCH_SIZE, batchSize); + } + + public static void simplifyConf(Configuration originalConfig) { + List connections = originalConfig.getList(Constant.CONN_MARK, + Object.class); + + int tableNum = 0; + + for (int i = 0, len = connections.size(); i < len; i++) { + Configuration connConf = Configuration.from(connections.get(i).toString()); + + String jdbcUrl = connConf.getString(Key.JDBC_URL); + if (StringUtils.isBlank(jdbcUrl)) { + throw DataXException.asDataXException(DBUtilErrorCode.REQUIRED_VALUE, "您未配置的写入数据库表的 jdbcUrl."); + } + + List tables = connConf.getList(Key.TABLE, String.class); + + if (null == tables || tables.isEmpty()) { + throw DataXException.asDataXException(DBUtilErrorCode.REQUIRED_VALUE, + "您未配置写入数据库表的表名称. 根据配置DataX找不到您配置的表. 请检查您的配置并作出修改."); + } + + // 对每一个connection 上配置的table 项进行解析 + List expandedTables = TableExpandUtil + .expandTableConf(DATABASE_TYPE, tables); + + if (null == expandedTables || expandedTables.isEmpty()) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + "您配置的写入数据库表名称错误. DataX找不到您配置的表,请检查您的配置并作出修改."); + } + + tableNum += expandedTables.size(); + + originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, + i, Key.TABLE), expandedTables); + } + + originalConfig.set(Constant.TABLE_NUMBER_MARK, tableNum); + } + +} diff --git a/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/WriterUtil.java b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/WriterUtil.java new file mode 100755 index 00000000..d35194e8 --- /dev/null +++ b/hologresjdbcwriter/src/main/java/com/alibaba/datax/plugin/writer/hologresjdbcwriter/util/WriterUtil.java @@ -0,0 +1,111 @@ +package com.alibaba.datax.plugin.writer.hologresjdbcwriter.util; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.util.RdbmsException; +import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.datax.plugin.rdbms.writer.Key; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public final class WriterUtil { + private static final Logger LOG = LoggerFactory.getLogger(WriterUtil.class); + + //TODO 切分报错 + public static List doSplit(Configuration simplifiedConf, + int adviceNumber) { + + List splitResultConfigs = new ArrayList(); + + int tableNumber = simplifiedConf.getInt(Constant.TABLE_NUMBER_MARK); + + //处理单表的情况 + if (tableNumber == 1) { + //由于在之前的 master prepare 中已经把 table,jdbcUrl 提取出来,所以这里处理十分简单 + for (int j = 0; j < adviceNumber; j++) { + splitResultConfigs.add(simplifiedConf.clone()); + } + + return splitResultConfigs; + } + + if (tableNumber != adviceNumber) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, + String.format("您的配置文件中的列配置信息有误. 您要写入的目的端的表个数是:%s , 但是根据系统建议需要切分的份数是:%s. 请检查您的配置并作出修改.", + tableNumber, adviceNumber)); + } + + String jdbcUrl; + List preSqls = simplifiedConf.getList(Key.PRE_SQL, String.class); + List postSqls = simplifiedConf.getList(Key.POST_SQL, String.class); + + List conns = simplifiedConf.getList(Constant.CONN_MARK, + Object.class); + + for (Object conn : conns) { + Configuration sliceConfig = simplifiedConf.clone(); + + Configuration connConf = Configuration.from(conn.toString()); + jdbcUrl = connConf.getString(Key.JDBC_URL); + sliceConfig.set(Key.JDBC_URL, jdbcUrl); + + sliceConfig.remove(Constant.CONN_MARK); + + List tables = connConf.getList(Key.TABLE, String.class); + + for (String table : tables) { + Configuration tempSlice = sliceConfig.clone(); + tempSlice.set(Key.TABLE, table); + tempSlice.set(Key.PRE_SQL, renderPreOrPostSqls(preSqls, table)); + tempSlice.set(Key.POST_SQL, renderPreOrPostSqls(postSqls, table)); + + splitResultConfigs.add(tempSlice); + } + + } + + return splitResultConfigs; + } + + public static List renderPreOrPostSqls(List preOrPostSqls, String tableName) { + if (null == preOrPostSqls) { + return Collections.emptyList(); + } + + List renderedSqls = new ArrayList(); + for (String sql : preOrPostSqls) { + //preSql为空时,不加入执行队列 + if (StringUtils.isNotBlank(sql)) { + renderedSqls.add(sql.replace(Constant.TABLE_NAME_PLACEHOLDER, tableName)); + } + } + + return renderedSqls; + } + + public static void executeSqls(Connection conn, List sqls, String basicMessage,DataBaseType dataBaseType) { + Statement stmt = null; + String currentSql = null; + try { + stmt = conn.createStatement(); + for (String sql : sqls) { + currentSql = sql; + DBUtil.executeSqlWithoutResultSet(stmt, sql); + } + } catch (Exception e) { + throw RdbmsException.asQueryException(dataBaseType,e,currentSql,null,null); + } finally { + DBUtil.closeDBResources(null, stmt, null); + } + } +} diff --git a/hologresjdbcwriter/src/main/resources/plugin.json b/hologresjdbcwriter/src/main/resources/plugin.json new file mode 100644 index 00000000..d46f216b --- /dev/null +++ b/hologresjdbcwriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "hologreswriter", + "class": "com.alibaba.datax.plugin.writer.hologreswriter.HologresWriter", + "description": "", + "developer": "alibaba" +} diff --git a/hologresjdbcwriter/src/main/resources/plugin_job_template.json b/hologresjdbcwriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..656971c3 --- /dev/null +++ b/hologresjdbcwriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,11 @@ +{ + "name": "hologreswriter", + "parameter": { + "url": "", + "username": "", + "password": "", + "database": "", + "table": "", + "partition": "" + } +} diff --git a/introduction.md b/introduction.md index b27607c7..d08ad98d 100644 --- a/introduction.md +++ b/introduction.md @@ -36,6 +36,7 @@ DataX本身作为离线数据同步框架,采用Framework + plugin架构构建 | ------------ | ---------- | :-------: | :-------: |:-------: | | RDBMS 关系型数据库 | MySQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md)| |             | Oracle     |     √     |     √     |[读](https://github.com/alibaba/DataX/blob/master/oraclereader/doc/oraclereader.md) 、[写](https://github.com/alibaba/DataX/blob/master/oraclewriter/doc/oraclewriter.md)| +|             | OceanBase  |     √     |     √     |[读](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase) 、[写](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/use-datax-to-full-migration-data-to-oceanbase)| | | SQLServer | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/sqlserverreader/doc/sqlserverreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/sqlserverwriter/doc/sqlserverwriter.md)| | | PostgreSQL | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/postgresqlreader/doc/postgresqlreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/postgresqlwriter/doc/postgresqlwriter.md)| | | DRDS | √ | √ |[读](https://github.com/alibaba/DataX/blob/master/drdsreader/doc/drdsreader.md) 、[写](https://github.com/alibaba/DataX/blob/master/drdswriter/doc/drdswriter.md)| diff --git a/license.txt b/license.txt index 00b845b4..2f293c0f 100644 --- a/license.txt +++ b/license.txt @@ -1,4 +1,4 @@ -Copyright 1999-2017 Alibaba Group Holding Ltd. +Copyright 1999-2022 Alibaba Group Holding Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/mongodbreader/doc/mongodbreader.md b/mongodbreader/doc/mongodbreader.md index 6d1e6a99..99d25731 100644 --- a/mongodbreader/doc/mongodbreader.md +++ b/mongodbreader/doc/mongodbreader.md @@ -8,7 +8,7 @@ MongoDBReader 插件利用 MongoDB 的java客户端MongoClient进行MongoDB的 MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的JOB程序按照指定的规则对MongoDB中的数据进行分片,并行读取,然后将MongoDB支持的类型通过逐一判断转换成Datax支持的类型。 #### 3 功能说明 -* 该示例从ODPS读一份数据到MongoDB。 +* 该示例从MongoDB读一份数据到ODPS。 { "job": { @@ -127,6 +127,7 @@ MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的J * address: MongoDB的数据地址信息,因为MonogDB可能是个集群,则ip端口信息需要以Json数组的形式给出。【必填】 * userName:MongoDB的用户名。【选填】 * userPassword: MongoDB的密码。【选填】 +* authDb: MongoDB认证数据库【选填】 * collectionName: MonogoDB的集合名。【必填】 * column:MongoDB的文档列名。【必填】 * name:Column的名字。【必填】 @@ -147,4 +148,4 @@ MongoDBReader通过Datax框架从MongoDB并行的读取数据,通过主控的J #### 6 性能报告 -#### 7 测试报告 \ No newline at end of file +#### 7 测试报告 diff --git a/mongodbwriter/doc/mongodbwriter.md b/mongodbwriter/doc/mongodbwriter.md index e30008db..81e6516b 100644 --- a/mongodbwriter/doc/mongodbwriter.md +++ b/mongodbwriter/doc/mongodbwriter.md @@ -116,10 +116,10 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 "type": "int" } ], - "upsertInfo": { - "isUpsert": "true", - "upsertKey": "unique_id" - } + "writeMode": { + "isReplace": "true", + "replaceKey": "unique_id" + } } } } @@ -135,11 +135,11 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 * collectionName: MonogoDB的集合名。【必填】 * column:MongoDB的文档列名。【必填】 * name:Column的名字。【必填】 -* type:Column的类型。【选填】 +* type:Column的类型。【必填】 * splitter:特殊分隔符,当且仅当要处理的字符串要用分隔符分隔为字符数组时,才使用这个参数,通过这个参数指定的分隔符,将字符串分隔存储到MongoDB的数组中。【选填】 -* upsertInfo:指定了传输数据时更新的信息。【选填】 -* isUpsert:当设置为true时,表示针对相同的upsertKey做更新操作。【选填】 -* upsertKey:upsertKey指定了没行记录的业务主键。用来做更新时使用。【选填】 +* writeMode:指定了传输数据时更新的信息。【选填】 +* isReplace:当设置为true时,表示针对相同的replaceKey做更新操作。【选填】 +* replaceKey:replaceKey指定了每行记录的业务主键。用来做更新时使用。【选填】 #### 5 类型转换 @@ -154,4 +154,4 @@ MongoDBWriter通过Datax框架获取Reader生成的数据,然后将Datax支持 #### 6 性能报告 -#### 7 测试报告 \ No newline at end of file +#### 7 测试报告 diff --git a/mysqlreader/doc/mysqlreader.md b/mysqlreader/doc/mysqlreader.md index 3ae52afb..bae4bce0 100644 --- a/mysqlreader/doc/mysqlreader.md +++ b/mysqlreader/doc/mysqlreader.md @@ -165,7 +165,7 @@ MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReade 支持常量配置,用户需要按照Mysql SQL语法格式: ["id", "\`table\`", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3" , "true"] - id为普通列名,\`table\`为包含保留在的列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。 + id为普通列名,\`table\`为包含保留字的列名,1为整形数字常量,'bazhen.csy'为字符串常量,null为空指针,to_char(a + 1)为表达式,2.3为浮点数,true为布尔值。 * 必选:是
diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java index 0a4934a1..228af811 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/OceanBaseReader.java @@ -32,19 +32,21 @@ public class OceanBaseReader extends Reader { if (userConfigedFetchSize != null) { LOG.warn("The [fetchSize] is not recognized, please use readBatchSize instead."); } - this.originalConfig.set(Constant.FETCH_SIZE, Integer.MIN_VALUE); - setDatabaseType(originalConfig); - this.readerJob = new ReaderJob(); this.readerJob.init(this.originalConfig); } + @Override + public void prepare() { + //ObReaderUtils.DATABASE_TYPE获取当前数据库的语法模式 + } + @Override public void preCheck() { init(); - this.readerJob.preCheck(this.originalConfig, ObReaderUtils.DATABASE_TYPE); + this.readerJob.preCheck(this.originalConfig, ObReaderUtils.databaseType); } @@ -70,7 +72,7 @@ public class OceanBaseReader extends Reader { Configuration connConf = Configuration.from(conns.get(0).toString()); List jdbcUrls = connConf.getList(Key.JDBC_URL, String.class); String jdbcUrl = jdbcUrls.get(0); - if(jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { + if (jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { String[] ss = jdbcUrl.split(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING_PATTERN); if (ss.length != 3) { LOG.warn("unrecognized jdbc url: " + jdbcUrl); @@ -85,9 +87,10 @@ public class OceanBaseReader extends Reader { Connection conn = DBUtil.getConnection(DataBaseType.OceanBase, obJdbcUrl, username, password); String compatibleMode = ObReaderUtils.getCompatibleMode(conn); if (ObReaderUtils.isOracleMode(compatibleMode)) { - ObReaderUtils.DATABASE_TYPE = DataBaseType.OceanBase; + ObReaderUtils.compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; } - } catch (Exception e){ + + } catch (Exception e) { LOG.warn("error in get compatible mode, using mysql as default: " + e.getMessage()); } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index c56155f6..f69a9166 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -6,13 +6,38 @@ import com.alibaba.datax.common.constant.CommonConstant; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Key; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.writer.Constant; +import com.alibaba.datax.plugin.reader.oceanbasev10reader.OceanBaseReader; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class ReaderJob extends CommonRdbmsReader.Job { + private Logger LOG = LoggerFactory.getLogger(OceanBaseReader.Task.class); public ReaderJob() { - super(ObReaderUtils.DATABASE_TYPE); + super(ObReaderUtils.databaseType); + } + + @Override + public void init(Configuration originalConfig) { + //将config中的column和table中的关键字进行转义 + List columns = originalConfig.getList(Key.COLUMN, String.class); + ObReaderUtils.escapeDatabaseKeywords(columns); + originalConfig.set(Key.COLUMN, columns); + + List conns = originalConfig.getList(com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, JSONObject.class); + for (int i = 0; i < conns.size(); i++) { + JSONObject conn = conns.get(i); + Configuration connConfig = Configuration.from(conn.toString()); + List tables = connConfig.getList(Key.TABLE, String.class); + ObReaderUtils.escapeDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", com.alibaba.datax.plugin.rdbms.reader.Constant.CONN_MARK, i, Key.TABLE), tables); + } + super.init(originalConfig); } @Override diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java index 073bb3cb..a43dcebd 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderTask.java @@ -1,13 +1,5 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.datax.common.element.Column; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.plugin.RecordSender; @@ -19,11 +11,17 @@ import com.alibaba.datax.plugin.rdbms.reader.CommonRdbmsReader; import com.alibaba.datax.plugin.rdbms.reader.Constant; import com.alibaba.datax.plugin.rdbms.reader.Key; import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.rdbms.util.RdbmsException; import com.alibaba.datax.plugin.reader.oceanbasev10reader.Config; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.ObReaderUtils; import com.alibaba.datax.plugin.reader.oceanbasev10reader.util.TaskContext; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; public class ReaderTask extends CommonRdbmsReader.Task { private static final Logger LOG = LoggerFactory.getLogger(ReaderTask.class); @@ -41,11 +39,12 @@ public class ReaderTask extends CommonRdbmsReader.Task { private boolean reuseConn = false; public ReaderTask(int taskGroupId, int taskId) { - super(ObReaderUtils.DATABASE_TYPE, taskGroupId, taskId); + super(ObReaderUtils.databaseType, taskGroupId, taskId); this.taskGroupId = taskGroupId; this.taskId = taskId; } + @Override public void init(Configuration readerSliceConfig) { /* for database connection */ username = readerSliceConfig.getString(Key.USERNAME); @@ -54,7 +53,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { queryTimeoutSeconds = readerSliceConfig.getInt(Config.QUERY_TIMEOUT_SECOND, Config.DEFAULT_QUERY_TIMEOUT_SECOND); // ob10的处理 - if(jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { + if (jdbcUrl.startsWith(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING)) { String[] ss = jdbcUrl.split(com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING_PATTERN); if (ss.length == 3) { LOG.info("this is ob1_0 jdbc url."); @@ -63,16 +62,14 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } - if (ObReaderUtils.DATABASE_TYPE == DataBaseType.OceanBase) { - jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 + jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:") + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 + if (ObReaderUtils.compatibleMode.equals(ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE)) { compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_ORACLE; - } else { - jdbcUrl = jdbcUrl + "&socketTimeout=1800000&connectTimeout=60000"; //socketTimeout 半个小时 } LOG.info("this is ob1_0 jdbc url. user=" + username + " :url=" + jdbcUrl); mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, ""); retryLimit = readerSliceConfig.getInt(Config.RETRY_LIMIT, Config.DEFAULT_RETRY_LIMIT); - LOG.info("retryLimit: "+ retryLimit); + LOG.info("retryLimit: " + retryLimit); } private void buildSavePoint(TaskContext context) { @@ -83,7 +80,6 @@ public class ReaderTask extends CommonRdbmsReader.Task { } /** - * * 如果isTableMode && table有PK *

* 则支持断点续读 (若pk不在原始的columns中,则追加到尾部,但不传给下游) @@ -92,7 +88,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { */ @Override public void startRead(Configuration readerSliceConfig, RecordSender recordSender, - TaskPluginCollector taskPluginCollector, int fetchSize) { + TaskPluginCollector taskPluginCollector, int fetchSize) { String querySql = readerSliceConfig.getString(Key.QUERY_SQL); String table = readerSliceConfig.getString(Key.TABLE); PerfTrace.getInstance().addTaskDetails(taskId, table + "," + jdbcUrl); @@ -131,14 +127,14 @@ public class ReaderTask extends CommonRdbmsReader.Task { } private void startRead0(boolean isTableMode, TaskContext context, RecordSender recordSender, - TaskPluginCollector taskPluginCollector) { + TaskPluginCollector taskPluginCollector) { // 不是table模式 直接使用原来的做法 if (!isTableMode) { doRead(recordSender, taskPluginCollector, context); return; } // check primary key index - Connection conn = DBUtil.getConnection(ObReaderUtils.DATABASE_TYPE, jdbcUrl, username, password); + Connection conn = DBUtil.getConnection(ObReaderUtils.databaseType, jdbcUrl, username, password); ObReaderUtils.initConn4Reader(conn, queryTimeoutSeconds); context.setConn(conn); try { @@ -184,11 +180,11 @@ public class ReaderTask extends CommonRdbmsReader.Task { } } catch (Throwable e) { if (retryLimit == ++retryCount) { - throw RdbmsException.asQueryException(ObReaderUtils.DATABASE_TYPE, new Exception(e), + throw RdbmsException.asQueryException(ObReaderUtils.databaseType, new Exception(e), context.getQuerySql(), context.getTable(), username); } LOG.error("read fail, retry count " + retryCount + ", sleep 60 second, save point:" + - context.getSavePoint() + ", error: "+ e.getMessage()); + context.getSavePoint() + ", error: " + e.getMessage()); ObReaderUtils.sleep(60000); // sleep 10s } // 假如原来的查询有查出数据,则改成增量查询 @@ -227,7 +223,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { LOG.info("connection is alive, will reuse this connection."); } else { LOG.info("Create new connection for reader."); - conn = DBUtil.getConnection(ObReaderUtils.DATABASE_TYPE, jdbcUrl, username, password); + conn = DBUtil.getConnection(ObReaderUtils.databaseType, jdbcUrl, username, password); ObReaderUtils.initConn4Reader(conn, queryTimeoutSeconds); context.setConn(conn); } @@ -287,7 +283,7 @@ public class ReaderTask extends CommonRdbmsReader.Task { ObReaderUtils.close(null, null, context.getConn()); context.setConn(null); LOG.error("reader data fail", e); - throw RdbmsException.asQueryException(ObReaderUtils.DATABASE_TYPE, e, context.getQuerySql(), + throw RdbmsException.asQueryException(ObReaderUtils.databaseType, e, context.getQuerySql(), context.getTable(), username); } finally { perfRecord.end(); diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 2290fb43..20c2f922 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -1,52 +1,71 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.TreeMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.Set; -import java.util.TreeSet; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.alibaba.datax.common.element.BoolColumn; -import com.alibaba.datax.common.element.BytesColumn; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.DateColumn; -import com.alibaba.datax.common.element.DoubleColumn; -import com.alibaba.datax.common.element.LongColumn; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.element.*; import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.*; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ObReaderUtils { private static final Logger LOG = LoggerFactory.getLogger(ObReaderUtils.class); + private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; + private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; + private static Set databaseKeywords; final static public String OB_COMPATIBLE_MODE = "obCompatibilityMode"; final static public String OB_COMPATIBLE_MODE_ORACLE = "ORACLE"; final static public String OB_COMPATIBLE_MODE_MYSQL = "MYSQL"; - public static DataBaseType DATABASE_TYPE = DataBaseType.MySql; + public static String compatibleMode = OB_COMPATIBLE_MODE_MYSQL; + + public static final DataBaseType databaseType = DataBaseType.OceanBase; + + + private static Set keywordsFromString2HashSet(final String keywords) { + return new HashSet(Arrays.asList(keywords.split(","))); + } + + public static String escapeDatabaseKeywords(String keyword) { + if (databaseKeywords == null) { + if (isOracleMode(compatibleMode)) { + databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); + } else { + databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); + } + } + char escapeChar = isOracleMode(compatibleMode) ? '"' : '`'; + if (databaseKeywords.contains(keyword.toUpperCase())) { + keyword = escapeChar + keyword + escapeChar; + } + return keyword; + } + + public static void escapeDatabaseKeywords(List keywords) { + for (int i = 0; i < keywords.size(); i++) { + keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + } + } + + public static Boolean isEscapeMode(String keyword) { + if (isOracleMode(compatibleMode)) { + return keyword.startsWith("\"") && keyword.endsWith("\""); + } else { + return keyword.startsWith("`") && keyword.endsWith("`"); + } + } public static void initConn4Reader(Connection conn, long queryTimeoutSeconds) { String setQueryTimeout = "set ob_query_timeout=" + (queryTimeoutSeconds * 1000 * 1000L); @@ -57,7 +76,7 @@ public class ObReaderUtils { stmt = conn.createStatement(); stmt.execute(setQueryTimeout); stmt.execute(setTrxTimeout); - LOG.warn("setAutoCommit=true;"+setQueryTimeout+";"+setTrxTimeout+";"); + LOG.warn("setAutoCommit=true;" + setQueryTimeout + ";" + setTrxTimeout + ";"); } catch (Throwable e) { LOG.warn("initConn4Reader fail", e); } finally { @@ -73,7 +92,6 @@ public class ObReaderUtils { } /** - * * @param conn * @param context */ @@ -84,8 +102,11 @@ public class ObReaderUtils { return; } List columns = context.getColumns(); + // 最后参与排序的索引列 + context.setPkColumns(pkColumns); + int[] pkIndexs = new int[pkColumns.length]; for (int i = 0, n = pkColumns.length; i < n; i++) { String pkc = pkColumns[i]; @@ -112,9 +133,9 @@ public class ObReaderUtils { String sql = "show index from " + tableName + " where Key_name='PRIMARY'"; if (isOracleMode(context.getCompatibleMode())) { tableName = tableName.toUpperCase(); - sql = "SELECT cols.column_name Column_name "+ + sql = "SELECT cols.column_name Column_name " + "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName+ "' AND cons.constraint_type = 'P' " + + "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type = 'P' " + "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; } LOG.info("get primary key by sql: " + sql); @@ -126,11 +147,16 @@ public class ObReaderUtils { ps = conn.createStatement(); rs = ps.executeQuery(sql); while (rs.next()) { - String columnName = StringUtils.lowerCase(rs.getString("Column_name")); + String columnName = rs.getString("Column_name"); + columnName = escapeDatabaseKeywords(columnName); + if (!isEscapeMode(columnName)) { + columnName.toLowerCase(); + } if (!realIndex.contains(columnName)) { realIndex.add(columnName); } } + String[] pks = new String[realIndex.size()]; realIndex.toArray(pks); return pks; @@ -156,7 +182,7 @@ public class ObReaderUtils { if (StringUtils.isNotEmpty(indexName)) { String weakReadHint = weakRead ? "+READ_CONSISTENCY(WEAK)," : "+"; sql += " /*" + weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; - } else if (weakRead){ + } else if (weakRead) { sql += " /*+READ_CONSISTENCY(WEAK)*/ "; } sql += StringUtils.join(context.getColumns(), ','); @@ -187,7 +213,6 @@ public class ObReaderUtils { * 增量查的SQL * * @param conn - * * @param context * @return sql */ @@ -197,8 +222,8 @@ public class ObReaderUtils { String sql = "select "; if (StringUtils.isNotEmpty(indexName)) { String weakReadHint = weakRead ? "+READ_CONSISTENCY(WEAK)," : "+"; - sql += " /*"+ weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; - } else if (weakRead){ + sql += " /*" + weakReadHint + "index(" + context.getTable() + " " + indexName + ")*/ "; + } else if (weakRead) { sql += " /*+READ_CONSISTENCY(WEAK)*/ "; } sql += StringUtils.join(context.getColumns(), ',') + " from " + context.getTable(); @@ -295,7 +320,7 @@ public class ObReaderUtils { final char rightBracket = ')'; if (str != null && str.contains(String.valueOf(leftBracket)) && str.contains(String.valueOf(rightBracket)) && str.indexOf(leftBracket) < str.indexOf(rightBracket)) { - return str.substring(str.indexOf(leftBracket)+1, str.indexOf(rightBracket)); + return str.substring(str.indexOf(leftBracket) + 1, str.indexOf(rightBracket)); } return str; } @@ -364,7 +389,7 @@ public class ObReaderUtils { /** * 找出where条件中的列名,目前仅支持全部为and条件,并且操作符为大于、大约等于、等于、小于、小于等于和不等于的表达式。 - * + *

* test coverage: - c6 = 20180710 OR c4 = 320: no index selected - 20180710 * = c6: correct index selected - 20180710 = c6 and c4 = 320 or c2 < 100: no * index selected @@ -416,17 +441,17 @@ public class ObReaderUtils { if (isOracleMode(compatibleMode)) { tableName = tableName.toUpperCase(); sql = "SELECT INDEX_NAME Key_name, COLUMN_NAME Column_name " + - "from dba_ind_columns where TABLE_NAME = '" + tableName +"' " + + "from dba_ind_columns where TABLE_NAME = '" + tableName + "' " + " union all " + - "SELECT DISTINCT " + - "CASE " + - "WHEN cons.CONSTRAINT_TYPE = 'P' THEN 'PRIMARY' " + - "WHEN cons.CONSTRAINT_TYPE = 'U' THEN cons.CONSTRAINT_NAME " + - "ELSE '' " + - "END AS Key_name, " + - "cols.column_name Column_name " + - "FROM all_constraints cons, all_cons_columns cols " + - "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type in('P', 'U') " + + "SELECT DISTINCT " + + "CASE " + + "WHEN cons.CONSTRAINT_TYPE = 'P' THEN 'PRIMARY' " + + "WHEN cons.CONSTRAINT_TYPE = 'U' THEN cons.CONSTRAINT_NAME " + + "ELSE '' " + + "END AS Key_name, " + + "cols.column_name Column_name " + + "FROM all_constraints cons, all_cons_columns cols " + + "WHERE cols.table_name = '" + tableName + "' AND cons.constraint_type in('P', 'U') " + "AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner"; } Statement stmt = null; @@ -469,14 +494,13 @@ public class ObReaderUtils { } /** - * * @param conn * @param table * @param colNamesInCondition * @return */ private static List getIndexName(Connection conn, String table, - Set colNamesInCondition, String compatibleMode) { + Set colNamesInCondition, String compatibleMode) { List indexNames = new ArrayList(); if (colNamesInCondition == null || colNamesInCondition.size() == 0) { LOG.info("there is no qulified conditions in the where clause, skip index selection."); @@ -540,7 +564,7 @@ public class ObReaderUtils { Map index = new TreeMap(); List columnList = allIndexInTab.get(indexName); for (int i = 1; i <= columnList.size(); i++) { - index.put(i, columnList.get(i-1)); + index.put(i, columnList.get(i - 1)); } allIndexs.put(indexName, index); } else { @@ -644,19 +668,19 @@ public class ObReaderUtils { public static void binding(PreparedStatement ps, List list) throws SQLException { for (int i = 0, n = list.size(); i < n; i++) { Column c = list.get(i); - if(c instanceof BoolColumn){ - ps.setLong(i + 1, ((BoolColumn)c).asLong()); - }else if(c instanceof BytesColumn){ - ps.setBytes(i + 1, ((BytesColumn)c).asBytes()); - }else if(c instanceof DateColumn){ - ps.setTimestamp(i + 1, new Timestamp(((DateColumn)c).asDate().getTime())); - }else if(c instanceof DoubleColumn){ - ps.setDouble(i + 1, ((DoubleColumn)c).asDouble()); - }else if(c instanceof LongColumn){ - ps.setLong(i + 1, ((LongColumn)c).asLong()); - }else if(c instanceof StringColumn){ - ps.setString(i + 1, ((StringColumn)c).asString()); - }else{ + if (c instanceof BoolColumn) { + ps.setLong(i + 1, ((BoolColumn) c).asLong()); + } else if (c instanceof BytesColumn) { + ps.setBytes(i + 1, ((BytesColumn) c).asBytes()); + } else if (c instanceof DateColumn) { + ps.setTimestamp(i + 1, new Timestamp(((DateColumn) c).asDate().getTime())); + } else if (c instanceof DoubleColumn) { + ps.setDouble(i + 1, ((DoubleColumn) c).asDouble()); + } else if (c instanceof LongColumn) { + ps.setLong(i + 1, ((LongColumn) c).asLong()); + } else if (c instanceof StringColumn) { + ps.setString(i + 1, ((StringColumn) c).asString()); + } else { ps.setObject(i + 1, c.getRawData()); } } @@ -692,6 +716,6 @@ public class ObReaderUtils { } public static boolean isOracleMode(String mode) { - return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equals(mode)); + return (mode != null && OB_COMPATIBLE_MODE_ORACLE.equalsIgnoreCase(mode)); } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java index ba754a37..17655a52 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java @@ -162,6 +162,7 @@ public class TaskContext { public String getUserSavePoint() { return userSavePoint; } + public void setUserSavePoint(String userSavePoint) { this.userSavePoint = userSavePoint; } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index 89ef1c52..ede2eb01 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -1,15 +1,5 @@ package com.alibaba.datax.plugin.writer.oceanbasev10writer; -import java.sql.*; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; @@ -20,8 +10,16 @@ import com.alibaba.datax.plugin.rdbms.writer.Constant; import com.alibaba.datax.plugin.rdbms.writer.Key; import com.alibaba.datax.plugin.rdbms.writer.util.WriterUtil; import com.alibaba.datax.plugin.writer.oceanbasev10writer.task.ConcurrentTableWriterTask; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.task.SingleTableWriterTask; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.DbUtils; import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.List; /** * 2016-04-07 @@ -61,6 +59,19 @@ public class OceanBaseV10Writer extends Writer { public void init() { this.originalConfig = super.getPluginJobConf(); checkCompatibleMode(originalConfig); + //将config中的column和table中的关键字进行转义 + List columns = originalConfig.getList(Key.COLUMN, String.class); + ObWriterUtils.escapeDatabaseKeywords(columns); + originalConfig.set(Key.COLUMN, columns); + + List conns = originalConfig.getList(Constant.CONN_MARK, JSONObject.class); + for (int i = 0; i < conns.size(); i++) { + JSONObject conn = conns.get(i); + Configuration connConfig = Configuration.from(conn.toString()); + List tables = connConfig.getList(Key.TABLE, String.class); + ObWriterUtils.escapeDatabaseKeywords(tables); + originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, i, Key.TABLE), tables); + } this.commonJob = new CommonRdbmsWriter.Job(DATABASE_TYPE); this.commonJob.init(this.originalConfig); } @@ -223,6 +234,7 @@ public class OceanBaseV10Writer extends Writer { /** * 注意:此方法每个 Task 都会执行一次。 最佳实践:此处适当封装确保简洁清晰完成数据写入工作。 */ + @Override public void startWrite(RecordReceiver recordReceiver) { this.writerTask.startWrite(recordReceiver, this.writerSliceConfig, super.getTaskPluginCollector()); } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java index 49e5c05f..b0611642 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/ext/ServerConnectInfo.java @@ -24,14 +24,32 @@ public class ServerConnectInfo { this.tenantName = ss[1].trim().split(":")[1]; this.jdbcUrl = ss[2].replace("jdbc:mysql:", "jdbc:oceanbase:"); } else { - throw new RuntimeException ("jdbc url format is not correct: " + jdbcUrl); + this.jdbcUrl = jdbcUrl.replace("jdbc:mysql:", "jdbc:oceanbase:"); + if (username.contains("@") && username.contains("#")) { + this.userName = username.substring(0, username.indexOf("@")); + this.tenantName = username.substring(username.indexOf("@") + 1, username.indexOf("#")); + this.clusterName = username.substring(username.indexOf("#") + 1); + } else if (username.contains(":")) { + String[] config = username.split(":"); + if (config.length != 3) { + throw new RuntimeException ("username format is not correct: " + username); + } + this.clusterName = config[0]; + this.tenantName = config[1]; + this.userName = config[2]; + } else { + this.clusterName = null; + this.tenantName = null; + this.userName = username; + } } + this.password = password; parseJdbcUrl(jdbcUrl); } private void parseJdbcUrl(final String jdbcUrl) { - Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w]+)\\?"); + Pattern pattern = Pattern.compile("//([\\w\\.\\-]+:\\d+)/([\\w-]+)\\?"); Matcher matcher = pattern.matcher(jdbcUrl); if (matcher.find()) { String ipPort = matcher.group(1); @@ -51,8 +69,11 @@ public class ServerConnectInfo { } public String getFullUserName() { - StringBuilder builder = new StringBuilder(); - builder.append(userName).append("@").append(tenantName).append("#").append(clusterName); + StringBuilder builder = new StringBuilder(userName); + if (tenantName != null && clusterName != null) { + builder.append("@").append(tenantName).append("#").append(clusterName); + } + return builder.toString(); } } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java index 084acbeb..e6b4a561 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/ConcurrentTableWriterTask.java @@ -1,7 +1,27 @@ package com.alibaba.datax.plugin.writer.oceanbasev10writer.task; +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.rdbms.util.DBUtil; +import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; +import com.alibaba.datax.plugin.rdbms.util.DataBaseType; +import com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.Config; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ConnHolder; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ObClientConnHolder; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ServerConnectInfo; +import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; +import com.alipay.oceanbase.obproxy.data.TableEntryKey; +import com.alipay.oceanbase.obproxy.util.ObPartitionIdCalculator; +import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.sql.Connection; -//import java.sql.PreparedStatement; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; @@ -16,27 +36,7 @@ import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ObClientConnHolder; -import org.apache.commons.lang3.tuple.Pair; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.RecordReceiver; -import com.alibaba.datax.common.plugin.TaskPluginCollector; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.rdbms.util.DBUtil; -import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; -import com.alibaba.datax.plugin.rdbms.util.DataBaseType; -import com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.Config; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ConnHolder; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.ext.ServerConnectInfo; -import com.alibaba.datax.plugin.writer.oceanbasev10writer.util.ObWriterUtils; -import com.alipay.oceanbase.obproxy.data.TableEntryKey; -import com.alipay.oceanbase.obproxy.util.ObPartitionIdCalculator; +//import java.sql.PreparedStatement; public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { private static final Logger LOG = LoggerFactory.getLogger(ConcurrentTableWriterTask.class); @@ -62,6 +62,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { private ObPartitionIdCalculator partCalculator = null; private HashMap> groupInsertValues; + List unknownPartRecords = new ArrayList(); // private List unknownPartRecords; private List partitionKeyIndexes; @@ -104,10 +105,14 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { connectInfo.getFullUserName(), connectInfo.password); checkConnHolder.initConnection(); if (isOracleCompatibleMode) { - connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); - table = table.toUpperCase(); - LOG.info(String.format("this is oracle compatible mode, change database to %s, table to %s", - connectInfo.databaseName, table)); + connectInfo.databaseName = connectInfo.databaseName.toUpperCase(); + //在转义的情况下不翻译 + if (!(table.startsWith("\"") && table.endsWith("\""))) { + table = table.toUpperCase(); + } + + LOG.info(String.format("this is oracle compatible mode, change database to %s, table to %s", + connectInfo.databaseName, table)); } if (config.getBool(Config.USE_PART_CALCULATOR, Config.DEFAULT_USE_PART_CALCULATOR)) { @@ -150,7 +155,7 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { partCalculator = new ObPartitionIdCalculator(connectInfo.ipPort, tableEntryKey); } catch (Exception ex) { ++retry; - LOG.warn("create new part calculator failed, retry ... {}", retry, ex); + LOG.warn("create new part calculator failed, retry {}: {}", retry, ex.getMessage()); } } while (partCalculator == null && retry < 3); // try 3 times } @@ -289,20 +294,15 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } private void addLeftRecords() { + //不需要刷新Cache,已经是最后一批数据了 for (List groupValues : groupInsertValues.values()) { if (groupValues.size() > 0 ) { - int retry = 0; - while (true) { - try { - concurrentWriter.addBatchRecords(groupValues); - break; - } catch (InterruptedException e) { - retry++; - LOG.info("Concurrent table writer is interrupted, retry {}", retry); - } - } + addRecordsToWriteQueue(groupValues); } } + if (unknownPartRecords.size() > 0) { + addRecordsToWriteQueue(unknownPartRecords); + } } private void addRecordToCache(final Record record) { @@ -326,41 +326,40 @@ public class ConcurrentTableWriterTask extends CommonRdbmsWriter.Task { } groupValues.add(record); if (groupValues.size() >= batchSize) { - int i = 0; - while (true) { - if (i > 0) { - LOG.info("retry add batch record the {} times", i); - } - try { - concurrentWriter.addBatchRecords(groupValues); - printEveryTime(); - break; - } catch (InterruptedException e) { - LOG.info("Concurrent table writer is interrupted"); - } - } - groupValues = new ArrayList(batchSize); + groupValues = addRecordsToWriteQueue(groupValues); groupInsertValues.put(partId, groupValues); } } else { - LOG.warn("add unknown part record {}", record); - List unknownPartRecords = new ArrayList(); + LOG.debug("add unknown part record {}", record); unknownPartRecords.add(record); - int i = 0; - while (true) { - if (i > 0) { - LOG.info("retry add batch record the {} times", i); - } - try { - concurrentWriter.addBatchRecords(unknownPartRecords); - break; - } catch (InterruptedException e) { - LOG.info("Concurrent table writer is interrupted"); - } + if (unknownPartRecords.size() >= batchSize) { + unknownPartRecords = addRecordsToWriteQueue(unknownPartRecords); } + } } + /** + * + * @param records + * @return 返回一个新的Cache用于存储接下来的数据 + */ + private List addRecordsToWriteQueue(List records) { + int i = 0; + while (true) { + if (i > 0) { + LOG.info("retry add batch record the {} times", i); + } + try { + concurrentWriter.addBatchRecords(records); + break; + } catch (InterruptedException e) { + i++; + LOG.info("Concurrent table writer is interrupted"); + } + } + return new ArrayList(batchSize); + } private void checkMemStore() { Connection checkConn = checkConnHolder.reconnect(); long now = System.currentTimeMillis(); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java index 522d91a5..968908ca 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/task/InsertTask.java @@ -65,6 +65,7 @@ public class InsertTask implements Runnable { this.writeRecordSql = writeRecordSql; this.isStop = false; this.deleteMeta = deleteMeta; + connHolder.initConnection(); } void setWriterTask(ConcurrentTableWriterTask writerTask) { @@ -151,7 +152,6 @@ public class InsertTask implements Runnable { public void doMultiInsert(final List buffer, final boolean printCost, final long restrict) { checkMemstore(); - connHolder.initConnection(); Connection conn = connHolder.getConn(); boolean success = false; long cost = 0; @@ -165,7 +165,6 @@ public class InsertTask implements Runnable { } catch (InterruptedException e) { LOG.info("thread interrupted ..., ignore"); } - connHolder.initConnection(); conn = connHolder.getConn(); LOG.info("retry {}, start do batch insert, size={}", i, buffer.size()); checkMemstore(); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index 368c3d17..ff1648a1 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -11,15 +11,47 @@ import org.slf4j.LoggerFactory; import java.sql.*; import java.util.*; -import java.util.stream.Collectors; public class ObWriterUtils { - protected static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private static final String MYSQL_KEYWORDS = "ACCESSIBLE,ACCOUNT,ACTION,ADD,AFTER,AGAINST,AGGREGATE,ALGORITHM,ALL,ALTER,ALWAYS,ANALYSE,AND,ANY,AS,ASC,ASCII,ASENSITIVE,AT,AUTO_INCREMENT,AUTOEXTEND_SIZE,AVG,AVG_ROW_LENGTH,BACKUP,BEFORE,BEGIN,BETWEEN,BIGINT,BINARY,BINLOG,BIT,BLOB,BLOCK,BOOL,BOOLEAN,BOTH,BTREE,BY,BYTE,CACHE,CALL,CASCADE,CASCADED,CASE,CATALOG_NAME,CHAIN,CHANGE,CHANGED,CHANNEL,CHAR,CHARACTER,CHARSET,CHECK,CHECKSUM,CIPHER,CLASS_ORIGIN,CLIENT,CLOSE,COALESCE,CODE,COLLATE,COLLATION,COLUMN,COLUMN_FORMAT,COLUMN_NAME,COLUMNS,COMMENT,COMMIT,COMMITTED,COMPACT,COMPLETION,COMPRESSED,COMPRESSION,CONCURRENT,CONDITION,CONNECTION,CONSISTENT,CONSTRAINT,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONTAINS,CONTEXT,CONTINUE,CONVERT,CPU,CREATE,CROSS,CUBE,CURRENT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,CURSOR_NAME,DATA,DATABASE,DATABASES,DATAFILE,DATE,DATETIME,DAY,DAY_HOUR,DAY_MICROSECOND,DAY_MINUTE,DAY_SECOND,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULT_AUTH,DEFINER,DELAY_KEY_WRITE,DELAYED,DELETE,DES_KEY_FILE,DESC,DESCRIBE,DETERMINISTIC,DIAGNOSTICS,DIRECTORY,DISABLE,DISCARD,DISK,DISTINCT,DISTINCTROW,DIV,DO,DOUBLE,DROP,DUAL,DUMPFILE,DUPLICATE,DYNAMIC,EACH,ELSE,ELSEIF,ENABLE,ENCLOSED,ENCRYPTION,END,ENDS,ENGINE,ENGINES,ENUM,ERROR,ERRORS,ESCAPE,ESCAPED,EVENT,EVENTS,EVERY,EXCHANGE,EXECUTE,EXISTS,EXIT,EXPANSION,EXPIRE,EXPLAIN,EXPORT,EXTENDED,EXTENT_SIZE,FAST,FAULTS,FETCH,FIELDS,FILE,FILE_BLOCK_SIZE,FILTER,FIRST,FIXED,FLOAT,FLOAT4,FLOAT8,FLUSH,FOLLOWS,FOR,FORCE,FOREIGN,FORMAT,FOUND,FROM,FULL,FULLTEXT,FUNCTION,GENERAL,GENERATED,GEOMETRY,GEOMETRYCOLLECTION,GET,GET_FORMAT,GLOBAL,GRANT,GRANTS,GROUP,GROUP_REPLICATION,HANDLER,HASH,HAVING,HELP,HIGH_PRIORITY,HOST,HOSTS,HOUR,HOUR_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,IDENTIFIED,IF,IGNORE,IGNORE_SERVER_IDS,IMPORT,IN,INDEX,INDEXES,INFILE,INITIAL_SIZE,INNER,INOUT,INSENSITIVE,INSERT,INSERT_METHOD,INSTALL,INSTANCE,INT,INT1,INT2,INT3,INT4,INT8,INTEGER,INTERVAL,INTO,INVOKER,IO,IO_AFTER_GTIDS,IO_BEFORE_GTIDS,IO_THREAD,IPC,IS,ISOLATION,ISSUER,ITERATE,JOIN,JSON,KEY,KEY_BLOCK_SIZE,KEYS,KILL,LANGUAGE,LAST,LEADING,LEAVE,LEAVES,LEFT,LESS,LEVEL,LIKE,LIMIT,LINEAR,LINES,LINESTRING,LIST,LOAD,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCK,LOCKS,LOGFILE,LOGS,LONG,LONGBLOB,LONGTEXT,LOOP,LOW_PRIORITY,MASTER,MASTER_AUTO_POSITION,MASTER_BIND,MASTER_CONNECT_RETRY,MASTER_DELAY,MASTER_HEARTBEAT_PERIOD,MASTER_HOST,MASTER_LOG_FILE,MASTER_LOG_POS,MASTER_PASSWORD,MASTER_PORT,MASTER_RETRY_COUNT,MASTER_SERVER_ID,MASTER_SSL,MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY,MASTER_SSL_VERIFY_SERVER_CERT,MASTER_TLS_VERSION,MASTER_USER,MATCH,MAX_CONNECTIONS_PER_HOUR,MAX_QUERIES_PER_HOUR,MAX_ROWS,MAX_SIZE,MAX_STATEMENT_TIME,MAX_UPDATES_PER_HOUR,MAX_USER_CONNECTIONS,MAXVALUE,MEDIUM,MEDIUMBLOB,MEDIUMINT,MEDIUMTEXT,MEMORY,MERGE,MESSAGE_TEXT,MICROSECOND,MIDDLEINT,MIGRATE,MIN_ROWS,MINUTE,MINUTE_MICROSECOND,MINUTE_SECOND,MOD,MODE,MODIFIES,MODIFY,MONTH,MULTILINESTRING,MULTIPOINT,MULTIPOLYGON,MUTEX,MYSQL_ERRNO,NAME,NAMES,NATIONAL,NATURAL,NCHAR,NDB,NDBCLUSTER,NEVER,NEW,NEXT,NO,NO_WAIT,NO_WRITE_TO_BINLOG,NODEGROUP,NONBLOCKING,NONE,NOT,NULL,NUMBER,NUMERIC,NVARCHAR,OFFSET,OLD_PASSWORD,ON,ONE,ONLY,OPEN,OPTIMIZE,OPTIMIZER_COSTS,OPTION,OPTIONALLY,OPTIONS,OR,ORDER,OUT,OUTER,OUTFILE,OWNER,PACK_KEYS,PAGE,PARSE_GCOL_EXPR,PARSER,PARTIAL,PARTITION,PARTITIONING,PARTITIONS,PASSWORD,PHASE,PLUGIN,PLUGIN_DIR,PLUGINS,POINT,POLYGON,PORT,PRECEDES,PRECISION,PREPARE,PRESERVE,PREV,PRIMARY,PRIVILEGES,PROCEDURE,PROCESSLIST,PROFILE,PROFILES,PROXY,PURGE,QUARTER,QUERY,QUICK,RANGE,READ,READ_ONLY,READ_WRITE,READS,REAL,REBUILD,RECOVER,REDO_BUFFER_SIZE,REDOFILE,REDUNDANT,REFERENCES,REGEXP,RELAY,RELAY_LOG_FILE,RELAY_LOG_POS,RELAY_THREAD,RELAYLOG,RELEASE,RELOAD,REMOVE,RENAME,REORGANIZE,REPAIR,REPEAT,REPEATABLE,REPLACE,REPLICATE_DO_DB,REPLICATE_DO_TABLE,REPLICATE_IGNORE_DB,REPLICATE_IGNORE_TABLE,REPLICATE_REWRITE_DB,REPLICATE_WILD_DO_TABLE,REPLICATE_WILD_IGNORE_TABLE,REPLICATION,REQUIRE,RESET,RESIGNAL,RESTORE,RESTRICT,RESUME,RETURN,RETURNED_SQLSTATE,RETURNS,REVERSE,REVOKE,RIGHT,RLIKE,ROLLBACK,ROLLUP,ROTATE,ROUTINE,ROW,ROW_COUNT,ROW_FORMAT,ROWS,RTREE,SAVEPOINT,SCHEDULE,SCHEMA,SCHEMA_NAME,SCHEMAS,SECOND,SECOND_MICROSECOND,SECURITY,SELECT,SENSITIVE,SEPARATOR,SERIAL,SERIALIZABLE,SERVER,SESSION,SET,SHARE,SHOW,SHUTDOWN,SIGNAL,SIGNED,SIMPLE,SLAVE,SLOW,SMALLINT,SNAPSHOT,SOCKET,SOME,SONAME,SOUNDS,SOURCE,SPATIAL,SPECIFIC,SQL,SQL_AFTER_GTIDS,SQL_AFTER_MTS_GAPS,SQL_BEFORE_GTIDS,SQL_BIG_RESULT,SQL_BUFFER_RESULT,SQL_CACHE,SQL_CALC_FOUND_ROWS,SQL_NO_CACHE,SQL_SMALL_RESULT,SQL_THREAD,SQL_TSI_DAY,SQL_TSI_HOUR,SQL_TSI_MINUTE,SQL_TSI_MONTH,SQL_TSI_QUARTER,SQL_TSI_SECOND,SQL_TSI_WEEK,SQL_TSI_YEAR,SQLEXCEPTION,SQLSTATE,SQLWARNING,SSL,STACKED,START,STARTING,STARTS,STATS_AUTO_RECALC,STATS_PERSISTENT,STATS_SAMPLE_PAGES,STATUS,STOP,STORAGE,STORED,STRAIGHT_JOIN,STRING,SUBCLASS_ORIGIN,SUBJECT,SUBPARTITION,SUBPARTITIONS,SUPER,SUSPEND,SWAPS,SWITCHES,TABLE,TABLE_CHECKSUM,TABLE_NAME,TABLES,TABLESPACE,TEMPORARY,TEMPTABLE,TERMINATED,TEXT,THAN,THEN,TIME,TIMESTAMP,TIMESTAMPADD,TIMESTAMPDIFF,TINYBLOB,TINYINT,TINYTEXT,TO,TRAILING,TRANSACTION,TRIGGER,TRIGGERS,TRUNCATE,TYPE,TYPES,UNCOMMITTED,UNDEFINED,UNDO,UNDO_BUFFER_SIZE,UNDOFILE,UNICODE,UNINSTALL,UNION,UNIQUE,UNKNOWN,UNLOCK,UNSIGNED,UNTIL,UPDATE,UPGRADE,USAGE,USE,USE_FRM,USER,USER_RESOURCES,USING,UTC_DATE,UTC_TIME,UTC_TIMESTAMP,VALIDATION,VALUE,VALUES,VARBINARY,VARCHAR,VARCHARACTER,VARIABLES,VARYING,VIEW,VIRTUAL,WAIT,WARNINGS,WEEK,WEIGHT_STRING,WHEN,WHERE,WHILE,WITH,WITHOUT,WORK,WRAPPER,WRITE,X509,XA,XID,XML,XOR,YEAR,YEAR_MONTH,ZEROFILL,FALSE,TRUE"; + private static final String ORACLE_KEYWORDS = "ACCESS,ADD,ALL,ALTER,AND,ANY,ARRAYLEN,AS,ASC,AUDIT,BETWEEN,BY,CHAR,CHECK,CLUSTER,COLUMN,COMMENT,COMPRESS,CONNECT,CREATE,CURRENT,DATE,DECIMAL,DEFAULT,DELETE,DESC,DISTINCT,DROP,ELSE,EXCLUSIVE,EXISTS,FILE,FLOAT,FOR,FROM,GRANT,GROUP,HAVING,IDENTIFIED,IMMEDIATE,IN,INCREMENT,INDEX,INITIAL,INSERT,INTEGER,INTERSECT,INTO,IS,LEVEL,LIKE,LOCK,LONG,MAXEXTENTS,MINUS,MODE,MODIFY,NOAUDIT,NOCOMPRESS,NOT,NOTFOUND,NOWAIT,NULL,NUMBER,OF,OFFLINE,ON,ONLINE,OPTION,OR,ORDER,PCTFREE,PRIOR,PRIVILEGES,PUBLIC,RAW,RENAME,RESOURCE,REVOKE,ROW,ROWID,ROWLABEL,ROWNUM,ROWS,SELECT,SESSION,SET,SHARE,SIZE,SMALLINT,SQLBUF,START,SUCCESSFUL,SYNONYM,TABLE,THEN,TO,TRIGGER,UID,UNION,UNIQUE,UPDATE,USER,VALIDATE,VALUES,VARCHAR,VARCHAR2,VIEW,WHENEVER,WHERE,WITH"; private static String CHECK_MEMSTORE = "select 1 from %s.gv$memstore t where t.total>t.mem_limit * ?"; - + private static Set databaseKeywords; private static String compatibleMode = null; + protected static final Logger LOG = LoggerFactory.getLogger(Task.class); + private static Set keywordsFromString2HashSet(final String keywords) { + return new HashSet(Arrays.asList(keywords.split(","))); + } + public static String escapeDatabaseKeywords(String keyword) { + if (databaseKeywords == null) { + if (isOracleMode()) { + databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); + } else { + databaseKeywords = keywordsFromString2HashSet(MYSQL_KEYWORDS); + } + } + char escapeChar = isOracleMode() ? '"' : '`'; + if (databaseKeywords.contains(keyword.toUpperCase())) { + keyword = escapeChar + keyword + escapeChar; + } + return keyword; + } + + public static void escapeDatabaseKeywords(List keywords) { + for (int i = 0; i < keywords.size(); i++) { + keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + } + } + public static Boolean isEscapeMode(String keyword){ + if(isOracleMode()){ + return keyword.startsWith("\"") && keyword.endsWith("\""); + }else{ + return keyword.startsWith("`") && keyword.endsWith("`"); + } + } public static boolean isMemstoreFull(Connection conn, double memstoreThreshold) { PreparedStatement ps = null; ResultSet rs = null; @@ -70,7 +102,11 @@ public class ObWriterUtils { } private static int[] getColumnIndex(List columnsInIndex, List allColumns) { - allColumns = allColumns.stream().map(String::toUpperCase).collect(Collectors.toList()); + for (int i = 0; i < allColumns.size(); i++) { + if (!ObWriterUtils.isEscapeMode(allColumns.get(i))) { + allColumns.set(i, allColumns.get(i).toUpperCase()); + } + } int[] colIdx = new int[columnsInIndex.size()]; for (int i = 0; i < columnsInIndex.size(); i++) { int index = allColumns.indexOf(columnsInIndex.get(i)); @@ -122,7 +158,11 @@ public class ObWriterUtils { rs = stmt.executeQuery(sql); while (rs.next()) { String keyName = rs.getString("Key_name"); - String columnName = StringUtils.upperCase(rs.getString("Column_name")); + String columnName = rs.getString("Column_name"); + columnName=escapeDatabaseKeywords(columnName); + if(!ObWriterUtils.isEscapeMode(columnName)){ + columnName = columnName.toUpperCase(); + } List s = uniqueKeys.get(keyName); if (s == null) { s = new ArrayList(); @@ -135,6 +175,7 @@ public class ObWriterUtils { } finally { asyncClose(rs, stmt, null); } + //ObWriterUtils.escapeDatabaseKeywords(uniqueKeys); return uniqueKeys; } @@ -291,6 +332,7 @@ public class ObWriterUtils { * @param e * @return */ + public static boolean isFatalError(SQLException e) { String sqlState = e.getSQLState(); if (StringUtils.startsWith(sqlState, "08")) { diff --git a/odpsreader/pom.xml b/odpsreader/pom.xml index 5762a57b..3f2c4acb 100755 --- a/odpsreader/pom.xml +++ b/odpsreader/pom.xml @@ -36,18 +36,18 @@ guava 16.0.1 - - org.bouncycastle - bcprov-jdk15on - 1.52 - system - ${basedir}/src/main/libs/bcprov-jdk15on-1.52.jar - - - com.aliyun.odps - odps-sdk-core - 0.20.7-public - + + org.xerial + sqlite-jdbc + 3.34.0 + + + + + com.aliyun.odps + odps-sdk-core + 0.38.4-public + org.mockito @@ -87,29 +87,22 @@ 1.4.10 test - - org.mockito - mockito-core - 1.8.5 - test - - - org.powermock - powermock-api-mockito - 1.4.10 - test - - - - org.powermock - powermock-module-junit4 - 1.4.10 - test + commons-codec + commons-codec + 1.8 + + + src/main/java + + **/*.properties + + + diff --git a/odpsreader/src/main/assembly/package.xml b/odpsreader/src/main/assembly/package.xml index 9ec3309e..db659a17 100755 --- a/odpsreader/src/main/assembly/package.xml +++ b/odpsreader/src/main/assembly/package.xml @@ -23,13 +23,6 @@ plugin/reader/odpsreader - - src/main/libs - - *.* - - plugin/reader/odpsreader/libs - diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Constant.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Constant.java index c3c674dd..dee2ef5c 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Constant.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Constant.java @@ -31,5 +31,7 @@ public class Constant { public static final String PARTITION_COLUMNS = "partitionColumns"; public static final String PARSED_COLUMNS = "parsedColumns"; - + + public static final String PARTITION_FILTER_HINT = "/*query*/"; + } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Key.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Key.java index 9537cb93..2cee65d1 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Key.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/Key.java @@ -5,6 +5,8 @@ public class Key { public final static String ACCESS_ID = "accessId"; public final static String ACCESS_KEY = "accessKey"; + + public final static String SECURITY_TOKEN = "securityToken"; public static final String PROJECT = "project"; @@ -30,5 +32,14 @@ public class Key { public final static String IS_COMPRESS = "isCompress"; public final static String MAX_RETRY_TIME = "maxRetryTime"; + + // 分区不存在时 + public final static String SUCCESS_ON_NO_PATITION="successOnNoPartition"; + // preSql + public final static String PRE_SQL="preSql"; + + // postSql + public final static String POST_SQL="postSql"; + } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/LocalStrings.properties b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/LocalStrings.properties new file mode 100644 index 00000000..ef183002 --- /dev/null +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/LocalStrings.properties @@ -0,0 +1,64 @@ +description.DATAX_R_ODPS_001=\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 +description.DATAX_R_ODPS_002=\u914D\u7F6E\u503C\u4E0D\u5408\u6CD5 +description.DATAX_R_ODPS_003=\u521B\u5EFAODPS Session\u5931\u8D25 +description.DATAX_R_ODPS_004=\u83B7\u53D6ODPS Session\u5931\u8D25 +description.DATAX_R_ODPS_005=\u8BFB\u53D6ODPS\u6570\u636E\u5931\u8D25 +description.DATAX_R_ODPS_006=\u83B7\u53D6AK\u5931\u8D25 +description.DATAX_R_ODPS_007=\u8BFB\u53D6\u6570\u636E\u53D1\u751F\u5F02\u5E38 +description.DATAX_R_ODPS_008=\u6253\u5F00RecordReader\u5931\u8D25 +description.DATAX_R_ODPS_009=ODPS\u9879\u76EE\u4E0D\u5B58\u5728 +description.DATAX_R_ODPS_010=\u8868\u4E0D\u5B58\u5728 +description.DATAX_R_ODPS_011=AK\u4E0D\u5B58\u5728 +description.DATAX_R_ODPS_012=AK\u975E\u6CD5 +description.DATAX_R_ODPS_013=AK\u62D2\u7EDD\u8BBF\u95EE +description.DATAX_R_ODPS_014=splitMode\u914D\u7F6E\u9519\u8BEF +description.DATAX_R_ODPS_015=ODPS\u8D26\u53F7\u7C7B\u578B\u9519\u8BEF +description.DATAX_R_ODPS_016=\u4E0D\u652F\u6301\u89C6\u56FE +description.DATAX_R_ODPS_017=\u5206\u533A\u914D\u7F6E\u9519\u8BEF +description.DATAX_R_ODPS_018=\u5206\u533A\u4E0D\u5B58\u5728 +description.DATAX_R_ODPS_019=\u6267\u884CODPS SQL\u5931\u8D25 +description.DATAX_R_ODPS_020=\u6267\u884CODPS SQL\u53D1\u751F\u5F02\u5E38 + + +solution.DATAX_R_ODPS_001=\u8BF7\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6 +solution.DATAX_R_ODPS_002=\u8BF7\u4FEE\u6539\u914D\u7F6E\u503C +solution.DATAX_R_ODPS_003=\u8BF7\u786E\u5B9A\u914D\u7F6E\u7684AK\u6216\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_004=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_005=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_006=\u8BF7\u786E\u5B9A\u914D\u7F6E\u7684AK +solution.DATAX_R_ODPS_007=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_008=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_009=\u8BF7\u786E\u5B9A\u914D\u7F6E\u7684\u9879\u76EE\u540D +solution.DATAX_R_ODPS_010=\u8BF7\u786E\u5B9A\u914D\u7F6E\u7684\u8868\u540D +solution.DATAX_R_ODPS_011=\u8BF7\u786E\u5B9A\u914D\u7F6E\u7684AK +solution.DATAX_R_ODPS_012=\u8BF7\u4FEE\u6539AK +solution.DATAX_R_ODPS_013=\u8BF7\u786E\u5B9AAK\u5728\u9879\u76EE\u4E2D\u7684\u6743\u9650 +solution.DATAX_R_ODPS_014=\u8BF7\u4FEE\u6539splitMode\u503C +solution.DATAX_R_ODPS_015=\u8BF7\u4FEE\u6539\u8D26\u53F7\u7C7B\u578B +solution.DATAX_R_ODPS_016=\u8BF7\u4FEE\u6539\u914D\u7F6E\u6587\u4EF6 +solution.DATAX_R_ODPS_017=\u8BF7\u4FEE\u6539\u5206\u533A\u503C +solution.DATAX_R_ODPS_018=\u8BF7\u4FEE\u6539\u914D\u7F6E\u7684\u5206\u533A\u503C +solution.DATAX_R_ODPS_019=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 +solution.DATAX_R_ODPS_020=\u8BF7\u8054\u7CFBODPS\u7BA1\u7406\u5458 + +odpsreader.1=\u6E90\u5934\u8868:{0} \u662F\u865A\u62DF\u89C6\u56FE\uFF0CDataX \u4E0D\u652F\u6301\u8BFB\u53D6\u865A\u62DF\u89C6\u56FE. +odpsreader.2=\u60A8\u6240\u914D\u7F6E\u7684 splitMode:{0} \u4E0D\u6B63\u786E. splitMode \u4EC5\u5141\u8BB8\u914D\u7F6E\u4E3A record \u6216\u8005 partition. +odpsreader.3=\u5206\u533A\u4FE1\u606F\u6CA1\u6709\u914D\u7F6E.\u7531\u4E8E\u6E90\u5934\u8868:{0} \u4E3A\u5206\u533A\u8868, \u6240\u4EE5\u60A8\u9700\u8981\u914D\u7F6E\u5176\u62BD\u53D6\u7684\u8868\u7684\u5206\u533A\u4FE1\u606F. \u683C\u5F0F\u5F62\u5982:pt=hello,ds=hangzhou\uFF0C\u8BF7\u60A8\u53C2\u8003\u6B64\u683C\u5F0F\u4FEE\u6539\u8BE5\u914D\u7F6E\u9879. +odpsreader.4=\u5206\u533A\u4FE1\u606F\u914D\u7F6E\u9519\u8BEF.\u6E90\u5934\u8868:{0} \u867D\u7136\u4E3A\u5206\u533A\u8868, \u4F46\u5176\u5B9E\u9645\u5206\u533A\u503C\u5E76\u4E0D\u5B58\u5728. \u8BF7\u786E\u8BA4\u6E90\u5934\u8868\u5DF2\u7ECF\u751F\u6210\u8BE5\u5206\u533A\uFF0C\u518D\u8FDB\u884C\u6570\u636E\u62BD\u53D6. +odpsreader.5=\u5206\u533A\u914D\u7F6E\u9519\u8BEF\uFF0C\u6839\u636E\u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u6CA1\u6709\u5339\u914D\u5230\u6E90\u5934\u8868\u4E2D\u7684\u5206\u533A. \u6E90\u5934\u8868\u6240\u6709\u5206\u533A\u662F:[\n{0}\n], \u60A8\u914D\u7F6E\u7684\u5206\u533A\u662F:[\n{1}\n]. \u8BF7\u60A8\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u518D\u4F5C\u51FA\u4FEE\u6539. +odpsreader.6=\u5206\u533A\u914D\u7F6E\u9519\u8BEF\uFF0C\u6E90\u5934\u8868:{0} \u4E3A\u975E\u5206\u533A\u8868, \u60A8\u4E0D\u80FD\u914D\u7F6E\u5206\u533A. \u8BF7\u60A8\u5220\u9664\u8BE5\u914D\u7F6E\u9879. +odpsreader.7=\u6E90\u5934\u8868:{0} \u7684\u6240\u6709\u5206\u533A\u5217\u662F:[{1}] +odpsreader.8=\u5206\u533A\u914D\u7F6E\u9519\u8BEF, \u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u7EA7\u6570\u548C\u8BE5\u8868\u7684\u5B9E\u9645\u60C5\u51B5\u4E0D\u4E00\u81F4, \u6BD4\u5982\u5206\u533A:[{0}] \u662F {1} \u7EA7\u5206\u533A, \u800C\u5206\u533A:[{2}] \u662F {3} \u7EA7\u5206\u533A. DataX \u662F\u901A\u8FC7\u82F1\u6587\u9017\u53F7\u5224\u65AD\u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u7EA7\u6570\u7684. \u6B63\u786E\u7684\u683C\u5F0F\u5F62\u5982\"pt=$'{bizdate'}, type=0\" \uFF0C\u8BF7\u60A8\u53C2\u8003\u793A\u4F8B\u4FEE\u6539\u8BE5\u914D\u7F6E\u9879. +odpsreader.9=\u5206\u533A\u914D\u7F6E\u9519\u8BEF, \u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A:{0} \u7684\u7EA7\u6570:{1} \u4E0E\u60A8\u8981\u8BFB\u53D6\u7684 ODPS \u6E90\u5934\u8868\u7684\u5206\u533A\u7EA7\u6570:{2} \u4E0D\u76F8\u7B49. DataX \u662F\u901A\u8FC7\u82F1\u6587\u9017\u53F7\u5224\u65AD\u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u7EA7\u6570\u7684.\u6B63\u786E\u7684\u683C\u5F0F\u5F62\u5982\"pt=$'{bizdate'}, type=0\" \uFF0C\u8BF7\u60A8\u53C2\u8003\u793A\u4F8B\u4FEE\u6539\u8BE5\u914D\u7F6E\u9879. +odpsreader.10=\u6E90\u5934\u8868:{0} \u7684\u6240\u6709\u5B57\u6BB5\u662F:[{1}] +odpsreader.11=\u8FD9\u662F\u4E00\u6761\u8B66\u544A\u4FE1\u606F\uFF0C\u60A8\u914D\u7F6E\u7684 ODPS \u8BFB\u53D6\u7684\u5217\u4E3A*\uFF0C\u8FD9\u662F\u4E0D\u63A8\u8350\u7684\u884C\u4E3A\uFF0C\u56E0\u4E3A\u5F53\u60A8\u7684\u8868\u5B57\u6BB5\u4E2A\u6570\u3001\u7C7B\u578B\u6709\u53D8\u52A8\u65F6\uFF0C\u53EF\u80FD\u5F71\u54CD\u4EFB\u52A1\u6B63\u786E\u6027\u751A\u81F3\u4F1A\u8FD0\u884C\u51FA\u9519. \u5EFA\u8BAE\u60A8\u628A\u6240\u6709\u9700\u8981\u62BD\u53D6\u7684\u5217\u90FD\u914D\u7F6E\u4E0A. +odpsreader.12=\u6E90\u5934\u8868:{0} \u7684\u5206\u533A:{1} \u6CA1\u6709\u5185\u5BB9\u53EF\u62BD\u53D6, \u8BF7\u60A8\u77E5\u6653. +odpsreader.13=\u6E90\u5934\u8868:{0} \u7684\u5206\u533A:{1} \u8BFB\u53D6\u884C\u6570\u4E3A\u8D1F\u6570, \u8BF7\u8054\u7CFB ODPS \u7BA1\u7406\u5458\u67E5\u770B\u8868\u72B6\u6001! +odpsreader.14=\u6E90\u5934\u8868:{0} \u7684\u5206\u533A:{1} \u8BFB\u53D6\u5931\u8D25, \u8BF7\u8054\u7CFB ODPS \u7BA1\u7406\u5458\u67E5\u770B\u9519\u8BEF\u8BE6\u60C5. + + +readerproxy.1=odps-read-exception, \u91CD\u8BD5\u7B2C{0}\u6B21 +readerproxy.2=\u60A8\u7684\u5206\u533A [{0}] \u89E3\u6790\u51FA\u73B0\u9519\u8BEF,\u89E3\u6790\u540E\u6B63\u786E\u7684\u914D\u7F6E\u65B9\u5F0F\u7C7B\u4F3C\u4E3A [ pt=1,dt=1 ]. +readerproxy.3=\u8868\u6240\u6709\u5206\u533A\u4FE1\u606F\u4E3A: {0} \u5176\u4E2D\u627E\u4E0D\u5230 [{1}] \u5BF9\u5E94\u7684\u5206\u533A\u503C. +readerproxy.4=\u60A8\u8BFB\u53D6\u5206\u533A [{0}] \u51FA\u73B0\u65E5\u671F\u8F6C\u6362\u5F02\u5E38, \u65E5\u671F\u7684\u5B57\u7B26\u4E32\u8868\u793A\u4E3A [{1}]. +readerproxy.5=DataX \u62BD\u53D6 ODPS \u6570\u636E\u4E0D\u652F\u6301\u5B57\u6BB5\u7C7B\u578B\u4E3A:[{0}]. \u76EE\u524D\u652F\u6301\u62BD\u53D6\u7684\u5B57\u6BB5\u7C7B\u578B\u6709\uFF1Abigint, boolean, datetime, double, decimal, string. \u60A8\u53EF\u4EE5\u9009\u62E9\u4E0D\u62BD\u53D6 DataX \u4E0D\u652F\u6301\u7684\u5B57\u6BB5\u6216\u8005\u8054\u7CFB ODPS \u7BA1\u7406\u5458\u5BFB\u6C42\u5E2E\u52A9. diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java index f5cf10ca..8cb7ba31 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java @@ -5,44 +5,44 @@ import com.alibaba.datax.common.plugin.RecordSender; import com.alibaba.datax.common.spi.Reader; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.common.util.FilterUtil; -import com.alibaba.datax.plugin.reader.odpsreader.util.IdAndKeyUtil; -import com.alibaba.datax.plugin.reader.odpsreader.util.OdpsSplitUtil; -import com.alibaba.datax.plugin.reader.odpsreader.util.OdpsUtil; -import com.aliyun.odps.*; +import com.alibaba.datax.common.util.MessageSource; +import com.alibaba.datax.plugin.reader.odpsreader.util.*; +import com.alibaba.fastjson.JSON; +import com.aliyun.odps.Column; +import com.aliyun.odps.Odps; +import com.aliyun.odps.Table; +import com.aliyun.odps.TableSchema; import com.aliyun.odps.tunnel.TableTunnel.DownloadSession; - +import com.aliyun.odps.type.TypeInfo; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.MutablePair; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class OdpsReader extends Reader { public static class Job extends Reader.Job { private static final Logger LOG = LoggerFactory - .getLogger(Job.class); - - private static boolean IS_DEBUG = LOG.isDebugEnabled(); + .getLogger(Job.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsReaderErrorCode.class, Locale.ENGLISH, MessageSource.timeZone); private Configuration originalConfig; + private boolean successOnNoPartition; private Odps odps; private Table table; + @Override public void preCheck() { this.init(); + this.prepare(); } - @Override public void init() { this.originalConfig = super.getPluginJobConf(); + this.successOnNoPartition = this.originalConfig.getBool(Key.SUCCESS_ON_NO_PATITION, false); //如果用户没有配置accessId/accessKey,尝试从环境变量获取 String accountType = originalConfig.getString(Key.ACCOUNT_TYPE, Constant.DEFAULT_ACCOUNT_TYPE); @@ -59,17 +59,21 @@ public class OdpsReader extends Reader { dealSplitMode(this.originalConfig); this.odps = OdpsUtil.initOdps(this.originalConfig); + + } + + private void initOdpsTableInfo() { String tableName = this.originalConfig.getString(Key.TABLE); String projectName = this.originalConfig.getString(Key.PROJECT); this.table = OdpsUtil.getTable(this.odps, projectName, tableName); this.originalConfig.set(Constant.IS_PARTITIONED_TABLE, - OdpsUtil.isPartitionedTable(table)); + OdpsUtil.isPartitionedTable(table)); boolean isVirtualView = this.table.isVirtualView(); if (isVirtualView) { throw DataXException.asDataXException(OdpsReaderErrorCode.VIRTUAL_VIEW_NOT_SUPPORT, - String.format("源头表:%s 是虚拟视图,DataX 不支持读取虚拟视图.", tableName)); + MESSAGE_SOURCE.message("odpsreader.1", tableName)); } this.dealPartition(this.table); @@ -79,11 +83,11 @@ public class OdpsReader extends Reader { private void dealSplitMode(Configuration originalConfig) { String splitMode = originalConfig.getString(Key.SPLIT_MODE, Constant.DEFAULT_SPLIT_MODE).trim(); if (splitMode.equalsIgnoreCase(Constant.DEFAULT_SPLIT_MODE) || - splitMode.equalsIgnoreCase(Constant.PARTITION_SPLIT_MODE)) { + splitMode.equalsIgnoreCase(Constant.PARTITION_SPLIT_MODE)) { originalConfig.set(Key.SPLIT_MODE, splitMode); } else { throw DataXException.asDataXException(OdpsReaderErrorCode.SPLIT_MODE_ERROR, - String.format("您所配置的 splitMode:%s 不正确. splitMode 仅允许配置为 record 或者 partition.", splitMode)); + MESSAGE_SOURCE.message("odpsreader.2", splitMode)); } } @@ -98,7 +102,7 @@ public class OdpsReader extends Reader { */ private void dealPartition(Table table) { List userConfiguredPartitions = this.originalConfig.getList( - Key.PARTITION, String.class); + Key.PARTITION, String.class); boolean isPartitionedTable = this.originalConfig.getBool(Constant.IS_PARTITIONED_TABLE); List partitionColumns = new ArrayList(); @@ -107,60 +111,140 @@ public class OdpsReader extends Reader { // 分区表,需要配置分区 if (null == userConfiguredPartitions || userConfiguredPartitions.isEmpty()) { throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, - String.format("分区信息没有配置.由于源头表:%s 为分区表, 所以您需要配置其抽取的表的分区信息. 格式形如:pt=hello,ds=hangzhou,请您参考此格式修改该配置项.", - table.getName())); + MESSAGE_SOURCE.message("odpsreader.3", table.getName())); } else { - List allPartitions = OdpsUtil.getTableAllPartitions(table); - - if (null == allPartitions || allPartitions.isEmpty()) { - throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, - String.format("分区信息配置错误.源头表:%s 虽然为分区表, 但其实际分区值并不存在. 请确认源头表已经生成该分区,再进行数据抽取.", - table.getName())); - } - - List parsedPartitions = expandUserConfiguredPartition( - allPartitions, userConfiguredPartitions); - - if (null == parsedPartitions || parsedPartitions.isEmpty()) { - throw DataXException.asDataXException( - OdpsReaderErrorCode.PARTITION_ERROR, - String.format( - "分区配置错误,根据您所配置的分区没有匹配到源头表中的分区. 源头表所有分区是:[\n%s\n], 您配置的分区是:[\n%s\n]. 请您根据实际情况在作出修改. ", - StringUtils.join(allPartitions, "\n"), - StringUtils.join(userConfiguredPartitions, "\n"))); - } - this.originalConfig.set(Key.PARTITION, parsedPartitions); - - for (Column column : table.getSchema() - .getPartitionColumns()) { + // 获取分区列名, 支持用户配置分区列同步 + for (Column column : table.getSchema().getPartitionColumns()) { partitionColumns.add(column.getName()); } + + List allPartitions = OdpsUtil.getTableAllPartitions(table); + + List parsedPartitions = expandUserConfiguredPartition( + table, allPartitions, userConfiguredPartitions, partitionColumns.size()); + if (null == parsedPartitions || parsedPartitions.isEmpty()) { + if (!this.successOnNoPartition) { + // PARTITION_NOT_EXISTS_ERROR 这个异常ErrorCode在AdsWriter有使用,用户判断空分区Load Data任务不报错 + // 其他类型的异常不要使用这个错误码 + throw DataXException.asDataXException( + OdpsReaderErrorCode.PARTITION_NOT_EXISTS_ERROR, + MESSAGE_SOURCE.message("odpsreader.5", + StringUtils.join(allPartitions, "\n"), + StringUtils.join(userConfiguredPartitions, "\n"))); + } else { + LOG.warn( + String.format( + "The partition configuration is wrong, " + + "but you have configured the successOnNoPartition to be true to ignore the error. " + + "According to the partition you have configured, it does not match the partition in the source table. " + + "All the partitions in the source table are:[\n%s\n], the partition you configured is:[\n%s\n]. " + + "please revise it according to the actual situation.", + StringUtils.join(allPartitions, "\n"), + StringUtils.join(userConfiguredPartitions, "\n"))); + } + } + LOG.info(String + .format("expand user configured partitions are : %s", JSON.toJSONString(parsedPartitions))); + this.originalConfig.set(Key.PARTITION, parsedPartitions); } } else { // 非分区表,则不能配置分区 if (null != userConfiguredPartitions - && !userConfiguredPartitions.isEmpty()) { + && !userConfiguredPartitions.isEmpty()) { throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, - String.format("分区配置错误,源头表:%s 为非分区表, 您不能配置分区. 请您删除该配置项. ", table.getName())); + MESSAGE_SOURCE.message("odpsreader.6", table.getName())); } } - + this.originalConfig.set(Constant.PARTITION_COLUMNS, partitionColumns); if (isPartitionedTable) { - LOG.info("{源头表:{} 的所有分区列是:[{}]}", table.getName(), - StringUtils.join(partitionColumns, ",")); + LOG.info(MESSAGE_SOURCE.message("odpsreader.7", table.getName(), + StringUtils.join(partitionColumns, ","))); } } - private List expandUserConfiguredPartition( - List allPartitions, List userConfiguredPartitions) { + /** + * 将用户配置的分区(可能是直接的分区配置 dt=20170101, 可能是简单正则dt=201701*, 也可能是区间过滤条件 dt>=20170101 and dt<20170130) 和ODPS + * table所有的分区进行匹配,过滤出用户希望同步的分区集合 + * + * @param table odps table + * @param allPartitions odps table所有的分区 + * @param userConfiguredPartitions 用户配置的分区 + * @param tableOriginalPartitionDepth odps table分区级数(一级分区,二级分区,三级分区等) + * @return 返回过滤出的分区 + */ + private List expandUserConfiguredPartition(Table table, + List allPartitions, + List userConfiguredPartitions, + int tableOriginalPartitionDepth) { + + UserConfiguredPartitionClassification userConfiguredPartitionClassification = OdpsUtil + .classifyUserConfiguredPartitions(userConfiguredPartitions); + + if (userConfiguredPartitionClassification.isIncludeHintPartition()) { + List expandUserConfiguredPartitionResult = new ArrayList(); + + // 处理不包含/*query*/的分区过滤 + if (!userConfiguredPartitionClassification.getUserConfiguredNormalPartition().isEmpty()) { + expandUserConfiguredPartitionResult.addAll(expandNoHintUserConfiguredPartition(allPartitions, + userConfiguredPartitionClassification.getUserConfiguredNormalPartition(), + tableOriginalPartitionDepth)); + } + if (!allPartitions.isEmpty()) { + expandUserConfiguredPartitionResult.addAll(expandHintUserConfiguredPartition(table, + allPartitions, userConfiguredPartitionClassification.getUserConfiguredHintPartition())); + } + return expandUserConfiguredPartitionResult; + } else { + return expandNoHintUserConfiguredPartition(allPartitions, userConfiguredPartitions, + tableOriginalPartitionDepth); + } + } + + /** + * 匹配包含 HINT 条件的过滤 + * + * @param table odps table + * @param allPartitions odps table所有的分区 + * @param userHintConfiguredPartitions 用户配置的分区 + * @return 返回过滤出的分区 + */ + private List expandHintUserConfiguredPartition(Table table, + List allPartitions, + List userHintConfiguredPartitions) { + try { + // load odps table all partitions into sqlite memory database + SqliteUtil sqliteUtil = new SqliteUtil(); + sqliteUtil.loadAllPartitionsIntoSqlite(table, allPartitions); + return sqliteUtil.selectUserConfiguredPartition(userHintConfiguredPartitions); + } catch (Exception ex) { + throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, + String.format("Expand user configured partition has exception: %s", ex.getMessage()), ex); + } + } + + /** + * 匹配没有 HINT 条件的过滤,包括 简单正则匹配(dt=201701*) 和 直接匹配(dt=20170101) + * + * @param allPartitions odps table所有的分区 + * @param userNormalConfiguredPartitions 用户配置的分区 + * @param tableOriginalPartitionDepth odps table分区级数(一级分区,二级分区,三级分区等) + * @return 返回过滤出的分区 + */ + private List expandNoHintUserConfiguredPartition(List allPartitions, + List userNormalConfiguredPartitions, + int tableOriginalPartitionDepth) { // 对odps 本身的所有分区进行特殊字符的处理 + LOG.info("format partition with rules: remove all space; remove all '; replace / to ,"); + // 表里面已有分区量比较大,有些任务无关,没有打印 List allStandardPartitions = OdpsUtil - .formatPartitions(allPartitions); + .formatPartitions(allPartitions); // 对用户自身配置的所有分区进行特殊字符的处理 List allStandardUserConfiguredPartitions = OdpsUtil - .formatPartitions(userConfiguredPartitions); + .formatPartitions(userNormalConfiguredPartitions); + LOG.info("user configured partition: {}", JSON.toJSONString(userNormalConfiguredPartitions)); + LOG.info("formated partition: {}", JSON.toJSONString(allStandardUserConfiguredPartitions)); /** * 对配置的分区级数(深度)进行检查 @@ -177,20 +261,20 @@ public class OdpsReader extends Reader { comparedPartitionDepth = comparedPartition.split(",").length; if (comparedPartitionDepth != firstPartitionDepth) { throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, - String.format("分区配置错误, 您所配置的分区级数和该表的实际情况不一致, 比如分区:[%s] 是 %s 级分区, 而分区:[%s] 是 %s 级分区. DataX 是通过英文逗号判断您所配置的分区级数的. 正确的格式形如\"pt=${bizdate}, type=0\" ,请您参考示例修改该配置项. ", - firstPartition, firstPartitionDepth, comparedPartition, comparedPartitionDepth)); + MESSAGE_SOURCE + .message("odpsreader.8", firstPartition, firstPartitionDepth, comparedPartition, + comparedPartitionDepth)); } } - int tableOriginalPartitionDepth = allStandardPartitions.get(0).split(",").length; if (firstPartitionDepth != tableOriginalPartitionDepth) { throw DataXException.asDataXException(OdpsReaderErrorCode.PARTITION_ERROR, - String.format("分区配置错误, 您所配置的分区:%s 的级数:%s 与您要读取的 ODPS 源头表的分区级数:%s 不相等. DataX 是通过英文逗号判断您所配置的分区级数的.正确的格式形如\"pt=${bizdate}, type=0\" ,请您参考示例修改该配置项.", - firstPartition, firstPartitionDepth, tableOriginalPartitionDepth)); + MESSAGE_SOURCE + .message("odpsreader.9", firstPartition, firstPartitionDepth, tableOriginalPartitionDepth)); } List retPartitions = FilterUtil.filterByRegulars(allStandardPartitions, - allStandardUserConfiguredPartitions); + allStandardUserConfiguredPartitions); return retPartitions; } @@ -198,11 +282,11 @@ public class OdpsReader extends Reader { private void dealColumn(Table table) { // 用户配置的 column 之前已经确保其不为空 List userConfiguredColumns = this.originalConfig.getList( - Key.COLUMN, String.class); + Key.COLUMN, String.class); List allColumns = OdpsUtil.getTableAllColumns(table); List allNormalColumns = OdpsUtil - .getTableOriginalColumnNameList(allColumns); + .getTableOriginalColumnNameList(allColumns); StringBuilder columnMeta = new StringBuilder(); for (Column column : allColumns) { @@ -210,26 +294,26 @@ public class OdpsReader extends Reader { } columnMeta.setLength(columnMeta.length() - 1); - LOG.info("源头表:{} 的所有字段是:[{}]", table.getName(), columnMeta.toString()); + LOG.info(MESSAGE_SOURCE.message("odpsreader.10", table.getName(), columnMeta.toString())); if (1 == userConfiguredColumns.size() - && "*".equals(userConfiguredColumns.get(0))) { - LOG.warn("这是一条警告信息,您配置的 ODPS 读取的列为*,这是不推荐的行为,因为当您的表字段个数、类型有变动时,可能影响任务正确性甚至会运行出错. 建议您把所有需要抽取的列都配置上. "); + && "*".equals(userConfiguredColumns.get(0))) { + LOG.warn(MESSAGE_SOURCE.message("odpsreader.11")); this.originalConfig.set(Key.COLUMN, allNormalColumns); } userConfiguredColumns = this.originalConfig.getList( - Key.COLUMN, String.class); + Key.COLUMN, String.class); /** * warn: 字符串常量需要与表原生字段tableOriginalColumnNameList 分开存放 demo: * ["id","'id'","name"] */ List allPartitionColumns = this.originalConfig.getList( - Constant.PARTITION_COLUMNS, String.class); + Constant.PARTITION_COLUMNS, String.class); List> parsedColumns = OdpsUtil - .parseColumns(allNormalColumns, allPartitionColumns, - userConfiguredColumns); + .parseColumns(allNormalColumns, allPartitionColumns, + userConfiguredColumns); this.originalConfig.set(Constant.PARSED_COLUMNS, parsedColumns); @@ -238,7 +322,7 @@ public class OdpsReader extends Reader { for (int i = 0, len = parsedColumns.size(); i < len; i++) { Pair pair = parsedColumns.get(i); sb.append(String.format(" %s : %s", pair.getLeft(), - pair.getRight())); + pair.getRight())); if (i != len - 1) { sb.append(","); } @@ -247,9 +331,36 @@ public class OdpsReader extends Reader { LOG.info("parsed column details: {} .", sb.toString()); } - @Override public void prepare() { + List preSqls = this.originalConfig.getList(Key.PRE_SQL, String.class); + if (preSqls != null && !preSqls.isEmpty()) { + LOG.info( + String.format("Beigin to exectue preSql : %s. \n Attention: these preSqls must be idempotent!!!", + JSON.toJSONString(preSqls))); + long beginTime = System.currentTimeMillis(); + + StringBuffer preSqlBuffer = new StringBuffer(); + for (String preSql : preSqls) { + preSql = preSql.trim(); + if (StringUtils.isNotBlank(preSql) && !preSql.endsWith(";")) { + preSql = String.format("%s;", preSql); + } + if (StringUtils.isNotBlank(preSql)) { + preSqlBuffer.append(preSql); + } + } + if (StringUtils.isNotBlank(preSqlBuffer.toString())) { + OdpsUtil.runSqlTaskWithRetry(this.odps, preSqlBuffer.toString(), "preSql"); + } else { + LOG.info("skip to execute the preSql: {}", JSON.toJSONString(preSqls)); + } + long endTime = System.currentTimeMillis(); + + LOG.info( + String.format("Exectue odpsreader preSql successfully! cost time: %s ms.", (endTime - beginTime))); + } + this.initOdpsTableInfo(); } @Override @@ -259,6 +370,33 @@ public class OdpsReader extends Reader { @Override public void post() { + List postSqls = this.originalConfig.getList(Key.POST_SQL, String.class); + + if (postSqls != null && !postSqls.isEmpty()) { + LOG.info( + String.format("Beigin to exectue postSql : %s. \n Attention: these postSqls must be idempotent!!!", + JSON.toJSONString(postSqls))); + long beginTime = System.currentTimeMillis(); + StringBuffer postSqlBuffer = new StringBuffer(); + for (String postSql : postSqls) { + postSql = postSql.trim(); + if (StringUtils.isNotBlank(postSql) && !postSql.endsWith(";")) { + postSql = String.format("%s;", postSql); + } + if (StringUtils.isNotBlank(postSql)) { + postSqlBuffer.append(postSql); + } + } + if (StringUtils.isNotBlank(postSqlBuffer.toString())) { + OdpsUtil.runSqlTaskWithRetry(this.odps, postSqlBuffer.toString(), "postSql"); + } else { + LOG.info("skip to execute the postSql: {}", JSON.toJSONString(postSqls)); + } + + long endTime = System.currentTimeMillis(); + LOG.info( + String.format("Exectue odpsreader postSql successfully! cost time: %s ms.", (endTime - beginTime))); + } } @Override @@ -268,6 +406,7 @@ public class OdpsReader extends Reader { public static class Task extends Reader.Task { private static final Logger LOG = LoggerFactory.getLogger(Task.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsReader.class); private Configuration readerSliceConf; private String tunnelServer; @@ -278,32 +417,35 @@ public class OdpsReader extends Reader { private boolean isPartitionedTable; private String sessionId; private boolean isCompress; + private boolean successOnNoPartition; @Override public void init() { this.readerSliceConf = super.getPluginJobConf(); this.tunnelServer = this.readerSliceConf.getString( - Key.TUNNEL_SERVER, null); + Key.TUNNEL_SERVER, null); this.odps = OdpsUtil.initOdps(this.readerSliceConf); this.projectName = this.readerSliceConf.getString(Key.PROJECT); this.tableName = this.readerSliceConf.getString(Key.TABLE); this.table = OdpsUtil.getTable(this.odps, projectName, tableName); this.isPartitionedTable = this.readerSliceConf - .getBool(Constant.IS_PARTITIONED_TABLE); + .getBool(Constant.IS_PARTITIONED_TABLE); this.sessionId = this.readerSliceConf.getString(Constant.SESSION_ID, null); - - - this.isCompress = this.readerSliceConf.getBool(Key.IS_COMPRESS, false); + this.successOnNoPartition = this.readerSliceConf.getBool(Key.SUCCESS_ON_NO_PATITION, false); // sessionId 为空的情况是:切分级别只到 partition 的情况 - if (StringUtils.isBlank(this.sessionId)) { + String partition = this.readerSliceConf.getString(Key.PARTITION); + + // 没有分区读取时, 是没有sessionId这些的 + if (this.isPartitionedTable && StringUtils.isBlank(partition) && this.successOnNoPartition) { + LOG.warn("Partition is blank, but you config successOnNoPartition[true] ,don't need to create session"); + } else if (StringUtils.isBlank(this.sessionId)) { DownloadSession session = OdpsUtil.createMasterSessionForPartitionedTable(odps, - tunnelServer, projectName, tableName, this.readerSliceConf.getString(Key.PARTITION)); + tunnelServer, projectName, tableName, this.readerSliceConf.getString(Key.PARTITION)); this.sessionId = session.getId(); } - LOG.info("sessionId:{}", this.sessionId); } @@ -316,68 +458,72 @@ public class OdpsReader extends Reader { DownloadSession downloadSession = null; String partition = this.readerSliceConf.getString(Key.PARTITION); + if (this.isPartitionedTable && StringUtils.isBlank(partition) && this.successOnNoPartition) { + LOG.warn(String.format( + "Partition is blank,not need to be read")); + recordSender.flush(); + return; + } + if (this.isPartitionedTable) { downloadSession = OdpsUtil.getSlaveSessionForPartitionedTable(this.odps, this.sessionId, - this.tunnelServer, this.projectName, this.tableName, partition); + this.tunnelServer, this.projectName, this.tableName, partition); } else { downloadSession = OdpsUtil.getSlaveSessionForNonPartitionedTable(this.odps, this.sessionId, - this.tunnelServer, this.projectName, this.tableName); + this.tunnelServer, this.projectName, this.tableName); } long start = this.readerSliceConf.getLong(Constant.START_INDEX, 0); long count = this.readerSliceConf.getLong(Constant.STEP_COUNT, - downloadSession.getRecordCount()); + downloadSession.getRecordCount()); if (count > 0) { LOG.info(String.format( - "Begin to read ODPS table:%s, partition:%s, startIndex:%s, count:%s.", - this.tableName, partition, start, count)); + "Begin to read ODPS table:%s, partition:%s, startIndex:%s, count:%s.", + this.tableName, partition, start, count)); } else if (count == 0) { - LOG.warn(String.format("源头表:%s 的分区:%s 没有内容可抽取, 请您知晓.", - this.tableName, partition)); + LOG.warn(MESSAGE_SOURCE.message("odpsreader.12", this.tableName, partition)); return; } else { throw DataXException.asDataXException(OdpsReaderErrorCode.READ_DATA_FAIL, - String.format("源头表:%s 的分区:%s 读取行数为负数, 请联系 ODPS 管理员查看表状态!", - this.tableName, partition)); + MESSAGE_SOURCE.message("odpsreader.13", this.tableName, partition)); } - + TableSchema tableSchema = this.table.getSchema(); Set allColumns = new HashSet(); allColumns.addAll(tableSchema.getColumns()); allColumns.addAll(tableSchema.getPartitionColumns()); - Map columnTypeMap = new HashMap(); + Map columnTypeMap = new HashMap(); for (Column column : allColumns) { - columnTypeMap.put(column.getName(), column.getType()); + columnTypeMap.put(column.getName(), column.getTypeInfo()); } try { List parsedColumnsTmp = this.readerSliceConf - .getListConfiguration(Constant.PARSED_COLUMNS); + .getListConfiguration(Constant.PARSED_COLUMNS); List> parsedColumns = new ArrayList>(); for (int i = 0; i < parsedColumnsTmp.size(); i++) { Configuration eachColumnConfig = parsedColumnsTmp.get(i); String columnName = eachColumnConfig.getString("left"); ColumnType columnType = ColumnType - .asColumnType(eachColumnConfig.getString("right")); + .asColumnType(eachColumnConfig.getString("right")); parsedColumns.add(new MutablePair( - columnName, columnType)); + columnName, columnType)); } ReaderProxy readerProxy = new ReaderProxy(recordSender, downloadSession, columnTypeMap, parsedColumns, partition, this.isPartitionedTable, - start, count, this.isCompress); + start, count, this.isCompress, this.readerSliceConf); readerProxy.doRead(); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.READ_DATA_FAIL, - String.format("源头表:%s 的分区:%s 读取失败, 请联系 ODPS 管理员查看错误详情.", this.tableName, partition), e); + MESSAGE_SOURCE.message("odpsreader.14", this.tableName, partition), e); } } - @Override public void post() { } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReaderErrorCode.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReaderErrorCode.java index cdda6ac8..8311d4ef 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReaderErrorCode.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReaderErrorCode.java @@ -1,45 +1,53 @@ package com.alibaba.datax.plugin.reader.odpsreader; import com.alibaba.datax.common.spi.ErrorCode; +import com.alibaba.datax.common.util.MessageSource; public enum OdpsReaderErrorCode implements ErrorCode { - REQUIRED_VALUE("OdpsReader-00", "您缺失了必须填写的参数值."), - ILLEGAL_VALUE("OdpsReader-01", "您配置的值不合法."), - CREATE_DOWNLOADSESSION_FAIL("OdpsReader-03", "创建 ODPS 的 downloadSession 失败."), - GET_DOWNLOADSESSION_FAIL("OdpsReader-04", "获取 ODPS 的 downloadSession 失败."), - READ_DATA_FAIL("OdpsReader-05", "读取 ODPS 源头表失败."), - GET_ID_KEY_FAIL("OdpsReader-06", "获取 accessId/accessKey 失败."), + REQUIRED_VALUE("DATAX_R_ODPS_001", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_001"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_001")), + ILLEGAL_VALUE("DATAX_R_ODPS_002", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_002"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_002")), + CREATE_DOWNLOADSESSION_FAIL("DATAX_R_ODPS_003", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_003"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_003")), + GET_DOWNLOADSESSION_FAIL("DATAX_R_ODPS_004", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_004"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_004")), + READ_DATA_FAIL("DATAX_R_ODPS_005", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_005"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_005")), + GET_ID_KEY_FAIL("DATAX_R_ODPS_006", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_006"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_006")), - ODPS_READ_EXCEPTION("OdpsReader-07", "读取 odps 异常"), - OPEN_RECORD_READER_FAILED("OdpsReader-08", "打开 recordReader 失败."), + ODPS_READ_EXCEPTION("DATAX_R_ODPS_007", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_007"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_007")), + OPEN_RECORD_READER_FAILED("DATAX_R_ODPS_008", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_008"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_008")), - ODPS_PROJECT_NOT_FOUNT("OdpsReader-10", "您配置的值不合法, odps project 不存在."), //ODPS-0420111: Project not found + ODPS_PROJECT_NOT_FOUNT("DATAX_R_ODPS_009", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_009"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_009")), //ODPS-0420111: Project not found - ODPS_TABLE_NOT_FOUNT("OdpsReader-12", "您配置的值不合法, odps table 不存在."), // ODPS-0130131:Table not found + ODPS_TABLE_NOT_FOUNT("DATAX_R_ODPS_010", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_010"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_010")), // ODPS-0130131:Table not found - ODPS_ACCESS_KEY_ID_NOT_FOUND("OdpsReader-13", "您配置的值不合法, odps accessId,accessKey 不存在."), //ODPS-0410051:Invalid credentials - accessKeyId not found + ODPS_ACCESS_KEY_ID_NOT_FOUND("DATAX_R_ODPS_011", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_011"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_011")), //ODPS-0410051:Invalid credentials - accessKeyId not found - ODPS_ACCESS_KEY_INVALID("OdpsReader-14", "您配置的值不合法, odps accessKey 错误."), //ODPS-0410042:Invalid signature value - User signature dose not match + ODPS_ACCESS_KEY_INVALID("DATAX_R_ODPS_012", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_012"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_012")), //ODPS-0410042:Invalid signature value - User signature dose not match - ODPS_ACCESS_DENY("OdpsReader-15", "拒绝访问, 您不在 您配置的 project 中."), //ODPS-0420095: Access Denied - Authorization Failed [4002], You doesn't exist in project + ODPS_ACCESS_DENY("DATAX_R_ODPS_013", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_013"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_013")), //ODPS-0420095: Access Denied - Authorization Failed [4002], You doesn't exist in project - SPLIT_MODE_ERROR("OdpsReader-30", "splitMode配置错误."), + SPLIT_MODE_ERROR("DATAX_R_ODPS_014", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_014"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_014")), - ACCOUNT_TYPE_ERROR("OdpsReader-31", "odps 账号类型错误."), + ACCOUNT_TYPE_ERROR("DATAX_R_ODPS_015", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_015"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_015")), - VIRTUAL_VIEW_NOT_SUPPORT("OdpsReader-32", "Datax 不支持 读取虚拟视图."), + VIRTUAL_VIEW_NOT_SUPPORT("DATAX_R_ODPS_016", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_016"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_016")), - PARTITION_ERROR("OdpsReader-33", "分区配置错误."), + PARTITION_ERROR("DATAX_R_ODPS_017", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_017"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_017")), + PARTITION_NOT_EXISTS_ERROR("DATAX_R_ODPS_018", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_018"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_018")), + + RUN_SQL_FAILED("DATAX_R_ODPS_019", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_019"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_019")), + + RUN_SQL_ODPS_EXCEPTION("DATAX_R_ODPS_020", MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("description.DATAX_R_ODPS_020"),MessageSource.loadResourceBundle(OdpsReaderErrorCode.class).message("solution.DATAX_R_ODPS_020")), ; private final String code; private final String description; + private final String solution; - private OdpsReaderErrorCode(String code, String description) { + private OdpsReaderErrorCode(String code, String description,String solution) { this.code = code; this.description = description; + this.solution = solution; } @Override @@ -52,9 +60,12 @@ public enum OdpsReaderErrorCode implements ErrorCode { return this.description; } + public String getSolution() { + return solution; + } + @Override public String toString() { - return String.format("Code:[%s], Description:[%s]. ", this.code, - this.description); + return String.format("Code:%s:%s, Solution:[%s]. ", this.code,this.description,this.solution); } } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java index 8e069ef5..31d0d605 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java @@ -3,28 +3,37 @@ package com.alibaba.datax.plugin.reader.odpsreader; import com.alibaba.datax.common.element.*; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.plugin.reader.odpsreader.util.OdpsUtil; +import com.alibaba.fastjson.JSON; +import com.aliyun.odps.Column; import com.aliyun.odps.OdpsType; +import com.aliyun.odps.data.*; import com.aliyun.odps.data.Record; -import com.aliyun.odps.data.RecordReader; import com.aliyun.odps.tunnel.TableTunnel; +import com.aliyun.odps.type.ArrayTypeInfo; +import com.aliyun.odps.type.MapTypeInfo; +import com.aliyun.odps.type.TypeInfo; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.ParseException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.*; public class ReaderProxy { private static final Logger LOG = LoggerFactory .getLogger(ReaderProxy.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(ReaderProxy.class); private static boolean IS_DEBUG = LOG.isDebugEnabled(); private RecordSender recordSender; private TableTunnel.DownloadSession downloadSession; - private Map columnTypeMap; + private Map columnTypeMap; private List> parsedColumns; private String partition; private boolean isPartitionTable; @@ -32,11 +41,38 @@ public class ReaderProxy { private long start; private long count; private boolean isCompress; + + private static final String NULL_INDICATOR = null; + // TODO 没有支持用户可配置 + // TODO 没有timezone + private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + // 读取 jvm 默认时区 + private Calendar calendarForDate = null; + private boolean useDateWithCalendar = true; + + private Calendar initCalendar(Configuration config) { + // 理论上不会有其他选择,有配置化可以随时应急 + String calendarType = config.getString("calendarType", "iso8601"); + Boolean lenient = config.getBool("calendarLenient", true); + + // 默认jvm时区 + TimeZone timeZone = TimeZone.getDefault(); + String timeZoneStr = config.getString("calendarTimeZone"); + if (StringUtils.isNotBlank(timeZoneStr)) { + // 如果用户明确指定使用用户指定的 + timeZone = TimeZone.getTimeZone(timeZoneStr); + } + + Calendar calendarForDate = new Calendar.Builder().setCalendarType(calendarType).setLenient(lenient) + .setTimeZone(timeZone).build(); + return calendarForDate; + } public ReaderProxy(RecordSender recordSender, TableTunnel.DownloadSession downloadSession, - Map columnTypeMap, - List> parsedColumns, String partition, - boolean isPartitionTable, long start, long count, boolean isCompress) { + Map columnTypeMap, + List> parsedColumns, String partition, + boolean isPartitionTable, long start, long count, boolean isCompress, Configuration taskConfig) { this.recordSender = recordSender; this.downloadSession = downloadSession; this.columnTypeMap = columnTypeMap; @@ -46,14 +82,24 @@ public class ReaderProxy { this.start = start; this.count = count; this.isCompress = isCompress; + + this.calendarForDate = this.initCalendar(taskConfig); + this.useDateWithCalendar = taskConfig.getBool("useDateWithCalendar", true); } // warn: odps 分区列和正常列不能重名, 所有列都不不区分大小写 public void doRead() { try { LOG.info("start={}, count={}",start, count); - //RecordReader recordReader = downloadSession.openRecordReader(start, count, isCompress); - RecordReader recordReader = OdpsUtil.getRecordReader(downloadSession, start, count, isCompress); + List userConfigNormalColumns = OdpsUtil.getNormalColumns(this.parsedColumns, this.columnTypeMap); + RecordReader recordReader = null; + // fix #ODPS-52184/10332469, updateColumnsSize表示如果用户指定的读取源表列数100列以内的话,则进行列裁剪优化; + int updateColumnsSize = 100; + if(userConfigNormalColumns.size() <= updateColumnsSize){ + recordReader = OdpsUtil.getRecordReader(downloadSession, start, count, isCompress, userConfigNormalColumns); + } else { + recordReader = OdpsUtil.getRecordReader(downloadSession, start, count, isCompress); + } Record odpsRecord; Map partitionMap = this @@ -72,7 +118,7 @@ public class ReaderProxy { } catch (InterruptedException ignored) { } recordReader = downloadSession.openRecordReader(start, count, isCompress); - LOG.warn("odps-read-exception, 重试第{}次", retryTimes); + LOG.warn(MESSAGE_SOURCE.message("readerproxy.1", retryTimes)); retryTimes++; continue; } else { @@ -144,9 +190,7 @@ public class ReaderProxy { throw DataXException .asDataXException( OdpsReaderErrorCode.ILLEGAL_VALUE, - String.format( - "您的分区 [%s] 解析出现错误,解析后正确的配置方式类似为 [ pt=1,dt=1 ].", - eachPartition)); + MESSAGE_SOURCE.message("readerproxy.2", eachPartition)); } // warn: translate to lower case, it's more comfortable to // compare whit user's input columns @@ -168,8 +212,7 @@ public class ReaderProxy { partitionColumnName = partitionColumnName.toLowerCase(); // it's will never happen, but add this checking if (!partitionMap.containsKey(partitionColumnName)) { - String errorMessage = String.format( - "表所有分区信息为: %s 其中找不到 [%s] 对应的分区值.", + String errorMessage = MESSAGE_SOURCE.message("readerproxy.3", com.alibaba.fastjson.JSON.toJSONString(partitionMap), partitionColumnName); throw DataXException.asDataXException( @@ -190,7 +233,7 @@ public class ReaderProxy { * every line record of odps table * @param dataXRecord * every datax record, to be send to writer. method getXXX() case sensitive - * @param type + * @param typeInfo * odps column type * @param columnNameValue * for partition column it's column value, for normal column it's @@ -199,83 +242,681 @@ public class ReaderProxy { * true means partition column and false means normal column * */ private void odpsColumnToDataXField(Record odpsRecord, - com.alibaba.datax.common.element.Record dataXRecord, OdpsType type, + com.alibaba.datax.common.element.Record dataXRecord, TypeInfo typeInfo, String columnNameValue, boolean isPartitionColumn) { + + ArrayRecord record = (ArrayRecord) odpsRecord; + + OdpsType type = typeInfo.getOdpsType(); + switch (type) { - case BIGINT: { - if (isPartitionColumn) { - dataXRecord.addColumn(new LongColumn(columnNameValue)); - } else { - dataXRecord.addColumn(new LongColumn(odpsRecord - .getBigint(columnNameValue))); - } - break; - } - case BOOLEAN: { - if (isPartitionColumn) { - dataXRecord.addColumn(new BoolColumn(columnNameValue)); - } else { - dataXRecord.addColumn(new BoolColumn(odpsRecord - .getBoolean(columnNameValue))); - } - break; - } - case DATETIME: { - if (isPartitionColumn) { - try { - dataXRecord.addColumn(new DateColumn(ColumnCast - .string2Date(new StringColumn(columnNameValue)))); - } catch (ParseException e) { - LOG.error(String.format("", this.partition)); - String errMessage = String.format( - "您读取分区 [%s] 出现日期转换异常, 日期的字符串表示为 [%s].", - this.partition, columnNameValue); - LOG.error(errMessage); - throw DataXException.asDataXException( - OdpsReaderErrorCode.READ_DATA_FAIL, errMessage, e); + case BIGINT: { + if (isPartitionColumn) { + dataXRecord.addColumn(new LongColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new LongColumn(record + .getBigint(columnNameValue))); } - } else { - dataXRecord.addColumn(new DateColumn(odpsRecord - .getDatetime(columnNameValue))); + break; } + case BOOLEAN: { + if (isPartitionColumn) { + dataXRecord.addColumn(new BoolColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new BoolColumn(record + .getBoolean(columnNameValue))); + } + break; + } + case DATE: + case DATETIME: { + // odps分区列,目前支持TINYINT、SMALLINT、INT、BIGINT、VARCHAR和STRING类型 + if (isPartitionColumn) { + try { + dataXRecord.addColumn(new DateColumn(ColumnCast + .string2Date(new StringColumn(columnNameValue)))); + } catch (ParseException e) { + String errMessage = MESSAGE_SOURCE.message("readerproxy.4", + this.partition, columnNameValue); + LOG.error(errMessage); + throw DataXException.asDataXException( + OdpsReaderErrorCode.READ_DATA_FAIL, errMessage, e); + } + } else { + if (com.aliyun.odps.OdpsType.DATETIME == type) { + dataXRecord.addColumn(new DateColumn(record + .getDatetime(columnNameValue))); + } else { + if (this.useDateWithCalendar) { + dataXRecord.addColumn(new DateColumn(record. + getDate(columnNameValue, this.calendarForDate))); + } else { + dataXRecord.addColumn(new DateColumn(record + .getDate(columnNameValue))); + } + + } + } - break; - } - case DOUBLE: { - if (isPartitionColumn) { - dataXRecord.addColumn(new DoubleColumn(columnNameValue)); - } else { - dataXRecord.addColumn(new DoubleColumn(odpsRecord - .getDouble(columnNameValue))); + break; } - break; - } - case DECIMAL: { - if(isPartitionColumn) { - dataXRecord.addColumn(new DoubleColumn(columnNameValue)); - } else { - dataXRecord.addColumn(new DoubleColumn(odpsRecord.getDecimal(columnNameValue))); + case DOUBLE: { + if (isPartitionColumn) { + dataXRecord.addColumn(new DoubleColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new DoubleColumn(record + .getDouble(columnNameValue))); + } + break; } - break; - } - case STRING: { - if (isPartitionColumn) { - dataXRecord.addColumn(new StringColumn(columnNameValue)); - } else { - dataXRecord.addColumn(new StringColumn(odpsRecord - .getString(columnNameValue))); + case DECIMAL: { + if(isPartitionColumn) { + dataXRecord.addColumn(new DoubleColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new DoubleColumn(record.getDecimal(columnNameValue))); + } + break; } - break; - } - default: - throw DataXException - .asDataXException( - OdpsReaderErrorCode.ILLEGAL_VALUE, - String.format( - "DataX 抽取 ODPS 数据不支持字段类型为:[%s]. 目前支持抽取的字段类型有:bigint, boolean, datetime, double, decimal, string. " - + "您可以选择不抽取 DataX 不支持的字段或者联系 ODPS 管理员寻求帮助.", - type)); + case STRING: { + if (isPartitionColumn) { + dataXRecord.addColumn(new StringColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new StringColumn(record + .getString(columnNameValue))); + } + break; + } + case TINYINT: + if (isPartitionColumn) { + dataXRecord.addColumn(new LongColumn(columnNameValue)); + } else { + Byte value = record.getTinyint(columnNameValue); + Integer intValue = value != null ? value.intValue() : null; + dataXRecord.addColumn(new LongColumn(intValue)); + } + break; + case SMALLINT: { + if (isPartitionColumn) { + dataXRecord.addColumn(new LongColumn(columnNameValue)); + } else { + Short value = record.getSmallint(columnNameValue); + Long valueInLong = null; + if (null != value) { + valueInLong = value.longValue(); + } + dataXRecord.addColumn(new LongColumn(valueInLong)); + } + break; + } + case INT: { + if (isPartitionColumn) { + dataXRecord.addColumn(new LongColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new LongColumn(record + .getInt(columnNameValue))); + } + break; + } + case FLOAT: { + if (isPartitionColumn) { + dataXRecord.addColumn(new DoubleColumn(columnNameValue)); + } else { + dataXRecord.addColumn(new DoubleColumn(record + .getFloat(columnNameValue))); + } + break; + } + case VARCHAR: { + if (isPartitionColumn) { + dataXRecord.addColumn(new StringColumn(columnNameValue)); + } else { + Varchar value = record.getVarchar(columnNameValue); + String columnValue = value != null ? value.getValue() : null; + dataXRecord.addColumn(new StringColumn(columnValue)); + } + break; + } + case TIMESTAMP: { + if (isPartitionColumn) { + try { + dataXRecord.addColumn(new DateColumn(ColumnCast + .string2Date(new StringColumn(columnNameValue)))); + } catch (ParseException e) { + String errMessage = MESSAGE_SOURCE.message("readerproxy.4", + this.partition, columnNameValue); + LOG.error(errMessage); + throw DataXException.asDataXException( + OdpsReaderErrorCode.READ_DATA_FAIL, errMessage, e); + } + } else { + dataXRecord.addColumn(new DateColumn(record + .getTimestamp(columnNameValue))); + } + + break; + } + case BINARY: { + if (isPartitionColumn) { + dataXRecord.addColumn(new BytesColumn(columnNameValue.getBytes())); + } else { +// dataXRecord.addColumn(new BytesColumn(record +// .getBinary(columnNameValue).data())); + Binary binaryData = record.getBinary(columnNameValue); + if (null == binaryData) { + dataXRecord.addColumn(new BytesColumn(null)); + } else { + dataXRecord.addColumn(new BytesColumn(binaryData.data())); + } + } + break; + } + case ARRAY: { + if (isPartitionColumn) { + dataXRecord.addColumn(new StringColumn(columnNameValue)); + } else { + List arrayValue = record.getArray(columnNameValue); + if (arrayValue == null) { + dataXRecord.addColumn(new StringColumn(null)); + } else { + dataXRecord.addColumn(new StringColumn(JSON.toJSONString(transOdpsArrayToJavaList(arrayValue, (ArrayTypeInfo)typeInfo)))); + } + } + break; + } + case MAP: { + if (isPartitionColumn) { + dataXRecord.addColumn(new StringColumn(columnNameValue)); + } else { + Map mapValue = record.getMap(columnNameValue); + if (mapValue == null) { + dataXRecord.addColumn(new StringColumn(null)); + } else { + dataXRecord.addColumn(new StringColumn(JSON.toJSONString(transOdpsMapToJavaMap(mapValue, (MapTypeInfo)typeInfo)))); + } + } + break; + } + case STRUCT: { + if (isPartitionColumn) { + dataXRecord.addColumn(new StringColumn(columnNameValue)); + } else { + Struct structValue = record.getStruct(columnNameValue); + if (structValue == null) { + dataXRecord.addColumn(new StringColumn(null)); + } else { + dataXRecord.addColumn(new StringColumn(JSON.toJSONString(transOdpsStructToJavaMap(structValue)))); + } + } + break; + } + default: + throw DataXException.asDataXException( + OdpsReaderErrorCode.ILLEGAL_VALUE, + MESSAGE_SOURCE.message("readerproxy.5", type)); } } + + private List transOdpsArrayToJavaList(List odpsArray, ArrayTypeInfo typeInfo) { + TypeInfo eleType = typeInfo.getElementTypeInfo(); + List result = new ArrayList(); + switch (eleType.getOdpsType()) { + // warn:array [1.2, 3.4] 被转为了:"["1.2", "3.4"]", 本来应该被转换成 "[1.2, 3.4]" + // 注意回归Case覆盖 + case BIGINT: + case DOUBLE: + case INT: + case FLOAT: + case DECIMAL: + case TINYINT: + case SMALLINT: + for (Object item : odpsArray) { + Object object = item; + result.add(object == null ? NULL_INDICATOR : object); + } + return result; + case BOOLEAN: // 未调整array 问题 + case STRING: + case VARCHAR: + case CHAR: + case TIMESTAMP: + case DATE: + for (Object item : odpsArray) { + Object object = item; + result.add(object == null ? NULL_INDICATOR : object.toString()); + } + return result; + /** + * 日期类型 + */ + case DATETIME: + for (Object item : odpsArray) { + Date dateVal = (Date) item; + result.add(dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal)); + } + return result; + /** + * 字节数组 + */ + case BINARY: + for (Object item : odpsArray) { + Binary binaryVal = (Binary) item; + result.add(binaryVal == null ? NULL_INDICATOR : + Base64.encodeBase64(binaryVal.data())); + } + return result; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + for (Object item : odpsArray) { + IntervalDayTime dayTimeVal = (IntervalDayTime) item; + result.add(dayTimeVal == null ? NULL_INDICATOR : + transIntervalDayTimeToJavaMap(dayTimeVal)); + } + return result; + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + for (Object item : odpsArray) { + IntervalYearMonth yearMonthVal = (IntervalYearMonth) item; + result.add(yearMonthVal == null ? NULL_INDICATOR : + transIntervalYearMonthToJavaMap(yearMonthVal)); + } + return result; + /** + * 结构体 + */ + case STRUCT: + for (Object item : odpsArray) { + Struct structVal = (Struct) item; + result.add(structVal == null ? NULL_INDICATOR : + transOdpsStructToJavaMap(structVal)); + } + return result; + /** + * MAP类型 + */ + case MAP: + for (Object item : odpsArray) { + Map mapVal = (Map) item; + result.add(mapVal == null ? NULL_INDICATOR : + transOdpsMapToJavaMap(mapVal, (MapTypeInfo) eleType)); + } + return result; + /** + * ARRAY类型 + */ + case ARRAY: + for (Object item : odpsArray) { + List arrayVal = (List) item; + result.add(arrayVal == null ? NULL_INDICATOR : + transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) eleType)); + } + return result; + default: + throw new IllegalArgumentException("decode record failed. column type: " + eleType.getTypeName()); + } + } + private Map transOdpsMapToJavaMap(Map odpsMap, MapTypeInfo typeInfo) { + TypeInfo keyType = typeInfo.getKeyTypeInfo(); + TypeInfo valueType = typeInfo.getValueTypeInfo(); + Map result = new HashMap(); + Set entrySet = null; + switch (valueType.getOdpsType()) { + case BIGINT: + case DOUBLE: + case BOOLEAN: + case STRING: + case DECIMAL: + case TINYINT: + case SMALLINT: + case INT: + case FLOAT: + case CHAR: + case VARCHAR: + case DATE: + case TIMESTAMP: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Object value = item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), value == null ? NULL_INDICATOR : value.toString()); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Object value = item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + value == null ? NULL_INDICATOR : value.toString()); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Object value = item.getValue(); + result.put(item.getKey(), value == null ? NULL_INDICATOR : value.toString()); + } + return result; + } + /** + * 日期类型 + */ + case DATETIME: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Date dateVal = (Date) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), + dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Date dateVal = (Date) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Date dateVal = (Date) item.getValue(); + result.put(item.getKey(), dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal)); + } + return result; + } + /** + * 字节数组 + */ + case BINARY: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Binary binaryVal = (Binary) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), binaryVal == null ? NULL_INDICATOR : + Base64.encodeBase64(binaryVal.data())); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Binary binaryVal = (Binary) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + binaryVal == null ? NULL_INDICATOR : + Base64.encodeBase64(binaryVal.data())); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Binary binaryVal = (Binary) item.getValue(); + result.put(item.getKey(), binaryVal == null ? NULL_INDICATOR : + Base64.encodeBase64(binaryVal.data())); + } + return result; + } + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalDayTime dayTimeVal = (IntervalDayTime) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), dayTimeVal == null ? NULL_INDICATOR : + transIntervalDayTimeToJavaMap(dayTimeVal)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalDayTime dayTimeVal = (IntervalDayTime) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + dayTimeVal == null ? NULL_INDICATOR : + transIntervalDayTimeToJavaMap(dayTimeVal)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalDayTime dayTimeVal = (IntervalDayTime) item.getValue(); + result.put(item.getKey(), dayTimeVal == null ? NULL_INDICATOR : + transIntervalDayTimeToJavaMap(dayTimeVal)); + } + return result; + } + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalYearMonth yearMonthVal = (IntervalYearMonth) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), yearMonthVal == null ? NULL_INDICATOR : + transIntervalYearMonthToJavaMap(yearMonthVal)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalYearMonth yearMonthVal = (IntervalYearMonth) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + yearMonthVal == null ? NULL_INDICATOR : + transIntervalYearMonthToJavaMap(yearMonthVal)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + IntervalYearMonth yearMonthVal = (IntervalYearMonth) item.getValue(); + result.put(item.getKey(), yearMonthVal == null ? NULL_INDICATOR : + transIntervalYearMonthToJavaMap(yearMonthVal)); + } + return result; + } + /** + * 结构体 + */ + case STRUCT: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Struct structVal = (Struct) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()), structVal == null ? NULL_INDICATOR : + transOdpsStructToJavaMap(structVal)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Struct structVal = (Struct) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + structVal == null ? NULL_INDICATOR : + transOdpsStructToJavaMap(structVal)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Struct structVal = (Struct) item.getValue(); + result.put(item.getKey(), structVal == null ? NULL_INDICATOR : + transOdpsStructToJavaMap(structVal)); + } + return result; + } + /** + * MAP类型 + */ + case MAP: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Map mapVal = (Map) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()),mapVal == null ? NULL_INDICATOR : + transOdpsMapToJavaMap(mapVal, (MapTypeInfo) valueType)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Map mapVal = (Map) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + mapVal == null ? NULL_INDICATOR : transOdpsMapToJavaMap(mapVal, (MapTypeInfo) valueType)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + Map mapVal = (Map) item.getValue(); + result.put(item.getKey(), mapVal == null ? NULL_INDICATOR : + transOdpsMapToJavaMap(mapVal, (MapTypeInfo) valueType)); + } + return result; + } + /** + * ARRAY类型 + */ + case ARRAY: + switch (keyType.getOdpsType()) { + case DATETIME: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + List arrayVal = (List) item.getValue(); + result.put(dateFormat.format((Date)item.getKey()),arrayVal == null ? NULL_INDICATOR : + transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) valueType)); + } + return result; + case BINARY: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + List arrayVal = (List) item.getValue(); + result.put(Base64.encodeBase64(((Binary)item.getKey()).data()), + arrayVal == null ? NULL_INDICATOR : transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) valueType)); + } + return result; + default: + entrySet = odpsMap.entrySet(); + for (Map.Entry item : entrySet) { + List arrayVal = (List) item.getValue(); + result.put(item.getKey(), arrayVal == null ? NULL_INDICATOR : + transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) valueType)); + } + return result; + } + default: + throw new IllegalArgumentException("decode record failed. column type: " + valueType.getTypeName()); + } + } + + private Map transIntervalDayTimeToJavaMap(IntervalDayTime dayTime) { + Map result = new HashMap(); + result.put("totalSeconds", dayTime.getTotalSeconds()); + result.put("nanos", (long)dayTime.getNanos()); + return result; + } + + private Map transOdpsStructToJavaMap(Struct odpsStruct) { + Map result = new HashMap(); + for (int i = 0; i < odpsStruct.getFieldCount(); i++) { + String fieldName = odpsStruct.getFieldName(i); + Object fieldValue = odpsStruct.getFieldValue(i); + TypeInfo fieldType = odpsStruct.getFieldTypeInfo(i); + switch (fieldType.getOdpsType()) { + case BIGINT: + case DOUBLE: + case BOOLEAN: + case STRING: + case DECIMAL: + case TINYINT: + case SMALLINT: + case INT: + case FLOAT: + case VARCHAR: + case CHAR: + case TIMESTAMP: + case DATE: + result.put(fieldName, fieldValue == null ? NULL_INDICATOR : fieldValue.toString()); + break; + /** + * 日期类型 + */ + case DATETIME: + Date dateVal = (Date) fieldValue; + result.put(fieldName, dateVal == null ? NULL_INDICATOR : dateFormat.format(dateVal)); + break; + /** + * 字节数组 + */ + case BINARY: + Binary binaryVal = (Binary) fieldValue; + result.put(fieldName, binaryVal == null ? NULL_INDICATOR : + Base64.encodeBase64(binaryVal.data())); + break; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + IntervalDayTime dayTimeVal = (IntervalDayTime) fieldValue; + result.put(fieldName, dayTimeVal == null ? NULL_INDICATOR : + transIntervalDayTimeToJavaMap(dayTimeVal)); + break; + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + IntervalYearMonth yearMonthVal = (IntervalYearMonth) fieldValue; + result.put(fieldName, yearMonthVal == null ? NULL_INDICATOR : + transIntervalYearMonthToJavaMap(yearMonthVal)); + break; + /** + * 结构体 + */ + case STRUCT: + Struct structVal = (Struct) fieldValue; + result.put(fieldName, structVal == null ? NULL_INDICATOR : + transOdpsStructToJavaMap(structVal)); + break; + /** + * MAP类型 + */ + case MAP: + Map mapVal = (Map) fieldValue; + result.put(fieldName, mapVal == null ? NULL_INDICATOR : + transOdpsMapToJavaMap(mapVal, (MapTypeInfo) fieldType)); + break; + /** + * ARRAY类型 + */ + case ARRAY: + List arrayVal = (List) fieldValue; + result.put(fieldName, arrayVal == null ? NULL_INDICATOR : + transOdpsArrayToJavaList(arrayVal, (ArrayTypeInfo) fieldType)); + break; + default: + throw new IllegalArgumentException("decode record failed. column type: " + fieldType.getTypeName()); + } + } + + return result; + } + + private Map transIntervalYearMonthToJavaMap(IntervalYearMonth yearMonth) { + Map result = new HashMap(); + result.put("years", yearMonth.getYears()); + result.put("months", yearMonth.getMonths()); + return result; + } + } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/IdAndKeyUtil.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/IdAndKeyUtil.java index faa90a98..05722b59 100644 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/IdAndKeyUtil.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/IdAndKeyUtil.java @@ -1,5 +1,5 @@ /** - * (C) 2010-2014 Alibaba Group Holding Limited. + * (C) 2010-2022 Alibaba Group Holding Limited. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,9 +18,11 @@ package com.alibaba.datax.plugin.reader.odpsreader.util; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.reader.odpsreader.Constant; +import com.alibaba.datax.common.util.IdAndKeyRollingUtil; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.plugin.reader.odpsreader.Key; import com.alibaba.datax.plugin.reader.odpsreader.OdpsReaderErrorCode; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +31,7 @@ import java.util.Map; public class IdAndKeyUtil { private static Logger LOG = LoggerFactory.getLogger(IdAndKeyUtil.class); + private static MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(IdAndKeyUtil.class); public static Configuration parseAccessIdAndKey(Configuration originalConfig) { String accessId = originalConfig.getString(Key.ACCESS_ID); @@ -50,36 +53,13 @@ public class IdAndKeyUtil { private static Configuration getAccessIdAndKeyFromEnv(Configuration originalConfig, Map envProp) { - String accessId = null; - String accessKey = null; - - String skynetAccessID = envProp.get(Constant.SKYNET_ACCESSID); - String skynetAccessKey = envProp.get(Constant.SKYNET_ACCESSKEY); - - if (StringUtils.isNotBlank(skynetAccessID) - || StringUtils.isNotBlank(skynetAccessKey)) { - /** - * 环境变量中,如果存在SKYNET_ACCESSID/SKYNET_ACCESSKEy(只要有其中一个变量,则认为一定是两个都存在的!), - * 则使用其值作为odps的accessId/accessKey(会解密) - */ - - LOG.info("Try to get accessId/accessKey from environment."); - accessId = skynetAccessID; - accessKey = DESCipher.decrypt(skynetAccessKey); - if (StringUtils.isNotBlank(accessKey)) { - originalConfig.set(Key.ACCESS_ID, accessId); - originalConfig.set(Key.ACCESS_KEY, accessKey); - LOG.info("Get accessId/accessKey from environment variables successfully."); - } else { - throw DataXException.asDataXException(OdpsReaderErrorCode.GET_ID_KEY_FAIL, - String.format("从环境变量中获取accessId/accessKey 失败, accessId=[%s]", accessId)); - } - } else { + // 如果获取到ak,在getAccessIdAndKeyFromEnv中已经设置到originalConfig了 + String accessKey = IdAndKeyRollingUtil.getAccessIdAndKeyFromEnv(originalConfig); + if (StringUtils.isBlank(accessKey)) { // 无处获取(既没有配置在作业中,也没用在环境变量中) throw DataXException.asDataXException(OdpsReaderErrorCode.GET_ID_KEY_FAIL, - "无法获取到accessId/accessKey. 它们既不存在于您的配置中,也不存在于环境变量中."); + MESSAGE_SOURCE.message("idandkeyutil.2")); } - return originalConfig; } } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/LocalStrings.properties b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/LocalStrings.properties new file mode 100644 index 00000000..897ce232 --- /dev/null +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/LocalStrings.properties @@ -0,0 +1,25 @@ +descipher.1=\u957F\u5EA6\u4E0D\u662F\u5076\u6570 + +idandkeyutil.1=\u4ECE\u73AF\u5883\u53D8\u91CF\u4E2D\u83B7\u53D6accessId/accessKey \u5931\u8D25, accessId=[{0}] +idandkeyutil.2=\u65E0\u6CD5\u83B7\u53D6\u5230accessId/accessKey. \u5B83\u4EEC\u65E2\u4E0D\u5B58\u5728\u4E8E\u60A8\u7684\u914D\u7F6E\u4E2D\uFF0C\u4E5F\u4E0D\u5B58\u5728\u4E8E\u73AF\u5883\u53D8\u91CF\u4E2D. + + +odpssplitutil.1=\u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u4E0D\u80FD\u4E3A\u7A7A\u767D. +odpssplitutil.2=\u5207\u5206\u7684 recordCount \u4E0D\u80FD\u4E3A\u8D1F\u6570.recordCount={0} +odpssplitutil.3=\u5207\u5206\u7684 adviceNum \u4E0D\u80FD\u4E3A\u8D1F\u6570.adviceNum={0} +odpssplitutil.4=\u6CE8\u610F: \u7531\u4E8E\u60A8\u914D\u7F6E\u4E86successOnNoPartition\u503C\u4E3Atrue (\u5373\u5F53\u5206\u533A\u503C\u4E0D\u5B58\u5728\u65F6, \u540C\u6B65\u4EFB\u52A1\u4E0D\u62A5\u9519), \u60A8\u8BBE\u7F6E\u7684\u5206\u533A\u65E0\u6CD5\u5339\u914D\u5230ODPS\u8868\u4E2D\u5BF9\u5E94\u7684\u5206\u533A, \u540C\u6B65\u4EFB\u52A1\u7EE7\u7EED... + +odpsutil.1=datax\u83B7\u53D6\u4E0D\u5230\u6E90\u8868\u7684\u5217\u4FE1\u606F\uFF0C \u7531\u4E8E\u60A8\u672A\u914D\u7F6E\u8BFB\u53D6\u6E90\u5934\u8868\u7684\u5217\u4FE1\u606F. datax\u65E0\u6CD5\u77E5\u9053\u8BE5\u62BD\u53D6\u8868\u7684\u54EA\u4E9B\u5B57\u6BB5\u7684\u6570\u636E\uFF0C \u6B63\u786E\u7684\u914D\u7F6E\u65B9\u5F0F\u662F\u7ED9 column \u914D\u7F6E\u4E0A\u60A8\u9700\u8981\u8BFB\u53D6\u7684\u5217\u540D\u79F0,\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694. +odpsutil.2=\u60A8\u6240\u914D\u7F6E\u7684maxRetryTime \u503C\u9519\u8BEF. \u8BE5\u503C\u4E0D\u80FD\u5C0F\u4E8E1, \u4E14\u4E0D\u80FD\u5927\u4E8E {0}. \u63A8\u8350\u7684\u914D\u7F6E\u65B9\u5F0F\u662F\u7ED9maxRetryTime \u914D\u7F6E1-11\u4E4B\u95F4\u7684\u67D0\u4E2A\u503C. \u8BF7\u60A8\u68C0\u67E5\u914D\u7F6E\u5E76\u505A\u51FA\u76F8\u5E94\u4FEE\u6539. +odpsutil.3=\u4E0D\u652F\u6301\u7684\u8D26\u53F7\u7C7B\u578B:[{0}]. \u8D26\u53F7\u7C7B\u578B\u76EE\u524D\u4EC5\u652F\u6301aliyun, taobao. +odpsutil.4=\u60A8\u6240\u914D\u7F6E\u7684\u5206\u533A\u4E0D\u80FD\u4E3A\u7A7A\u767D. +odpsutil.5=\u6E90\u5934\u8868\u7684\u5217\u914D\u7F6E\u9519\u8BEF. \u60A8\u6240\u914D\u7F6E\u7684\u5217 [{0}] \u4E0D\u5B58\u5728. +odpsutil.6=open RecordReader\u5931\u8D25. \u8BF7\u8054\u7CFB ODPS \u7BA1\u7406\u5458\u5904\u7406. +odpsutil.7=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 [project] \u662F\u5426\u6B63\u786E. +odpsutil.8=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 [table] \u662F\u5426\u6B63\u786E. +odpsutil.9=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 [accessId] [accessKey]\u662F\u5426\u6B63\u786E. +odpsutil.10=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 [accessKey] \u662F\u5426\u6B63\u786E. +odpsutil.11=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 [accessId] [accessKey] [project]\u662F\u5426\u5339\u914D. +odpsutil.12=\u52A0\u8F7D ODPS \u6E90\u5934\u8868:{0} \u5931\u8D25. \u8BF7\u68C0\u67E5\u60A8\u914D\u7F6E\u7684 ODPS \u6E90\u5934\u8868\u7684 project,table,accessId,accessKey,odpsServer\u7B49\u503C. +odpsutil.13=\u6267\u884C ODPS SQL\u5931\u8D25, \u8FD4\u56DE\u503C\u4E3A:{0}. \u8BF7\u4ED4\u7EC6\u68C0\u67E5ODPS SQL\u662F\u5426\u6B63\u786E, \u5982\u679C\u68C0\u67E5\u65E0\u8BEF, \u8BF7\u8054\u7CFB ODPS \u503C\u73ED\u540C\u5B66\u5904\u7406. SQL \u5185\u5BB9\u4E3A:[\n{1}\n]. +odpsutil.14=\u6267\u884C ODPS SQL \u65F6\u629B\u51FA\u5F02\u5E38, \u8BF7\u4ED4\u7EC6\u68C0\u67E5ODPS SQL\u662F\u5426\u6B63\u786E, \u5982\u679C\u68C0\u67E5\u65E0\u8BEF, \u8BF7\u8054\u7CFB ODPS \u503C\u73ED\u540C\u5B66\u5904\u7406. SQL \u5185\u5BB9\u4E3A:[\n{0}\n]. \ No newline at end of file diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsSplitUtil.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsSplitUtil.java index b7f4f1aa..2030033d 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsSplitUtil.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsSplitUtil.java @@ -2,19 +2,26 @@ package com.alibaba.datax.plugin.reader.odpsreader.util; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.common.util.RangeSplitUtil; import com.alibaba.datax.plugin.reader.odpsreader.Constant; import com.alibaba.datax.plugin.reader.odpsreader.Key; import com.alibaba.datax.plugin.reader.odpsreader.OdpsReaderErrorCode; import com.aliyun.odps.Odps; import com.aliyun.odps.tunnel.TableTunnel.DownloadSession; + import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; public final class OdpsSplitUtil { + private static final Logger LOG = LoggerFactory.getLogger(OdpsSplitUtil.class); + + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsSplitUtil.class); public static List doSplit(Configuration originalConfig, Odps odps, int adviceNum) { @@ -36,9 +43,17 @@ public final class OdpsSplitUtil { List partitions = originalConfig.getList(Key.PARTITION, String.class); + if ((null == partitions || partitions.isEmpty()) && originalConfig.getBool(Key.SUCCESS_ON_NO_PATITION, false)) { + Configuration tempConfig = originalConfig.clone(); + tempConfig.set(Key.PARTITION, null); + splittedConfigs.add(tempConfig); + LOG.warn(MESSAGE_SOURCE.message("odpssplitutil.4")); + return splittedConfigs; + } + if (null == partitions || partitions.isEmpty()) { throw DataXException.asDataXException(OdpsReaderErrorCode.ILLEGAL_VALUE, - "您所配置的分区不能为空白."); + MESSAGE_SOURCE.message("odpssplitutil.1")); } //splitMode 默认为 record @@ -141,11 +156,11 @@ public final class OdpsSplitUtil { */ private static List> splitRecordCount(long recordCount, int adviceNum) { if(recordCount<0){ - throw new IllegalArgumentException("切分的 recordCount 不能为负数.recordCount=" + recordCount); + throw new IllegalArgumentException(MESSAGE_SOURCE.message("odpssplitutil.2", recordCount)); } if(adviceNum<1){ - throw new IllegalArgumentException("切分的 adviceNum 不能为负数.adviceNum=" + adviceNum); + throw new IllegalArgumentException(MESSAGE_SOURCE.message("odpssplitutil.3", adviceNum)); } List> result = new ArrayList>(); diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java index 2aa3f66e..0103a383 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java @@ -2,16 +2,22 @@ package com.alibaba.datax.plugin.reader.odpsreader.util; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.DataXCaseEnvUtil; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.common.util.RetryUtil; import com.alibaba.datax.plugin.reader.odpsreader.ColumnType; import com.alibaba.datax.plugin.reader.odpsreader.Constant; import com.alibaba.datax.plugin.reader.odpsreader.Key; import com.alibaba.datax.plugin.reader.odpsreader.OdpsReaderErrorCode; import com.aliyun.odps.*; +import com.aliyun.odps.Column; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; +import com.aliyun.odps.account.StsAccount; import com.aliyun.odps.data.RecordReader; +import com.aliyun.odps.task.SQLTask; import com.aliyun.odps.tunnel.TableTunnel; +import com.aliyun.odps.type.TypeInfo; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.MutablePair; @@ -19,13 +25,12 @@ import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.Callable; public final class OdpsUtil { private static final Logger LOG = LoggerFactory.getLogger(OdpsUtil.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsUtil.class); public static int MAX_RETRY_TIME = 10; @@ -37,8 +42,8 @@ public final class OdpsUtil { if (null == originalConfig.getList(Key.COLUMN) || originalConfig.getList(Key.COLUMN, String.class).isEmpty()) { - throw DataXException.asDataXException(OdpsReaderErrorCode.REQUIRED_VALUE, "datax获取不到源表的列信息, 由于您未配置读取源头表的列信息. datax无法知道该抽取表的哪些字段的数据 " + - "正确的配置方式是给 column 配置上您需要读取的列名称,用英文逗号分隔."); + throw DataXException.asDataXException(OdpsReaderErrorCode.REQUIRED_VALUE, + MESSAGE_SOURCE.message("odpsutil.1")); } } @@ -47,8 +52,8 @@ public final class OdpsUtil { int maxRetryTime = originalConfig.getInt(Key.MAX_RETRY_TIME, OdpsUtil.MAX_RETRY_TIME); if (maxRetryTime < 1 || maxRetryTime > OdpsUtil.MAX_RETRY_TIME) { - throw DataXException.asDataXException(OdpsReaderErrorCode.ILLEGAL_VALUE, "您所配置的maxRetryTime 值错误. 该值不能小于1, 且不能大于 " + OdpsUtil.MAX_RETRY_TIME + - ". 推荐的配置方式是给maxRetryTime 配置1-11之间的某个值. 请您检查配置并做出相应修改."); + throw DataXException.asDataXException(OdpsReaderErrorCode.ILLEGAL_VALUE, + MESSAGE_SOURCE.message("odpsutil.2", OdpsUtil.MAX_RETRY_TIME)); } MAX_RETRY_TIME = maxRetryTime; } @@ -59,11 +64,12 @@ public final class OdpsUtil { String accessId = originalConfig.getString(Key.ACCESS_ID); String accessKey = originalConfig.getString(Key.ACCESS_KEY); String project = originalConfig.getString(Key.PROJECT); + String securityToken = originalConfig.getString(Key.SECURITY_TOKEN); String packageAuthorizedProject = originalConfig.getString(Key.PACKAGE_AUTHORIZED_PROJECT); String defaultProject; - if(StringUtils.isBlank(packageAuthorizedProject)) { + if (StringUtils.isBlank(packageAuthorizedProject)) { defaultProject = project; } else { defaultProject = packageAuthorizedProject; @@ -74,21 +80,26 @@ public final class OdpsUtil { Account account = null; if (accountType.equalsIgnoreCase(Constant.DEFAULT_ACCOUNT_TYPE)) { - account = new AliyunAccount(accessId, accessKey); + if (StringUtils.isNotBlank(securityToken)) { + account = new StsAccount(accessId, accessKey, securityToken); + } else { + account = new AliyunAccount(accessId, accessKey); + } } else { throw DataXException.asDataXException(OdpsReaderErrorCode.ACCOUNT_TYPE_ERROR, - String.format("不支持的账号类型:[%s]. 账号类型目前仅支持aliyun, taobao.", accountType)); + MESSAGE_SOURCE.message("odpsutil.3", accountType)); } Odps odps = new Odps(account); boolean isPreCheck = originalConfig.getBool("dryRun", false); - if(isPreCheck) { + if (isPreCheck) { odps.getRestClient().setConnectTimeout(3); odps.getRestClient().setReadTimeout(3); odps.getRestClient().setRetryTimes(2); } odps.setDefaultProject(defaultProject); odps.setEndpoint(odpsServer); + odps.setUserAgent("DATAX"); return odps; } @@ -103,7 +114,7 @@ public final class OdpsUtil { table.reload(); return table; } - }, 3, 1000, false); + }, DataXCaseEnvUtil.getRetryTimes(3), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(false)); } catch (Exception e) { throwDataXExceptionWhenReloadTable(e, tableName); } @@ -154,7 +165,7 @@ public final class OdpsUtil { public static String formatPartition(String partition) { if (StringUtils.isBlank(partition)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ILLEGAL_VALUE, - "您所配置的分区不能为空白."); + MESSAGE_SOURCE.message("odpsutil.4")); } else { return partition.trim().replaceAll(" *= *", "=") .replaceAll(" */ *", ",").replaceAll(" *, *", ",") @@ -175,6 +186,35 @@ public final class OdpsUtil { } } + /** + * 将用户配置的分区分类成两类: + * (1) 包含 HINT 的区间过滤; + * (2) 不包含 HINT 的普通模式 + * @param userConfiguredPartitions + * @return + */ + public static UserConfiguredPartitionClassification classifyUserConfiguredPartitions(List userConfiguredPartitions){ + UserConfiguredPartitionClassification userConfiguredPartitionClassification = new UserConfiguredPartitionClassification(); + + List userConfiguredHintPartition = new ArrayList(); + List userConfiguredNormalPartition = new ArrayList(); + boolean isIncludeHintPartition = false; + for (String userConfiguredPartition : userConfiguredPartitions){ + if (StringUtils.isNotBlank(userConfiguredPartition)){ + if (userConfiguredPartition.trim().toLowerCase().startsWith(Constant.PARTITION_FILTER_HINT)) { + userConfiguredHintPartition.add(userConfiguredPartition.trim()); + isIncludeHintPartition = true; + }else { + userConfiguredNormalPartition.add(userConfiguredPartition.trim()); + } + } + } + userConfiguredPartitionClassification.setIncludeHintPartition(isIncludeHintPartition); + userConfiguredPartitionClassification.setUserConfiguredHintPartition(userConfiguredHintPartition); + userConfiguredPartitionClassification.setUserConfiguredNormalPartition(userConfiguredNormalPartition); + return userConfiguredPartitionClassification; + } + public static List> parseColumns( List allNormalColumns, List allPartitionColumns, List userConfiguredColumns) { @@ -182,7 +222,7 @@ public final class OdpsUtil { // warn: upper & lower case for (String column : userConfiguredColumns) { MutablePair pair = new MutablePair(); - + // if constant column if (OdpsUtil.checkIfConstantColumn(column)) { // remove first and last ' @@ -213,14 +253,14 @@ public final class OdpsUtil { // not exist column throw DataXException.asDataXException( OdpsReaderErrorCode.ILLEGAL_VALUE, - String.format("源头表的列配置错误. 您所配置的列 [%s] 不存在.", column)); + MESSAGE_SOURCE.message("odpsutil.5", column)); } return parsededColumns; } - + private static int indexOfIgnoreCase(List columnCollection, - String column) { + String column) { int index = -1; for (int i = 0; i < columnCollection.size(); i++) { if (columnCollection.get(i).equalsIgnoreCase(column)) { @@ -255,7 +295,7 @@ public final class OdpsUtil { return tunnel.createDownloadSession( projectName, tableName); } - }, MAX_RETRY_TIME, 1000, true); + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.CREATE_DOWNLOADSESSION_FAIL, e); } @@ -276,7 +316,7 @@ public final class OdpsUtil { return tunnel.getDownloadSession( projectName, tableName, sessionId); } - }, MAX_RETRY_TIME ,1000, true); + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.GET_DOWNLOADSESSION_FAIL, e); } @@ -299,7 +339,7 @@ public final class OdpsUtil { return tunnel.createDownloadSession( projectName, tableName, partitionSpec); } - }, MAX_RETRY_TIME, 1000, true); + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.CREATE_DOWNLOADSESSION_FAIL, e); } @@ -321,58 +361,152 @@ public final class OdpsUtil { return tunnel.getDownloadSession( projectName, tableName, partitionSpec, sessionId); } - }, MAX_RETRY_TIME, 1000, true); + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.GET_DOWNLOADSESSION_FAIL, e); } } - - + /** + * odpsreader采用的直接读取所有列的downloadSession + */ public static RecordReader getRecordReader(final TableTunnel.DownloadSession downloadSession, final long start, final long count, - final boolean isCompress) { + final boolean isCompress) { try { return RetryUtil.executeWithRetry(new Callable() { @Override public RecordReader call() throws Exception { return downloadSession.openRecordReader(start, count, isCompress); } - }, MAX_RETRY_TIME, 1000, true); + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.OPEN_RECORD_READER_FAILED, - "open RecordReader失败. 请联系 ODPS 管理员处理.", e); + MESSAGE_SOURCE.message("odpsutil.6"), e); } } + + /** + * odpsreader采用的指定读取某些列的downloadSession + */ + public static RecordReader getRecordReader(final TableTunnel.DownloadSession downloadSession, final long start, final long count, + final boolean isCompress, final List columns) { + try { + return RetryUtil.executeWithRetry(new Callable() { + @Override + public RecordReader call() throws Exception { + return downloadSession.openRecordReader(start, count, isCompress, columns); + } + }, DataXCaseEnvUtil.getRetryTimes(MAX_RETRY_TIME), DataXCaseEnvUtil.getRetryInterval(1000), DataXCaseEnvUtil.getRetryExponential(true)); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsReaderErrorCode.OPEN_RECORD_READER_FAILED, + MESSAGE_SOURCE.message("odpsutil.6"), e); + } + } + + /** * table.reload() 方法抛出的 odps 异常 转化为更清晰的 datax 异常 抛出 */ public static void throwDataXExceptionWhenReloadTable(Exception e, String tableName) { - if(e.getMessage() != null) { - if(e.getMessage().contains(OdpsExceptionMsg.ODPS_PROJECT_NOT_FOUNT)) { + if (e.getMessage() != null) { + if (e.getMessage().contains(OdpsExceptionMsg.ODPS_PROJECT_NOT_FOUNT)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ODPS_PROJECT_NOT_FOUNT, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 [project] 是否正确.", tableName), e); - } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_TABLE_NOT_FOUNT)) { + MESSAGE_SOURCE.message("odpsutil.7", tableName), e); + } else if (e.getMessage().contains(OdpsExceptionMsg.ODPS_TABLE_NOT_FOUNT)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ODPS_TABLE_NOT_FOUNT, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 [table] 是否正确.", tableName), e); - } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_ID_NOT_FOUND)) { + MESSAGE_SOURCE.message("odpsutil.8", tableName), e); + } else if (e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_ID_NOT_FOUND)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ODPS_ACCESS_KEY_ID_NOT_FOUND, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 [accessId] [accessKey]是否正确.", tableName), e); - } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_INVALID)) { + MESSAGE_SOURCE.message("odpsutil.9", tableName), e); + } else if (e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_INVALID)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ODPS_ACCESS_KEY_INVALID, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 [accessKey] 是否正确.", tableName), e); - } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_DENY)) { + MESSAGE_SOURCE.message("odpsutil.10", tableName), e); + } else if (e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_DENY)) { throw DataXException.asDataXException(OdpsReaderErrorCode.ODPS_ACCESS_DENY, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 [accessId] [accessKey] [project]是否匹配.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.11", tableName), e); } } throw DataXException.asDataXException(OdpsReaderErrorCode.ILLEGAL_VALUE, - String.format("加载 ODPS 源头表:%s 失败. " + - "请检查您配置的 ODPS 源头表的 project,table,accessId,accessKey,odpsServer等值.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.12", tableName), e); + } + + public static List getNormalColumns(List> parsedColumns, + Map columnTypeMap) { + List userConfigNormalColumns = new ArrayList(); + Set columnNameSet = new HashSet(); + for (Pair columnInfo : parsedColumns) { + if (columnInfo.getValue() == ColumnType.NORMAL) { + String columnName = columnInfo.getKey(); + if (!columnNameSet.contains(columnName)) { + Column column = new Column(columnName, columnTypeMap.get(columnName)); + userConfigNormalColumns.add(column); + columnNameSet.add(columnName); + } + } + } + return userConfigNormalColumns; + } + + /** + * 执行odps preSql和postSql + * + * @param odps: odps client + * @param sql : 要执行的odps sql语句, 因为会有重试, 所以sql 必须为幂等的 + * @param tag : "preSql" or "postSql" + */ + public static void runSqlTaskWithRetry(final Odps odps, final String sql, final String tag){ + //重试次数 + int retryTimes = 10; + //重试间隔(ms) + long sleepTimeInMilliSecond = 1000L; + try { + RetryUtil.executeWithRetry(new Callable() { + @Override + public Void call() throws Exception { + long beginTime = System.currentTimeMillis(); + + runSqlTask(odps, sql, tag); + + long endIime = System.currentTimeMillis(); + LOG.info(String.format("exectue odps sql: %s finished, cost time : %s ms", + sql, (endIime - beginTime))); + return null; + } + }, DataXCaseEnvUtil.getRetryTimes(retryTimes), DataXCaseEnvUtil.getRetryInterval(sleepTimeInMilliSecond), DataXCaseEnvUtil.getRetryExponential(true)); + } catch (Exception e) { + String errMessage = String.format("Retry %s times to exectue sql :[%s] failed! Exception: %s", + retryTimes, e.getMessage()); + throw DataXException.asDataXException(OdpsReaderErrorCode.RUN_SQL_ODPS_EXCEPTION, errMessage, e); + } + } + + public static void runSqlTask(Odps odps, String sql, String tag) { + if (StringUtils.isBlank(sql)) { + return; + } + + String taskName = String.format("datax_odpsreader_%s_%s", tag, UUID.randomUUID().toString().replace('-', '_')); + + LOG.info("Try to start sqlTask:[{}] to run odps sql:[\n{}\n] .", taskName, sql); + + Instance instance; + Instance.TaskStatus status; + try { + Map hints = new HashMap(); + hints.put("odps.sql.submit.mode", "script"); + instance = SQLTask.run(odps, odps.getDefaultProject(), sql, taskName, hints, null); + instance.waitForSuccess(); + status = instance.getTaskStatus().get(taskName); + if (!Instance.TaskStatus.Status.SUCCESS.equals(status.getStatus())) { + throw DataXException.asDataXException(OdpsReaderErrorCode.RUN_SQL_FAILED, + MESSAGE_SOURCE.message("odpsutil.13", sql)); + } + } catch (DataXException e) { + throw e; + } catch (Exception e) { + throw DataXException.asDataXException(OdpsReaderErrorCode.RUN_SQL_ODPS_EXCEPTION, + MESSAGE_SOURCE.message("odpsutil.14", sql), e); + } } } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/SqliteUtil.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/SqliteUtil.java new file mode 100644 index 00000000..70c22267 --- /dev/null +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/SqliteUtil.java @@ -0,0 +1,103 @@ +package com.alibaba.datax.plugin.reader.odpsreader.util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.datax.plugin.reader.odpsreader.Constant; +import com.aliyun.odps.Partition; +import com.aliyun.odps.Table; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SqliteUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(SqliteUtil.class); + + private Connection connection = null; + private Statement stmt = null; + + private String partitionName = "partitionName"; + + private String createSQLTemplate = "Create Table DataXODPSReaderPPR (" + partitionName +" String, %s)"; + private String insertSQLTemplate = "Insert Into DataXODPSReaderPPR Values (%s)"; + private String selectSQLTemplate = "Select * From DataXODPSReaderPPR Where %s"; + + public SqliteUtil() throws ClassNotFoundException, SQLException { + + Class.forName("org.sqlite.JDBC"); + this.connection = DriverManager.getConnection("jdbc:sqlite::memory:"); + this.stmt = this.connection.createStatement(); + } + + public void loadAllPartitionsIntoSqlite(Table table, List allOriginPartitions) throws SQLException { + List partitionColumnList = new ArrayList(); + String partition = allOriginPartitions.get(0); + String[] partitionSpecs = partition.split(","); + List partitionKeyList = new ArrayList(); + for (String partitionKeyValue : partitionSpecs) { + String partitionKey = partitionKeyValue.split("=")[0]; + partitionColumnList.add(String.format("%s String", partitionKey)); + partitionKeyList.add(partitionKey); + } + String createSQL = String.format(createSQLTemplate, StringUtils.join(partitionColumnList.toArray(), ",")); + LOGGER.info(createSQL); + this.stmt.execute(createSQL); + + insertAllOriginPartitionIntoSqlite(table, partitionKeyList); + } + + /** + * 根据用户配置的过滤条件, 从sqlite中select出符合的partition列表 + * @param userHintConfiguredPartitions + * @return + */ + public List selectUserConfiguredPartition(List userHintConfiguredPartitions) throws SQLException { + List selectedPartitionsFromSqlite = new ArrayList(); + for (String partitionWhereConditions : userHintConfiguredPartitions) { + String selectUserConfiguredPartitionsSql = String.format(selectSQLTemplate, + StringUtils.remove(partitionWhereConditions, Constant.PARTITION_FILTER_HINT)); + LOGGER.info(selectUserConfiguredPartitionsSql); + ResultSet rs = stmt.executeQuery(selectUserConfiguredPartitionsSql); + while (rs.next()) { + selectedPartitionsFromSqlite.add(getPartitionsValue(rs)); + } + } + return selectedPartitionsFromSqlite; + } + + private String getPartitionsValue (ResultSet rs) throws SQLException { + List partitions = new ArrayList(); + ResultSetMetaData rsMetaData = rs.getMetaData(); + Integer columnCounter = rs.getMetaData().getColumnCount(); + for (int columnIndex = 2; columnIndex <= columnCounter; columnIndex++) { + partitions.add(String.format("%s=%s", rsMetaData.getColumnName(columnIndex), rs.getString(columnIndex))); + } + return StringUtils.join(partitions, ","); + } + + /** + * 将odps table里所有partition值载入sqlite中 + * @param table + * @param partitionKeyList + * @throws SQLException + */ + private void insertAllOriginPartitionIntoSqlite(Table table, List partitionKeyList) throws SQLException { + List partitions = table.getPartitions(); + for (Partition partition : partitions){ + List partitionColumnValue = new ArrayList(); + partitionColumnValue.add("\""+partition.getPartitionSpec().toString()+"\""); + for (String partitionKey : partitionKeyList) { + partitionColumnValue.add("\""+partition.getPartitionSpec().get(partitionKey)+"\""); + } + String insertPartitionValueSql = String.format(insertSQLTemplate, StringUtils.join(partitionColumnValue, ",")); + this.stmt.execute(insertPartitionValueSql); + } + } +} diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/UserConfiguredPartitionClassification.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/UserConfiguredPartitionClassification.java new file mode 100644 index 00000000..1a979969 --- /dev/null +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/UserConfiguredPartitionClassification.java @@ -0,0 +1,39 @@ +package com.alibaba.datax.plugin.reader.odpsreader.util; + +import java.util.List; + +public class UserConfiguredPartitionClassification { + + //包含/*query*/的partition, 例如: /*query*/ dt>=20170101 and dt<= 20170109 + private List userConfiguredHintPartition; + + //不包含/*query*/的partition, 例如: dt=20170101 或者 dt=201701* + private List userConfiguredNormalPartition; + + //是否包含hint的partition + private boolean isIncludeHintPartition; + + public List getUserConfiguredHintPartition() { + return userConfiguredHintPartition; + } + + public void setUserConfiguredHintPartition(List userConfiguredHintPartition) { + this.userConfiguredHintPartition = userConfiguredHintPartition; + } + + public List getUserConfiguredNormalPartition() { + return userConfiguredNormalPartition; + } + + public void setUserConfiguredNormalPartition(List userConfiguredNormalPartition) { + this.userConfiguredNormalPartition = userConfiguredNormalPartition; + } + + public boolean isIncludeHintPartition() { + return isIncludeHintPartition; + } + + public void setIncludeHintPartition(boolean includeHintPartition) { + isIncludeHintPartition = includeHintPartition; + } +} diff --git a/odpsreader/src/main/libs/bcprov-jdk15on-1.52.jar b/odpsreader/src/main/libs/bcprov-jdk15on-1.52.jar deleted file mode 100644 index 6c54dd901cc37c7e2bcb1c42abd64bc2c56c7460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2902942 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'O9 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

g2UALt+q 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⁢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

@YbpC?;9 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

01Ac`DSIcTq`|AJU|izf259 zsFWpCYN?=>Y(r9zzS`Gk(OFGmUQI!87I(cW+|C%j9jZ@pUD_PF*~2DTuQM*)m2;Gv zUx;OwBfj0c3dbKHA*EbXWzeWNKKivn4ZMr9^MD{hPLjJQ^>Tp3Llz--6m56-K>@0; zecA(30mi$T=i5{2EorUkv94y#wmZN4(ORtEct5tGIOo@}n!4>~UBYgU_g2692v90s z)BEZ|LoPl8TIKA5_8osf%L{rU1y9NE_#ldc(+^Aq3c09 zW0S#f)hy~+%yDX>SxY()y&i?4+~gKw(9!`3+xq-Md5D|1Z*?qQkwRe}pfA=-+ac^H zfi^?$tqH21X6cARZVv(lF@vEq$l3sb*=woNLndu!L*F#~qk*Z|F;O#c4cmW<9@jEa z(`O?x2(7H7*~=aDguaMgM~T>x-1A0hY@4l@xg&t0^3sddG8Uuv9HJ*M$igKncK=KdTu-&*tMNNyqr9m7OmBu8BzAUMGRQ7R-6 zh5gd^JCC>li`ybFevjJEy&)r27e$RE@|X#5B=2LV1ZvJ}AyJQxk;0JjFmIsOkYtm4 zhtTMC<54~Gd*H9xd?$!O-z^nJB;i4-b1LZmV0Byn= zVY@kIyXEmV9si1m>p{q}X+x5}EI=Ybo~Fkm$siu<9E!lJUFadZsM0P2zV}Zy6GJqfF@e8*_@;cLCAn`zUk%SLPJe ze{YTonwc2cJN%3FPti&S=@-0L5}-(Qe3&03xh!z2cI=)~FQI%6<)3t2(HI$#_6(8L z_GMgP@31dGq+IgQ89J|P5eyS|tAh*75GzK``a7nM zT|+6)xs}>@ym;YBDf^9)6@NDmM_YP5vdo0q)I$s6OGAvGAGO*b(A+5ac~wem7AvFz z$-LHy-pf0I<&HYgX;Kv#vyg9npJER>5i3|Y=u0xpY3lk`YFuaTv4Fi;0~wtM^Z}Y8 z$ekIDj7b(3b`UU#RT8ENHUfQ8-#g6HNY>+Q()Dyd&5Z`o)8LTlxFZAkQk&G`6^Sh!gWp@wMr*ycb#NoJm5AD4DTKY*5MyU^q9DJt>5M%?=e1_-|7d)S`L_{%#M-LZrjxGXM5Z%8Iden5VhTed2 zHNY8-sBgeL0>zH~PQM-oi+Nh{lm} zvAK8!{S?Ike+h;GMmB^&S~SpwBtyoEJ$Sg4C3N|3>bnJqBhbi3&$ML?-+L&IVC$2* zMLat8j_#oZ4j-#VAKt7g^yvI`0eWU@v2J{i6GZ<_r}6)Br0^}Cva!^2RWx$>M+-6X z`~LeTw0S8C%Pd4om6h_x^$H9zlgw3by_62N9aS^O z!^{UA3Z)OhQ{&{Ck@E#HvsBerNGwt+9(ENP4I3{il;$EJgTgdYdD`ZY1^*2)Y>&LU|Z`F-C^MkDszsK01=q~6TI}CsJ5ThAz_qcfWZ3Bma zqoZ9s#`h?r#c;iFms})oTBJ>4xi0Qi*fpUg$=osHI`Tz2v~E=S;$A^E9qZS;DQr5v zP-(7laRf_$150m#j5obkD;Y`i)}SKgPGJ}J%KpNko_VmTYVb=HT$6NIos z)zKR84d8PT^7NF2*tgK_0{W*z^Yj9tdXn#Q<&CQ&G5Do`r=cNj33k4|BBWel5KnQ!*+A9IMiK>OVnd|P$0m8{#?1Ho?xGX zHDn5$YQRhXNN_K@7qu(hjL;kRw^tDRUT$sZg`&+a$$qHL#f!}JC&LFZx0svtoIS5g zi2F+_YC`hzJ4m@;GCIwwL((y0K1sSZiCgl_mDQiE4;FJkGecG+QZ$>iG7HImiIiZL$(pJOu!`8+*1lb#TWCb9d7*w|a zw@s5PkX*7~JqlgT3uLwv@_fUFRs#y4!n-dXdjrce-d{mNm-DQ0?E7lv`M0a}KeOcj zfpq;#VfihVy}K zN1O4yU#|x$KPsPl;YOp~-%YO#8u2XNRgZ?Ci@rK7|za>K(c{=h3JQBhe- zh)q7P1G3)Zb#>~(J!$*$c!Dx!PETBeQ~eF*Y6#l8xTaSvh{p?lrY#DS101p@9--E+D`zoQ zXpNXli#aEd$*st%-|BQc+`~GaG_|V&XpF@j5?RxYsbSM=ra9YgU4Ew?KaHL;r#DDf z)%5=8O-wVIr-dr7P;y8%FTBp0hlS`DExYhYbPFW`%~>M zo(aL}pP0n9gl08f!AG5iH)Vox*f)1f|CAJ|U8~2RSWIJvQOM|SJ9kdL09J@es);hw z=^Bb#8h5!qJix17x(f9>uSp@1)y7%}xPflGCtbtrG!NgIBv)vSF6Rsuk#YlepZIfY zj`Hkn{Oe%NVsFoR^efJ*Tl*%8I#aR{tl*US*#S>u^KR2s)eE(3hB6=KeWo6ZA<&uCbgyrh<968={P+&_~2ven%wd!zlqk>~uT$4&M%^fB(|M#MHG&-?kgHpKr;r=BnQWi^+Q-W6mZ2`JO_;*==Ogg1_S$^)yD-7`G&6&y^JlSf? zw87x|7KT09RJ+A|=spp|>HPJef_L9btZS<7eD|RJC@fR*98T%ID6Xy)3SI9GA5*Sq zHoz|IO?kVPq<$*mgKJ~l>d!+LG#3f3D^l}O-Wb_im+HgmLs{6Xt%1<#Lu{Uu!C|0S zY@XNH^Gq8&X(yu2wG-|fL67?9SJWy=gK&919WHsMaGBfZOVlc90cDrx3mQo+4Fbt8 z?vFXmYdJa>q}ILdNNi1rSRxWhg+%ZPiaNGkis;UuF3k}20~5{En{l{pL5RDBJXauL z@s#4Q!%pMe-FpoL4!un9-U*yQj08KpOugyEwqFLUXu z0hLZ)E1!>pSpGo%5K@B^67ai?3uuCQ#Rt0+pB(oy(P1p701yg=ljQ0bvHoDKs2pGD}I~J1V}T~2kpAk zjwhNQb_VXNt&NMP926V74FRmmp`sScl|8zqVz}|I4T{vV+-i(6>!AZrl6}{{TnjU9 zREc3UWx|FaWjH3L%#Z<8`I$)3pN(m-WcnwjjIFq0@CNCM2Oiop&Kw~u2972&qbb;$ zD{(~(T8#E#7>oP*vHePn`ED}_56~bkX$$1z-OBX0;=R;Ms0I6)>m_pX2V8P)kNZFz zC8KV%rr{gbE_rE1`-WDzF;o{+Z5SNmPllDsitlN4N=fYK1*|+xmP9 zPHOuR;&qzLiJq`a%t|VksEHk#F;f2Q(i@aUJ}?kM@lp?bVi@z)rnRd2gt+-JP?zW= z+zOK;LJA6gc5>O!w8VSyJH3RL0}co=iFHwO%q* zL~xZ|j{d-N%oi_LZ6g9lYCG67Czo&(Zi`(q7{+$XMLYWC9HpJhHF1w4~1-QI`RB&pdnRA?9jM~*C@7GbrtWu zviim4PC>oVV{{HRY&j#6?pUHm1!RR_@jK~w&uX?ZS@J#D3axda?DzemDD{i+z$60) zbtX;e=8f`%^((ZP>DyQFl05H2(EXGaDr__@ZmH)wT67yu^lyOyElso=TpolQRA7XS z7Rp^x9u$TU5QIJGwi};bLVs|7BLsnvu;YFK(Clz@zKC8(e|CQs1h(rEs5?=5QOM^X z(ID&nMLuw~z1vU#3aTc$YB~@p#&c$@nZoKlBFm`s{T>7!G`gr1pmjbRTnM5L;l0Vw zPUz>5Ez!`PIQ>Jko;dCOK@Y*^)+6d-y)^pcKK;WsvnsKW#(1L2+&l1Yru)}GD>x}R zu2-oq#J~=6V&(fUSzI6cXF0VJcDVTt5x21jB9xHmS zz{;%L@=(EfgOExDCTPo>dkr&mu8+?6QmatxuMcm&C0B(Sn0=&I|jDvB-Lr4CvLIX#Z{H^>~A{KHR~|@>yF^ zMK0khw_57Gtmxc8oT!>cx3kZc{*om#cpav3a8?!Q;pddc%ZQY%RDXy1D*+v&IE8We z9u%kj*Ea3{@Iwl@I2c(Q8X1100hH|ZO#Ttl3YE1~zFV~$0{mcovN<3K8ZoGldWfPq zi(ay_)Uo<6akAtM%E99#(6CJOOu4cTmEL(>&m-Y*^G3dZ>YC_0ZD_uHqIq7Z2JFcM z{9+39QXB0KH#y(V>!(C6|6F~&-y-s{by4+G0CedN*H{#5aguG%OHE8?cmb#k!+7Sq z;`1zW^K=g&PS*T^7SWhaF=C@?v*yt^uQz5MUc@mjk?idM9!84CIU>a7l>z=qnM@iT zM3tS0@&V4!t{FF4T3VF!r|%-R2cD0g$dD#anwU2el8F@n>BL~Q6k$MYfSRVI3D+Dm z+nb$jGncES_#^m7oxzH=qDV$qDtwU9j+U0fLR?TK!q8B4NlktRtimv?JED?oIZPlI zWWF^gA^#*cFrrFN28mjQ(|7Ew(@ zN7RE#(l>44>_od2A?gT@gr`CsRC&J!+zBT`+3E7+1mi=VgqY{9Blf?M_y9YxyPW*j zi-6buZb%iZ%M5WiC(Lj-OCWHWLpTylah>nZn>Igqf3636z)IDfAwi?Y#9>IGttuhk z!#i`Hj9$f>3Db$7D!@--z&fo@`E#>EcF?_qMElR35B8skUqGW)2hKHvL^m^;1n&i& z+FE8oDsimw11#AE(U~I-LqVi{+Z&7A0_=qtVKew7C$WOqFF(AMUP_9gr1>B9f7Tv$ z#UFYa=Gn8FLNAeI92Oz(liDeS zr6a1(46A$~QrbxP1^j|Y46(hVU=vvPAl(7HOdtwFupatz!aHjE!zu&}et?|~>6@@B z43Pt*01)u32F?T!@KP4O*JhKPPS@g!&IdfVz77R{g3YD_I_(bzpgE+1Vmf@ZE~(5n zM7{CWESb1<>u))z4>71m85)MjAva!5p-H=Mgqi6p`$5wg`YdM<) zW8;sw3xJF0Nx@Ba2b^P>)Z)OFo+QnduEo{11IPB<=>y}{wGZ*`%C*?6Jzx&)Lc!uT zQEfYDZEyo4_(l5Og~x4*!gHJRp`Gatp0*rxLq!|?{5p%plwU^c@F^A=6N|dF{>AAq zeTV9d&8|Yj{i2(2Q?sVZ9wN-k4kx!qAnxkJ4DfeQiu7inN!52Sy!$uR%zw7*{)e^d zZ^6+1|14Hf0aL{uM)4A8-(mOV%dy6oXTJmv;mi%%MTh^UCLn@}vBoJRbsngmEDN=} z3$n*rjoMx z;IQ1Q`Tmh$9Bl2L9Y$EXeH)HoWmqfhRgUxh>E4||Y&Z0MurqzYCn&C-9DG&hn#f;z z*Sc67W9gWAFzHxnm}xgAP^+Y%C`=w|nX%L}D;_h{T~g3tL?c9Nm}wmyEB$Ql&!})) zr#ox3w29z?k9t!|&wxzEfV z2UzoiB%;Q4IOhwjk0*_w!<dN^j7!uTD|L#ks=tBg{V(ENQT#@xqD(Q= zvhubYp@S^_Gnoj`it>{_W(3g~AI9Zn=1mj2Hw91PRs$$cXK91FdfEDC=Iv(7QH94r z{;MFKZ5$;WNmcTopi1V>N76XM4_yiQ>B7k;r(rYQoGi;CW=W-Ca%YO=MGO^c(v42@ zGtgL#4aasUTI`u+?CRr93I#g*H;$=dS_>@WsuX)qRHF$^OY3vaq6#<_(P2;`W{CEK zjRpA)&dx&->>%kW<>2K7#0(y}DXdk4w$X2vB)K!oa>F5dsp79R6S&isUoweE`Eo4cvCb4pm4in3c(Uid zPE1h_xz^Cfo^5mH5g`-15k^0ixC-TeX~~sZLsN<2q;u3EmG|{juU*7r(am0Tq83)p z3PEVZM;T*;<-=LDC;qypBk8s#HgjYvR2^|Ce=$YdCWJnjpUVW_OwML@zSdm`@Ty(ahC03g3=jTV*QWT9H!#BzxrXy zT-g*3lR`(IURxZG=&SBDSP+~g9y^cdi|#U5^?k1#Uc~eEPrQylVAaMox%QVPMS;Jp zXkP|#^Xe#|ce_X_K{I3%eN6(@T@lkop(F;N}lh<2phE0jYrK`B4GmBRvgvHqy-Vqtiy`hjk#^+>r*L4M_*fk7}Q05I$cf z02hc3f6z?~pXA+n0wKC*?UDGa7k0}pV51VA#e#?61Exqh9P)dn9e!1Ir+K zWNkwM>kvO9_9jDg@n0+XRU>$0Zew||L&&`Cz&^9~!hw5lZ7IzAc1jb=+-6_;-TTd4RTvClh4Ck7U)t;@{)N;m zZk$te!^SLba+A(#K*N%#yXtD^EN<*0rP-61duKy?Avfs-fLV2-a=cS=1DgaVvDNp7 z_!>ne$puZ{;Y=kW>hGc&m*<%z!2bAW1YK%B9f_PD-ao|ocVNt#8oVN`JboPGg>KRa zQRRq+{Ndk8M6!{gE8|xPc#_a#ndI*i$L=CV?)otmq^#{@!vBD#+FCxD&q=t@oW}}x z!5|+zSJ8A0T>%kzH%HArX->|b?bi>|R|{*O5r{jBlIip_#o93Ws}FiC4TQxUR_zCm1LGh{3L&1A1bVY49`a!} z)ZUQuPHBmAKP^t6`MbG|eI-sH2vVy0zFw(gu@2MZV)oU2Q`3;u zh5m|)94v1_&qYff`7Pjm1~4q0AIs(LvTd!7ZYe}ddGqcpgYpNy27ZgoHDhn<_KP1H zls0vX&b7}ri62uh(7;Z$A07NVo?kMgROq%*-xqH$8YC~cHtqWtY6t)G-S^Y{{)OBj z{|p6EjriFO)unpv4bdfN+OjPX_(kVOhvb#LJr?-I>sJl`-tAY7{Layvy6uh1B{Pr& znMLQ~yA8sB$JPrKxJBm@d;KMLt_4-m z{~-(bzq6%(3IqQt8jZeX0lgtfF1@rRaSggK$8V!XsiAkpU@Z|U?r%Q2`{Y`q! z6Qtk|8fVR)K5qWb>-T_DwEzdp{%oDsLsU~Y$2!++Axv)wU5L<>*v3bhu7|0vCdNo! zpJ&0rKYrdM{)p~o(H~`ykOn8`EIv_h3yu=!qU9sTkS?1m%R-gST~(($If$~B4{_tn zCl*5xn=wu(06|??X(&ri%Z(q7mmO6Uxs?}}uwWp;aO(7rv65=-K96f$V^^u1E~h1AP0&z&8|@tOCOm8vMFT$u1_ zdFTkVbLAj+BXegL2Qz;tOmVY0<|>T35HkbW@TVgAKN)b2Jo9hY0dO!p*pIoR!9+aF zZ#MJ6sCZE`_-}WT=M_GupOs8R29e#3-e?j zZxLXZBQ|)V4O?O41jzrAh;E+A`dDH~Mdp6ra&O3F-Wm^67lcT35$}t4QTN011Ev!v z=7Nn50HVgURriB4Ax_BE;0Gbk!#*OOuVEj_Lp>r%$O|^06I~8AAy(WW#CszaZK3`( zbca}W0~qdw3WWHG|7SHPV6R2qmlnDn9RZ<-1;Gm4=!P&{MXiK7j&OBlW-`htqCQ3U zrY;12jo(E}5X^$?8ZsO>oC1L?H{_dgK&@@SFv^caVH6>hG3bcOrn+7s2yZ~Gokv$C zA*?Bcl*)OmQ;+ysn5Bl<7@4K?4P}7-)syT{)(FoRxLy*Wbq8U#&ZQe=V z1eXua@aB>4+TDY88~44ygFqLU4;8jAW(0?+R+8Axo>tpecz>?tdsJ-v) zHHtLqWIr-Mx?iap4E@8;m3r6}l;UF>J;tdQf8XFcQwVG>gbmrXqO_|da3~A!miu6v z$=vE(vZuNXp!yUI2lxhU*t|)MkbPwHs@;U})$kC1bK;2LtT#hHkDu@!0k^uScr6Aw zS7@4cIdXtWvv<3Y{0{z{AJV6qTj>{F)p>IloJZ%6pr@T`9j!HwZ;;YaU`f|mV>G)Q z!S3@Xi$<{HyUIOYW;ET5vFLXdEf!RRO&G*pKimAsX|N{(s&>q>bTbU+00bfW{@P@M^(7 zp;vpKvHoh&Rc_oZ!hMe(lwkff&i?0&_c!{#0jSBqMt?DHC9R(Tr)j>v&llccxw&|!4brbpBMP&A$^;;a)bCCnK@;w*1$++5VI#_Z*5c?nX12P}S+)Zaeime6 z@^J9bXc^;W>JoBVWpSC(=OI|O1X^AKH(0h!D0#!Ta#wErHu|5yvx_XZks?Da?_F?_A!ol7RUPn!?CWRb( zeTQDVOL%R@L)Y%foP*2E9{C;o&F@x>gc6KA`%*r}@RqOHlZIp%4RpasR*z{4fydF~ z^TTiOM>6pnR|jenlFzgdKCN>;7n&#V^=m^RHI509Px z?`Pm6Xp|5^mBz6zfkMWtG3gcJpdtE{EyapR&74RomM2ok16|M?SHX09uO5}>GqV6? zw+SeowXV>iBQj9F2&6m^2hXEE9p|AF$;2VH4}mj5z&RDtloHbVK5adI+Y%AB>*g|diqYHe=kSe+G4OA>eUfigo( z7ZuZ}o!b~SPMeTi&a^_}Dp_?SRKI~F1VPCUiG$n_>^t#=)ZX^p^$k-V)VLNb{ccK; zwx3v2^R6AfO+9Tsd0)9-c@B^B-1c!l0jbiGdr{x#4@E0{uunwKeUv=xC3;yt?1=+p zjm)-0sw}ri`Jji=ZESOy4q&ZxWevZ_Uff)q?X9Dv0V}ewC=@6DtkeVOYHZ8ZI1?2> z?R8OUp-CM#U9nUx<~4{;TZ|uA@5)L!osKb%QLHp(JQeN3#zd%L&&52_*vXAZ)y=o2 z%Ev0T$xemPF#q$IeXPP{g(}nwYTN$@GA0gZ1Lrh{RM$&>$`oR3Jc7M0kK}=t#h^7$ zru}De(Wt(c&JeaHufCZT7Ym1k*tvG5rK7_=Slxm{A0)2I{4 zgGGwAm1%zx&0G|-^93qAD^uyAmhq%$1o3=D;$qrDMQulGWxK&kke9*{NxHwhDCuiA z`3*6O*wq|Ii2V^hSw*Upt&@?qiZI?hjVGLtv$Byg+lBPRrsI(k=}eP^*(g6DN{7{Y z1IcDn8T>K_iWtd_%1FFvp}q2my~{$K(S!;j`*0yY+0Xar>@nX;9nYf!szwRU7$ zB*#@y@tSXSGJEhW+zu?7QYf7XreMo6*If*Z+6U8nPM^ac8|(qM#)^XIk7gQz(W5!C zD5%INBI#QjmcQ zU4%mw?vj2&OY3a_f;@nevtv~&*^p`% zZ)TCnVxS~R#(^uv`PR|oVh-RB}nGtW4^xE*`wC;Ig<8@zsh=&d+gm`h{! zz8I5~oa|PtW6sE~O4gLeEW`#_34iq6pne$0ehVQjX#X-O`#j1Yhu2nYw|J zPvXPoiI_%XJqrHqAtFiTFMeQfHnjJr9v#_rp_)_+$#y`-_1+2f3h-mi~Z zL_f{xo4xdW`)p)|+dZ;phU>^*b!e~~KwS}#Y>(786HFk2*Ed4`J_E+UDD7#194)_P z{+*W}g`ZlRti5f&-zjMPy3jYrnRk+1leqZNh*h#7elbZAalbgo75_XJu#J(O^r8G(oE|-yx`vSL6kXX3!^={*yc?M12zSpb%Ba7clL|MQ3U&DA39SvZ%HJYt zF81P|EpVsmPS7VESf-9{WJKzF7WZ#FQO!=W?fA=fB{pDA$gS+Nc1M>Bw!0A+xeMgb zYx(SPWwaHYk@$UkIzOXKEdhts2TesS?5D=$qZ}e& zkzm#x)wU}|?(q|txaqWVH1pTlTj#YOwA17j4`SVep11^K`EB~}YIWNWgXr_^e#+Xp zZ1rY+XzQIXD+Fut-k9;0Z>+LN>(#I+E3o)(HPki3R~}Rg+X@SKPD?a#s(rFZIo6n* zFVFa4xuv&RFUqoOyRj-n-5N)kWfluThdl(#Zowl1`QAs7GSv9EW6Ktr|OHzLDvsvD;dU-AZkueiURIS={iEA)6z^x|ruI{(D{6QRW|2YzzPFX|xocJ96d zLdF!$?rXy8zG&-HsXrb+3>o=1?zmg+N5>??REkFAvj-EbxNpo z>k5G@(*Pa%hiHBMpF$Gc^EV~JyUdbzgz zOn?wYU+G&?4L)DYB1VcqYRi0VbpzrFazH?hpENbsx+S9IO3Li{-n{MB+()CR!;>J# zQ{oVv%^KL*NeJaJO?n+|tLzenGHLetH)5+-ZCb(5w_SG`^0VZr|ePc6N@}uOBT?h)?x?Tz_l-vcGI)8^!bfdI#*`>Ix%5 z72*1>AoP*$^<(B8CYNY}kiv_M+{U2&n_CBQ^4pBh?VNo{zpF^ zJIgGWF8jRi%P#tcWkE`#$Xvq>lx&YqPA&a5uge2nXE$19h34uWlLsvQ3|#3cUR0v= zdYp;lO`Rr*j}k#=O0GjTl`rGsdR9CmWAqCc6xY>HEjo9G%nlY0n-Zib6I`8cFK&k} z*+uO(!toro2lj-f&ei{k)sDz3NRyR^8;ptl-{fJ0~m*D&ExBR zg9N?tjVb5nLB5^&A+IW`iyh9N6!3i~Q29F75bg^DBI!FJsu7Iw^Pt#q`cimg^t7u= zZ6oqX#4M2UAA8d~&C%NH%Qv9viiXvlnE7lbBnsoo75vI0)75-~DZPSU@)A1bd&3bB z5k+YPWrdUD(gpMBwu4{lb3B?B`HeY8%WBi@8!WX?T-8kAh6AS#o)6lIMrd&S6w9{3&p!L2}k2VD;O-$91wjFa%A+!3-qcgjI^5yZC}Kf1#u#$hxXOLZw-1EUZW)M7F?QZb5N z33;8MDGgaGCZ%83H!k33iQ62a0j%&Ce%kZ-$WVmYH zmQ65AOz}Cpq1Yn^@b6e6K+>8n|L^J#?f;J<|6flxzoVI@;Xi$~iSbj?Ykcs*-dJSp zwi}4IVC2Mw4T0=VJwEe5g!qjp{Gw*=eEfMC8HOkr98t)eN;~83Hs_6^F`|NzZiiBC z+bHVB2F+k@wscJOd%wFj8V}ZV*oc0dsT##J+D;BbTqNJG!K|^Y}}K z!zrgT5%>Qw5S@2#nllu=`Qa|0TQ~S|ZTmX#YMB~!&@>+XfV6r2)!^23krF(A>>#!a zdT&>}#(0*QwZ?9xnssF}cf0O*H+I%2Wgp$%VZqT0AU?wj70jdyQ@hSKDU&tC>o>JU21gVrEhxDGU_@_5i^)dOy2iyB!i`j&fF)l6XLom?57qN)3gA3#GFa`PQXK7jg>4um-=cMICu3&<|TX z>^iLLp4g)YJLTHQqV(pM8r!>X`Fgq z2WbkA_*QJC*cym`QwjrQp4xH#JJ5>%9lF(>eaLz&10MDt^2qF)WH6VmgDOX+A+yF?m zW_kLIR89Z*5;Pu0Xl?cFf^3=Y<5=6Ik19Q4izI=?SV%f>);cTp6lP>9RvW1R93j~(mk0QcF zWUs^HhOC984pu?t6LH?fY|b^)`w9!(PV4Rnu zrBMg54kzQI_OVoHr3Z?h{4C5e3#^F6P!Lqb2us5Xl)A-<2fNh=jKV{IsN)8I8)bIM z@uId~#oH6E3SuMMiVh$k;1B{5{uIJSnIYLt3E3l*246-iU)Ul5(5m%5hp+X+t(aIM zKHb!{^c=xX401Cz>+$2RotSG*y;OgZu!a-HJ8GX3w+5q}!R?mQxIRTSX_R3%h+$e} zSfvh5#$6DMDg!pjcZ`2K4LkGDXcBO?DUVwMH3>=8fTuFJQa(qi7j71ClmQKfT{3?} z)yi5fJC5Ainf|{Rd&lU?+icytqKa+Xwv&o0wz;B;ZB=aBwr#K2wv$Ryso2h&r+4qY zNB4P8Kj+K(yvF#CiF?j#{;pFsp2~+0tE$~f2`rF=4|#fA5(Gg2v#MnFM3?vx!@IQW zLkgN$>eEH|0)kh;d0zP&yQlX)i_4BV_8AxLJ`<23Gog+!ilrU<)hvG2|AxhbXAymSNTT z;U*~zRrCFLa2&1yu7<@7r9YIllOZog{v}r`bca2d6YG#H^B}-y!@wp-%Qi~YaW>K= z1d-?nP~w82D9|-YK?K=V{qnbnv4~jb1N>=@;4$*Cd2UHoHiF0b)^HAS&g8pUXG-S3&l~%<{d0e7d)-o5%I*!V_7}N`MwZ#o*Q=86^hMSu?EI4HHp4xbzqP_%`RoX zad*g6lvVjWjCx&CZ3gK=Yv1I9bJI45ykL1rI5koNyT%WJT1N6qaIU>we^LTD?!7pR zUDZ>SvCsh^`9@xDS4^!g@@WR|z23S_^{~fQ)S^_J23HRXN+61WE7l~N)3T0u#`ucj zkbw?&qd%h5qm_FU$L~3`6VwVHQTIS`faVi?zysAu4VF$bzWU{RdXDdA>)vzIOvW2d z5@Bo=-bE2F&oKV^6#)+iq0lSBGYexxt1fX%bsS>H0fr%#9CqW%H+aK|A`7#6Te1F! zxJ%n%;mn>;a)j=1BO3%Mb^iNw7q_F8aV~tsq|3U5Im9>= z)j}7Fh3!uN!HYazrG4AK@};@n74!V3{x9QSED!#@fu{V=`SQE%|5nv1wNK!mD%yK+ zA)HJ=Vnz}MyNVwZHN1jl&4PoZG#UsW+hFtt& zp8=UQoZsX3#mUKH3k1!QUfrC9uan=Is+8cRz}v3Y4% z3Ij}{I;_E{R|_=eFxwH~?CZq%o8*&g(3_Dlg-)atC@9ey}$kJrO1}eWFrxO!v_-VFZ=`rX- zM>P*tFlWttIxOf@N@rP{a3+*CW3)+V|KzJEkApS*5uhPxuPO&r6DJ zrP#|1*<<6g=p|moN2ZuOnm8#z%c!)mVdnJHXL8xU(AYo7Wj$8;ZH09eNgp`F0m`Q%X3x7&9-65FPbXeZkyB1%bMM5B!0#s&f3s*8mxdnN2HYKhQ!~UM zKu+zKCoGfglJ*+q@oKHGuYGRrV^ zPBINL>Bb0k0-1nJ<4h&Fn6NM^ox^rnfH>lEqLF4I8!E2RDuD^s&S@lNJD3X=CsnS!6LaWt^fZc>~*VC)-$Fp*(kt zaK&ZbC&W0eOs%;BLvL^b(iQU8ZynfP>B)0)$2fYroD1+Usv;NW>|ok=HbRIt`&-ip z7mdKlcl@LElxza_WA8}DmfHF-my)+pjAYK)+JLQ~!*n>c4;6m2U&~&_v^K?ryG1{D zI{IbG)(B@tt9cbLS(q}4tTzBJ981jrd#-5(NZjt>NrPdIC3A}eZ?Y@O=%1^q!!$9o z^Rm;qYe%Ehrw(hHL1%I=74%qQ7MvD^lOF`!9`)(ub6$&!8++B!GOUw35xV{CDLW;A zcP8^mc`0}$)20F`y71NHhju1;a zLtO4XN2rvzrg)bSTxKOxH*U_2$SW40xXmMa=Ptre>BVUp4!5Z-iPpLRqBAE${{(&^ zOFPInSOUZcmPa>S$*K4j&$g5nT=$LyI?HV#Gvd^~0H>w8u;DK5p2qocvFUQ)$6u)v z+Hr*C@H2G=|Hmcu-?W;NCQhb8PEHQW?lw*Uw}0{m)yCCPT|ZMO8632cVxm^!T4^W% zR9veGN*o@^dhN@S=$cs-emrp`JZq{9)k=u>ip#9nCphUAZ?o>Vf3~t;vT_72=9~Q5 zJILnZ7B4F_A}Wri*VCqF&&w-+u;BaK9kDNg*QRgq*GHTgs$TTtNKG!&T~&~~A8fj; z(=f+a3M}u~UWKCv$vIk#p$TX^AnVZPReQML<)iT0P7`N8LJ)4*YtNZ z=a0}lS6j8@eVEuGk}KL-+=75nGZy0BKcRKRAOfD=ku{?kD+2}R499@{B6^BB zOR?u0nj-or_K!9efP6+09eRvpuOj+Qv;<01G?qcd>rdQy3B?}!z4QjZ-_+xCQvI;h zN%FU&rm<%Y^!Ir!pHq(CXJ@syRYi^3jMRfLcF{Q1SgtssivtIVe%~e+jMx>k+#7(i zy)Nh}h@XJz7UJZo9&}a>cGDv7)2c?0ra}}XpRdbOWeMv|jaTjW`rgU4N7+r4lMfC0 z!ccn9!^lZ9L9i(I{q%VmLV*&(v?t`9p%Ex9#1sHZy&phalyu}zudP~0U?pzcOrWBk zu3;-3fHNLW9c!o)tA8DiI=Dh0v$qwobQ#~XxJ4@o&L-tfpqIXFy|}D1{uFF-wAlt>`4|+wT5ml zk{#f8xwtn8e!oNLL#2kuMRb5J*%eQ3p7;cIySwq1@WCD%oBI}eB;PkUMU!z#yQugT zj0qZ@K)U_HKvdn>16*Yr)i|DdRCq!k_9xi>tPdvIaVN_pKF!xBAb7!!h)$C;g}7OW ziGG6UJWTB&CHYC$9hY*M_9D>EwTfc%7X02yyMf{5hUgh!U0JvUYk4exxsd&etz!&1 zEgsSxj^OEX-TOKisONF%FJJs8{^QnQh#o-lv9WkgFMOO#69;7z2XlbcKatZ(mdc;V>ERF9K=Sdm71*Wb?;_d;4SDdTO_)?tFiTXz)>Itm zS}Dex44YPFEC0v}jOs%`MIu6am5K zrdGp?p~y(TlJ-?@>%Tl1yfZcI1kh$^du(O7dNWm|$WD^zn;IaqXFL|sTT4i5rdt=X zBp2bPv+Hxvh;6!H>L1=&FVn4pPI2T_YI9hV>M~b>c1R_TiCZ+N)ZGXkvJW@iCLXTL zmpz?c-{xmAqBqJ)>lbK94MYbwV6QL2-(w>Fc$H8b*!|A&-H@uW_L0cC{T){rjHL9p zStt9=_47j20{`aHczRPMI&|hSoYPu@4>2OmA$WqoISdGM%fNJ}K1W2c<@wB%ulBV* zDG9}%E;6N9CW^h*05-A+$rh@;+Q19R6m)Cn?Goq&R4a-wz8pRv4C!>mGmO80EIHZ* z$r_P**!3xZxzafLMrb&0wXL_Zv~60+eBLZ@su(82WhS0A(gnPJ*%Cj`C&TlrkyHm& zdRw;HIDX

AG)}&D}Wx;+=b;e;#x$id+#voZTB=&M3$6&vN{kO}61hHQkxwSI4X% z{4LVoa)kSh_73}Y3-6rsGC$b$fA2lFyzFb(xL}V9bu>Z;x2aAt-3sqq+J_KyKp%b= z+4|kzs7mQ<{qu1=`BeSmCrflkl05-5Hf8RZ8>A#Q<_u{8Vi$`*FWGeU7?OR|4{Gdy z)cDyLb3LCChpb;;$7K&~#<6)m6NA64mIcKTniLxN3OZY`JqW4rTWE;HM)&8 z4KBmW-)ngNwf?rUEuD+0)Zp3(3ATb334Y-)p3G5aH8OF zB9OhTu!Ziz@7b&kbs9V)($iR?w-VBXxGdqp{>_7ajj#Xtu zranBV1HYYvQa*CygPx&k#?JR9B73h^*A#>4>6TCN(%DuQ;ynF~Ij~?nuugjp*jK+W z^bj=lk3cUc>-nisW#n&zJxy*&wOFe=Y-Up*OlV=3uGZkU=q}1vfof4t&WUNa@SOm2 z|3{f*v|YTgrLW=!Om704g9Yh{CEqH1w29Zko?Dka-EIQLFmBX7zzYv=S_v+5ql{-S zaiCu*-nLBm$UaM)!!tlg&t|4Rnt96q%(K7euNLftDHrGHbJ9ojFB#M6|;%p^S(d_^0)Ejl;J0&H%7OFBfkG(x8qY1i$!H`$y? z7n_9@Ni6PLC=0Xi$<~PqM^uC*8}lvJVBaq#bgg|Uq1f319bH{NT!w3#ED}(W+XyMvlCfqGUTDs}3*Sm``?6SX`T$*x(1y%Zr zHnONXIxUx+x5ZkSv9}X$+8(EQPtL^wu}?5-xjyASUM} z)!=gn(Quzwtrs>QW+)&`-IWx9XILSa#K=b;sE3+jON&$q&VSH(_a^b5KWV zFPa3$d;dVDbul{Cw`$$Pm9NY0l5SJe5Pp+S`O)4o)Mn~gq6gLTQlgjm+YAR`MB`I4 zABar?7X=rSCo7KcGO7{ef{kd<9BCTto=R#20m{N*z$yPQq7mA~axM`P>ESe%8slxX zGW}_#Eg8&!Ep4wMPM>Xh&HCw^T?)q!*9GSdhvPY5Lf7laIs=onO9i}vgAVrj8qjxZ zgsSAj=SLPWc^OVf@3tBTo)vvZ6CQy2DF5$d8va3gR_0C!)JV~ z11otAwV%P-x}CQe#?~`-i`caec70tLP0Vr&+huzL2~GFLNshIKeH+JA92_iEL{H(Q zB&{xdK0IJ?C2%3n`Z9_$k?Vlx=c{jqLFSDOUx6b&>s`0mMj@ zY9|iHAe4pU&Xd1E>qk4W_dGRZM>+4p3H10z?6$*oV+}8#MPci-COQt{MiVg-iEe8> z=ifTdl+6C1jY`~cRT*H*R>I-memdYpd*Uf2R1|V3CTWgRe$eI z=!1kL1&HgVcqoMhg0x3yzn4HN3QEGZ!luGC{zaJYZ>3g7DR)01{IQEcm5naR{P?B&v z(Yx=`r(S2tAlBkK3P}189|So)fHllrLX>AET_OHek>0vv-e^C~wjGfE)BfpidfHE@ zgo3k!ovowE|9E31y{O}gp$%VLj>Q%iDdb`_HEWRvrXy`7N=SlPQ)?(;YF!15o8lx> zWH`G@3Tbc0Jo_v{KFjBtU9C9sJx2&WO1O8rx>6|RsqP%yY{5Xuc+qxTW4i!^7(1?^T}6Z#d$V6izh;Jrhw`$3_6RYo zrIF3L#=Sh33C1&-k*}VqEPebSx{3%~7gHft+zBwIOp3{B)w)fc$cfh8uOOuXjFE@+D1?riXO%W6Ud< zTp}$sCoVKm>Yb`O>7zS_a|f~j_c9aPI=%$OiSTQg-Ch&vU~K`3<9jDbF6FYD54AM7 zsSPq!AOXVTEsQ{m(8|;_?%u>CjT>jTUEg85vR9Ey+=-&%7Kw0MMKPLZ>}a6!j|& z?yH3^(PuiHbMwrxmxL6{+nY7E`6JcAN>5XFez`~LOg2`><1?HeDDsORyKW*Vh2!WbX5qsk$5 znt9rh@%<=XJU7Kn8qL_cC>Xr zX5D?x&f3E_!AKj_=*lNnl_z#jqn6!%ofitPHt20|lkMlqLEfjzOs20%Zs2xY_q=A7 zy+%EL%>*xCCpG~bm@nAf{f^74?K;LdhX?L=sZM&%rxLBj!B_5az$k~*`Ahm%Y!$oE z{j5vc71`2z`F0^$4i!KOu3Z+!8;G8bLCcP%jvJUB^u%2-jER71v0NHw;%d!A#@GVw zO*ISr*oMNPFUtk(eCY(_7#sCX8_VQaXSqxhi!HTs!9>VdVB(V~cJ&1B*aFQ>GYh~( zK+QCUg^(Im@sQu-p5`W<c7zCI_YS?bv~csRsT_GLH(Z_ z>3?P6B&lpGqpG95CyR1wsu9C9C6`~h)|-JTm6bN36ta_p#!E#sH>I4iR|j`Y91cn9 z;k`$7KP{yQ%*esYq}ksVA-)x?Wp{K0LZA+g9<0BdJx#S8WqRJf-(2W3g1`lk$1Wg^ z8^a1rS%&_oN4!2!gwi1P)Ca!*iMBg{hsXInLA}+fZiMc`&c8r}tF3p~zZ9$EWGv|s zU1~Nn?l>5)jEv)9O|e=?#XBC;)-n)O_=N-UII@%@slSXXUNtFuw0&5zPfW%BGVX{$ zmV*qFeHfh`J`5)1sraCgPk21pJlUPyX1c*5%ik%Xh{z&7jDi zp$?B&BxV8iKJr(&jEVyUv3rmw+RqnV1)c756>Agboa;lk!F|5c@{D8f2V(^n#JVh1 z%Isk40*^r2!$*frm(;>a_Cnp7cx|UY`5SZ%>6O=b6=Ay@Zss0trdQC62`^>$@!AQF zPiM_J=8P6P1UTbO>4m$edd3Us^R~0HP36Dis->Kk9Fy^W^C@SgoLg_LNYM~)8ekX1 z&7(O{hththI#!KUvs3Pa>4S0dD%~%QM&+5~kvrik+HVYo9dvCfH&E`#l0bNZsnfLxbgHa7E%$JYNR+XGnU5d!ZDhGBE|#z_&B>s3<5Xu-Qq@B5x=$ zmF>_%w4lr2wnp-PeUhV2&5LmAZ~8sX#kBj(sbsgmLx#;bJA%s(Y?v3&LuKWWz zJepXJg~+7JXlrd?q`#Nv{3EQR=V^|?SuXDu%uveWajq{}oOJwM!I5MEulc=qliiE+ z(rX9e_L0%)>J=y4981`qkYCk5>|1ATl5S6q8}49>HnUlz@F0-sLkX*Z>yhOh^tUV= zV`YKUcWq!--^zEG5B}|5yf}8RhISyIeBxLEpN9AU)K7lK{$E}v?+nyd9lG>_;h{){*1nUb z(xu@_%CJqMGUoGh-`-KurgSVpWl=s$Auh+equW1eD_ZsviBs2ct zoA#iYVdRAUWuX|qt0MXQ+b*S|`XxINJ%8SOsO&LWIW}r@@7YN6@`o2lQxoYPlXY@o z3*hD5=fj7m+cv4bx_9RDvZL?LxSfu(5GYVWs4ZV@!)?dtej@>C2O`N=7NmX77l zjGsxW$Vy^l%!(sWZpkrz5S}V&PxWb7!)$i?ShKiG@GN9ItZ0A~fN@${k7%X@A8NYH z9Qj>j1Rx(*tO&+`#9lZsOJ~b|eF;-xD%=V5Pk@o5#!|D>>f`;(!$7@PC*wj(E4p*r*xlIeC)X8E9Xt9p#HO}%4orZv$I zh~A~_UPWD)y6U&mshk(;X6x9N*TbDGSFg1Sj=@{D_A^4cLRUQVL~+8843yK;POuYq ze3QMs1*4{^OEl!lbN70{_D<{8($+umD?|!grimM@Fwhgun=60UT9gfM*aSYHHD4&G zdY5X?iX96DjsmC(57s)w)OQI248e)sEdUv~ga*Q+D;8qel(qI&JX}!&*?_X2@KH<} z2E+K>=x}7ODW(cTG*+6S%Oa^f8&>15_5{jsIkUJ{OY~ACLsTqwf!!+dwMzaa!X95Q znZdjBvizW`d|`+5L-|E|t|$%JjSxjTLVrc!(=FF&p|TT&ep?Lk;i!5!ei|ty%~%asGkQYRGbF>oqkWZ4+7Yz>^5CdlV=)cJ zlN9&|u*M97l6RCwbVl%7Hnw6EHo+@9gr{sZPlRQGTO0@TqjyEvn8%{~6&q;EhP*k{ zg@52EC^oQE@pD2eRhG0Q_y*deex_ikrgfd|fzTq`GJP7r$5w-!B(1k0#-=~~$|tc3 zY#U$@zlj@R5Wn_P8kWM>w>I)CXq@oQbFVfz3=qXf#0|Ur$6!77cu&IfufYC~S9544jIi2;(UO*3U8?fogBB=!hHLCR&*RG|f!IpJ&`{Vtc z(ie*0E3tIx;&Taq+relD3g{aBRwho9)p!?io_oKHi^*U>W-V$yt)+F?E<=C%D4E|x z6FVTmfoFH+56M15Sl}OHGH@}iN|^OYDYNg;u4_~66m8OG`J0*hTF}fX+EEdah^a9( zu}7`6d2z03iRRkc#g^P0n#q%=l?lkREG9Gco8+unq}|!*j+<~Lvb^ZoawTG8GBH1t zxQE0zQ4Fg_?C!~9&%zUPq1I`e#W;;t%fd2~g%fuvI>5L3lDp%-d z>iY62T6o0ESjBDK5U|dyIyL%bElTMb=kTt0dpYrjNDS;MmNnzXaW2MvXY4GNtyp`Z zp$rx?8OEvCpNFIwLZTcj|HnZ0n%+GnS`+KzW=inUZQ5=KuDP-f#_vS9 zE1Vp2wSGpM$>^iMPP}9KVh(ArAB>Ki0LIEqhUR@9dhv#5){Q1saB z*_%gGj$7RBlv;Q-pI9c&OT0CX^arGHc)kENUsk*oA;vV%mf7c^P#|Aww&?cAny-{x_hqOK__Z==y_l=S5 zoET+(w8A$^w@f8gJo3rshq*})&zm}#)NqOYrXaz+BVOS?SI|AAFl*B?@7pG6BX0KA zZ?Wd)N9Cx-o4p)|&Fy~poFBd#To30;)9~FfYsP40YHbcGCpxp}A0U5CPy$$>d-Ok_ zA_@P3=lpj?+TY+g$mdE)?u?dLwh-4=p3Ft=zjJjZB8{pUWyU-qV)(B|o%!vKdVR?i>V zX}qqc7jp0KM=jeR6T9}5WPUCm#shuUATfgd{eOCT`s?@00XX;0evY&jhGYf&6BedA zxT9DxjYY^HeLfZ>LZa+Rb21*svRLiObt00RQn>f$-QRjDW>IkK_~~tI@r&4$PSWwK zO%allrsF##37J`&r93-mmvQRNd#=as(69`mx+;pMg+=>8jXY2MaAeAh2_nf7(yJ*% z%=tTN((cy)I?}7bCNPjNz#&Yj39EZ-}f^!(zU*&fJ1$9^i3K=Z`Z8QBdP-Hm1piZ77| zEuU9nHEVixp|PiHH+gOew~X*w#2$k!n#BoWv5WNC4d27WD3n7xM6KrZfMq8~r^aVolK=Rp z-nhOm;F*Z;2lW<=!%ah5SjUb+2FZ0XtE}SY%P+3Sx2T3vvjG_qizqc6i(>_!C_Gaz z!{6mxPjU-Unu|N*&SCIce7Y4W@ae58qpq~I8&3STjmJ6#{jl`GR4GaZ1&X6BD!Poa z@xMG}#jVKG%1wi`?W||IQw8Uw-n2G*vrhBW9IM_bl=EFbeqLFIBopt;Vw1L#7$Mn? z9uKXv=t*QmA~dpo+GDV6^@0l0k6i*Jha!l!8FWlG*@KaA`&m5dhAtUCo2Uy`Q7i!i zjf;Lh8)hq}4b#Vw5J|7S0DswF>);N!oF^m$-7gPbsr?whBLSHPo3HwhNCWu6R6ww= ziy@j`6G%6+AJs1cI^r7=o?c_$fZGigca2HwR+U*?opK>+|%um@g>Qf$QBc7BYd1Jt{p5>q~F$&2pH>DP*C%O=@F&H6*q0xK?v3R9KrYO}j`zzOJAU1{L#1k6qM zc_Lv$c*8LiR!NQO{arDjVL~ly1Ht_Pbw9iKh~D;(1h3I8obyxNy{Pmeo3gx#C3~@D zlbH7Qh5-e+F2Fe?9wS$yIh$r)msXxu3s_c{xWsg%95MLn6>OofIL6*A_oUhE8)jgW zY*ECzHxR(RB}QFiAQfjby)h;OnNa$Lr^00cG`>Aca}zTI<^XRY{d97@-Q`ZaeEs-a zTL4>nOd3-5a)rqrce80K!feP%$n?Xo73T`c+3PvI3@7#7AS zuZWdoDx8bbP;{U)^oE21iYvvj#7M-EpePw`^Flv8e(FshvOyJxct3AiaHr{$-P2{v;n%Mh22sL~Mi?WkLj2pTd1D~p^_^2MPs9Lb=ox=H2$-*(r~ zEx+$tkqu|Orf@Sw>Z$APBPRe4)}sXQ9H5A5fVeDa~Q0C#Sj7) zk{Kx32?U7sqY1<^MLm#_UFL~;Xd<{jvuZV$N1~yje0e^Wc(8Y6c10J$(;=;#Sr+4o znZZ%ke$c?ni0GI1{Uf}56^1jL-&k#LcyOpuA2t^=LNT1~RvR*X-5~4r3>Lh& zIzn*HStl;Fo_g@Peu9jKUFTXHax>R31Kd4aJO`frbm_7K>-_G+mDCU2sHgN1c+LO3 zD42U%I*n{8LS5$hSO{S)v2yh$TIk(_ES3HOUoN;WhpK;`cNzyil6og8(&#V;eTTVm zmI~>S4vT+7-g%xOjaD7Al*F-Dgb~hNeT|11Z!METVl9*SC}+}kqG z(%Psz(Q4O`5$?Zex}+83Lx15)Nd9Gv`tQBV|5F-Z0JvlZ5Zv3;mV+?3%aI18 zXGm*3lJBx)P)f?wlZ9f^N)15MA+<2-GY*%BrdIq$>Mv&;^dd2YA*ku*e>~fh8Cq;i zR13@|?6B6<5mg5jCJRwG;ONV6`kYuizu8zy*wdT*NgmC6fC*nS-;@ciZ;vw&8m@Fw zT5YN~edVe)wGvTYh{RU#pS|l%$8JG6sm?o7(8Q>lo3tu(LAd^iy@rL~gpi zR$FeaNxd4In4MV2+`FCKXqbbvD8scbv+Qz~`4#0{*Jp3mM6WhuswFsM{T54SvrfYv z7c#QX5yQ);<=%K@b~M{pkN^|DuoVJ<093t<&_-GMg&Xn8`<=!0rCNLS=J+b8=4NVV zbaFV_GSvsU3ffqb(o$GjK5<{6Dja4~sobP>r~$1&Rar+a*)T?hd|aGat147FnmnhJ zEsMrTli^5uS+lf3q`^6uszbf8`fzD2Kmi{@)yEuD)Txg)A6JCLV}__dNF3Sq%C{<5 z?9z=YADfiK29UVwB_mTCAc<^4B_qQw(r-jj3~>uk`zDypbd?y!O_2-^$F%+h1Ke%p zgdiKXH3pmFFiiu4DOAiapRYha44pQwPZ}5Tjh<~L<%F)fRAr8@suaO)C4ZAwi!(NQ z%)Rse2+7`C70bF7`xeFB`4-Ok0}6v*eum~n zS8V+mTR5jrKn2N|Qd7PT@0-D>vEY*~Ge`(FQGT4$A9B(d{jZkA$@~uA2myHJFY zKZTy5T3%7-%t4f7iczjt_?-J;u^c}BSgefv@cW1^J6U;p9oUV%HY^ZscsSMV?Pa{pdr|3+~AUqx0H zU}yKK`T3u5<+Sp=0@6EyEH2e-zD5xZ%sYv!wy+`+RXCJt8i=v+Kw0+Oy=DNpA4hKH zUC!k}Tme^sipfx41SI0S_ctNW<1&V{r8Bu80F{ z7aC=bc-q7{q*M11L}+&tRh{5yf!Lt(k$aK4JEMI1d&$biX4-5^aQwC!+}>N%scO;0 z$2L_wrh4*P71EssT*cPRjTdLz%;EBQq**12bIRRv?ppNk8)bziQ0qaN+0E)z6COiU zJnq%FVzkvU)6+u{&=M-7Rjn+7Uq;u z{m3uoVM$qAM{45J<;)EsTZ}2?pe0U?x)nX>EF`d!niPOvB;#0kdbwL@c&My+6{)~XAmHA}B{g#I0rua#&g z9+c4o?J>7G7gbSEj)=ivCI(>uT<4yYOpS8(XqZ~(ZlCQLLgz|(;2Ujpfx53;PCPWP z^hMUsct%XOAv-sW%>n4y;pkbBH7IYhJW63+$!j*^_DMVJ zh~j=Iz(~bS*C20K_2XWP`z!TO_2SYq8dkg5YQ9K^S--wkpAkH*yARvdIcy=<8ye`H z;Rla7_WgsYfH+`l4D(sUWt4QUUhl1A$odkO|9mNUZd ztUn&9pd7CF8wo-E_xwf9VNE;0Wqt9 z$U?!R!xU^mn4ZAhHo8CMDAc1n=YdhuM60JlG3$c%&M%gDS~-oN-rsiwEqEa0Y*Q%v zXflU`84;m1ApaB@J5T}mrIPqmRBqzS!ONmAMustX1rWi18Gh@U8LY-Dzs8L(B@SVM zYBovgrMVqZsV8_E>Jl|(K-aFH+rt@QdpMfWM+)+;Y0{JeGk`k52|?;q-KD2e}-5C8W=eYPF{yh2IR{wpaCf9x8Xg_3aA z_!cQpQ!6Ma+Ry~4g{htAFG5m~<)KoN70KdXW;`CKf0NJ}o^o@)>O=h1S^_UtR8^F< z%D;N^V(ZFD`FmPFr{@b6aGZk8p%f8r45FiNcOnviJ;jf3<`{k``=baYDahL%FQy~0pSf{cWR~)_;#`HAtN}dht0bc za5ZhLl~7{&6%KBlD{vuO;WPI6dDjzLkH^NP6C)CGe%k9CAxj6NWZ9eh8B4v|mDx(M$}uJL`m7z~0V_r`0p{n@F4013(%SiILd9GfLJXRV-@2L>bo zB@jkIY!oN(uSOpPR4}ez<-}L#XVGKjug^iqR==23RMmWuR-x5G9T~$dgQgb%tIpLz zH~Fg51)P(lidF3`DA1uYY~84>ka6$QIz(k(=IdM)9H%Ny6ZqvsA(xiV_7x#c`8zFt z>pTg=ZhL4177{TD(H_f*C|j=HfGS*l5}Ch*LLelNWXd3LP#E}El1|7wL;ATzQnX58x^eZ41{dhBB>NdPL}QcN)Aojy}3+CJ>w$QezmK z*K3&i_<0d{TTx7hE4_aGD;A}Wwby7qlP2!JtX%%RH~Aa0GzAB97l4z=f9og|K93q~ zjsF>qD!QNE(P;c4+Q|$R==3zD-xPB~uNQ#vi5F%do}eC8hY}Cr+c$7VspnIo4LQiJC-a zMt$Y!l33u`>K1@7W<$;N0v<*eo3izCCAOwYl=%qmboEbzqO?vq*9n>^B7+0gv0%jo z~ZLlgoAdQ8uL~{WKbb z@zyO|8pg7cG31<{agv>MWwB?te{EU$CNj0HRX};;G9*En^sBSED*cvv(_2x2)hX?e zJs@hv2xkMe;*d>wy%=-~wv{MXq*n|i1>6n738s~92S&*5YC)exc;^lhqe|0MmA_zx zK(oCf`Q3G(^6-I^J5OL4>StN~PktYZ>ya|2vj;==z|_%(4d+too_A+@Q&dCigXEAV z(+NRHLQTPpRp^foNAqF@S23oa!AnEa3?zL)KG0QoWJu6*jo-N-L%Ngmw>>y;`+#cz7?Zjd zl2Vd+LA2-)_m;E0rG0XWi2h#g0jb?aoAL^xTx7B8ZOE-et1p(TrDw=#1F&rL|1|wZ z#Aq91?(Bnkjz@ru84JZXNN-ubkt0}rg7HY`V>z@ke+B(3Ojwursezy6O6x!N7Jm~a zO3FeC&W2XzMxTMA?Bw8Vpb3D}K;iqcQ3R3Cu z@ral*Spx%ugP-H?-}y8n@pVNqV}id?e-ck9@a|x1>ACGlFrOyawuqU;*(4$1PG<=di7Zi6jwuWMi|Zuu|aho3j2$M3oY@E z!_ekD{<_TRfx4s6XkC=&srgpT*I+^wk)c?dbg}|bk|IR<;|%R9Wq!{JXH-gTDleMIcWGf zcog!_=VaJ>n_j(!y=S^yHM~(jnMHd$S{J(VWCm?zzTv`3YfZPoa;b82BmjJj%-Fhz zZ;r}cxHCy~p|&lX)CK}W=SikQxo8cQ1|X1?Nw(0K>G$$OTfj5NgLN7IyrWuAHs_nt z&Hqw4Y#0uf+iIwB)3*NY&=Q~Esr38)nsX;V{`aB8gKx90S%tGYd(myQ-D25&^S*lM zJ+;(5yNxuJ<6Bc{RRp?CYC-3lE8e6@8Y?8ydJ5@6=Te0um{#%KZ|M)4O_g>??qj?x zY%4^bLGR7_RP5jUcw}x)dLXVJBJ^+i$S5AKAJVwFjQe=iqpbtGEWySDOmrgs&e%tJ zqi$fZET&uowNyrE7h|zk*^$f$`*?7VGiflds1`QwI1PWq=qmi>-)3={#dkQZ`Yvm%jZcBxnl?Qsn@yr8eZ z723bg4@6ws1s90yA6KEgC|w%BTfCFySPfJv6kmZ)Jb7%kK5w3&h#xctlV1}i`1uO< zSDuKk(N!JzET^&mv7G)5_gBdT;Am?jZUy-7cYaX(h3(uotl=E6AtZnZM~UN!@0-7@ ziSkj5S!7Y->)-{2_(_pSk^ru16=warJo?ZRWfV6WiVBi{eV+B*i>wq@(0JGs(Y zY1_7K+qP}3v~AnAZF{9{+kCnAu5;e0x^b&cym%3F{F{G9jMiIky?>H8g_p8)*y7%j z>2i6}T+8n6`uf8M$W<6OgXS0*|E14NjPqWi7-bds@EXsQ@t1m<-?4Pyz8V9a%?ow&58$RRtXIdD zuMSiCQ#NNK(H|}D?)$f}o+F^=0dFQ;$=(CXyPK$Qx2iH3B!0SFSC4G5m65HgntowR0BV2fctccrP zF+ZMpN~NPizj|xAvRA#+VTO(&g4KZ*79#Fwp<~H1;2|LF8>LjsB+osZuA+6&Sq&)X>M3P4sx zirvep-X~wj(WY-*=>h2h;6x15Y)4+%cbhUJ* ze>_6?`0$r1-$thiK*#-&UQDd37wyAI0}cTrav!onnRB0l9=E%CASZ=0Q{cLvW_-ip z>5cDH(!W^Sq0wD{q2e^E*e@@b%pO^SjJYJ`6j5SMDyZmWC^+vXP_$sG$t$P&9p1LC zI9l~bthA++4?(Adg7lNl0;ps+Sx$hoWr_i_KD>iwPtpPYFHX}T{BPxAvJzQ-VYoD8 z27jFK<9U+=v%#xe@(kiJ`+994PM>6Ju)T6yfu=KprqJ(&lZ* z3i+j<%16QxCQep#DA87SmM0}_`gi??M=H4632X&ol!=ZA5*Hi2)TP-lLDXjb1cxmJ zr@0A^j8$TimzPkYK}bx}9dWWYYuq{qPL-fm^<21?DvT2y#UF?I9$B-^Nr5 z1Jv-p@j3C$1xN4^;kDr#@tq;B8xEAih0z-^OYL^8ZyTtxpNG=80Wi3jtj0}N@|H3* z#Iz5=Imr)gGKn5hMw{K$v7KVvg$%3ueyWODa1qI?c+?fP?6bko_XpV*9t!Sn8_DS4 zn%rJyoEK$vIq5x|ABv2Y^^*@w)JuwFoXN(h1*Ug^I#+4J2#&JBWl3L&&&PXNnmZJj z9F}+&?o1aJ0K!z?obJ-_wqa{lI!Ls5S(s|7R8@wsR27=2O@4mqwzfuEknYr7-3X&R zZnr>kH?&=|hH2iHhv;HyQd{}Wb8EQa_rfn}z=??`T#M)2VA1-7H__5dAjEV=XL}*rkljwGztFO*cMp-FDTF{YI zjFZrOLf9|Np_~5x2UWc7$kQx670bO>v;vb#{-C*cJ!hlVt<*2*Y#F z8(bWV@3aJjwE=@wS4VV_j;(}`hUj*q7$S*X&eBCnFGctG7*_|S$JNfO%pJ4G9J9oz zK6YguB`L$Rx34X^)UvN9P0vyfAjhy@TQR);1%IDvxvDxnQku?aAFuRcg7$IRwKBl=hAKM z^lkj>nz<0T;&@||nxwq90%@|vMg4QwT!y#_P2FTDr{3vSd+Gpo|B7P@hN;odm)mJq zHidHt$I6_pEV+3J(emcmvECN7%rftE{og$Og(h)_+TW_(`PI>^63?bBTidiJaLht_$jc1I-Fhbv^5gs&_Y;-js=#2rnYlnpE@?qnDA zgI4+Z&2tFqtsj*M86=x(=)p@0@H;$z4k|@}CBT{ANhS6F)&z#*-wP+cjRyawE7^aO zmTc_Z{xpO!(|2+-`Y(JU!AfRc_D?(7Vt%qH5rAPhIHNNk`h;OTc3om&UIK9NuCu0e zHTu(+W|sqH){XKXa}(@s zsr&nRr%w9GB!LT0+SAsm%+V?nT^`Gb?|*v(GEHIhM(^`FdcROv0mJhtTX z0hAn-L=_pSoRX(%B>hZW7Qzk7i^hc3#FYtIBiD5fB~6PMk$MG9hT*?P?4GoOs*x)P zx3bKHs~0gRB&kdjwe(Y3g_{x`g4G!;T|WCyCm-07QcfbR&e5W3r-?`rRtcX88zhcn zX2^0S_*n#wUI(cn=pBCuXmjMJn@xJSnLh#3xD4hV(~Q%2=a?_NkR-_c*7Ah_U9!0z z)I8abEKoY9LoaN~uTzoB?GRS|454=TETd`-P1Ubz*UStmWVVK5IL1t?5|P*kC3mp%~A>15SORI*xjQzVahQq)bW_aA@OyX|L?T(uShr3|Eli4kMUxLM%IphAq9V5cNHf5b=?)Tb@D@^Spz~{ojgp4 zuL-hFaWHxz1?b zD%E7uVQRwI`~CeLgcl$hywBb{9vA<}B?&C=b_&7eM^;+W2^Rs_&GAf?!BsL0m-(Nr z%D`y;?pnXJ95mH87R;T*;Y=tflFrPMraJTvI}0Kc$s0KxmI`3_A_5m3qunKmZ<3fN z94y$@=oZ4Xn(u?ETD2p~(kze`jt*1;8^^GJbNQY85m27QHQWH@R~p`mQW!a|8ypTP zvtaG-RsR`P8?^98mF88$i~}awQ=jczy_>{YRI82qApjCCxF{GZLJT4;rEY+(^@Gf? zQ;{m6>^|=2xop_`r^&wO9~)HRqe(zU9^+v0RBCNnzsZ@Z)Du*m8i1rK&60AnN`No9 zba;A&Wu>Z_`g4?Y9Nup83cE>5uL2n|S-x~MW8R&4Ub3ZX= zrjNN0M#pZ*uYNm|EE5*Lf!dC5CF}Kh>S(_Bw2QdTAdz&a;E2Dy2o-`TrG5mwJYf;{ zMfaK1amTajMb*p9}|C!kvA$-Vw7@_p?J ze@o)KT8ICCsMi0!dis;0@sDc#=9R7)qIUIZ;0i87T24)>+4?hss23fBI*5z>w%+KW zv%@k#Uk#?DB-BdBf0lXQ*XeO+LcUJ=^~IcgB@wa*-Ds8fUY4eb{s)nta{OAwp!#N(YKPI9g;8@9#(UQFVFl7VIF?> zI1td+X?$d+QGy0JPzv%l++~FkE781H6JD-O_gIhhs;E_a9%XKF5?cHDsiCqT|LXf` z+eo|7))>FhZ~8lz!KMI(x8H0VzsX9RycA?or12TDH^;*BEZCa@^lX;qtO#OjDfNyQ zEk{c%!PYi@uy_AZca$iyDj+XXf+GU=-xM2UsuWx$Ru_9hyS)oq)7G$THIt|j1E(uC zBvj4}%iNkeGg?9b@3fR5Hb%LUDZ1!Tm{Fms6+~k*d^2ZdHb9}E4#amXQzgVaN)E1r z3Z?|Lf&iH;#3_(mn%3x(B{iL%8JJC}EZvVB=vtKLn_!ABPch|Ft#D;yOi!&{!c2?H z(tR(4is*~;uv5syf@0ytlwwv0y<7!(QD&yO5=^MZg-zo1&mE z!c3853gzSRbu)!!C5IaDeUv_c{R>T0vWrNlxyf!FXVYoL>$kIZel= zuLZ_Y?o%B z%9oTJ>yP`Okpxl>e?tjytIP(gA(J6Dt4-93KH-K|t9n-I0^dP=ujD~5WJt;`1-QLV zRAeO6k-BGPzKo}#7`+?la1ly-h#|XVp`<||!A?QuPKJ@m+a)DWP@-^&nK48ly(lx3)hij zH3wpSq59yb!0^I{#f5Xp1}710iz8t$RTz<>8XU=TNyArv40Hr7&9}G-?o&jL@DT2O z-ni;!Kp^MqBh}eS=R&|gafPxI+uxvTKP$ff)p|Tm1?*A3uLS!3EuEeE-*1$P{0ag_ z_KuQf4vvI$fA<`Y2b(2sP*6~TZ*&mUw_>19@FQcO!_n)jpkiSkK^V00JTK<3`t5`Lsvt~`^Qfpju=BdU643T-ig5;umq4> zVAk(R;0IU*rOjaC_v`e3KmVU6ga7%$0`ihV){gdWf4_HPf`-gbxo=oH7#TT9s9-Zu zqSnVqj)FYQhcvnDw|l<1pUwEA>Jp{Kx>m@ml;`}w016ImEI;ARZC)tO7;C*&0la#y z*wJ~$UHVGu7n{kikI#3I9$ajuJU-mG^J(BmIb9q`#t5~jgJ{U}bjDjd8E&0~D6+k* z2l1!@vlUg<7-?-><2L8jn~mfXlrBfk@?%#(Dv%SE*U5bo%xM-=)5hMk}A`K`fOj>QFM8Zwj&DVA>Lu8CsNJPb(@30ACuibG9Cy)`83eY+iw z$G?j-w=DsKnR7F))TQ<8XY20fkdCR_0v9yxX6ba&f{xbcja;X6&GB7KX!oA$dL%p8 z6|8;AN}~4pXMx?DgSDYDTNBDGORGVjbm@of4XL6x(^k=z8JOasnMHESl>?Y$goI7w zLGn8K0V};@HCm3;?~-h&W+n4=C@D&ElzO#6tRVCu9?6!gw|)HlAz;Ao4Zo^~OL{`d zmwCeAT6tEoKU`qVUU}`$C~-C)4UH*qF4+Q!+*;iO&4wutBiYg=&ZQRd`w99g7xq6P zP-8gYgWHd*(;UiqLsu!UsN{;9=F5X*Q7B$+)o?aavHRO2Dp-;7+rc)-1>Kux*R&AF z7#hwvDQkoJkAKgEa6^m87UyEaLl4{fWyhf--dmUkO1FGYY(+y6>l2Sl`9^()*M8)Gxq1M8yx z>^Mbh@F9hChj=7G?3 zq}{yQI)lS>>yh;3H>cSzBCW^4Q3to=gFDGec@?K*6>oQ4MKtx#sJ&Cb^$&k^IX}`pcCF=lOpj7#a z8peNaav8a|!^WW8;Is_+<#fbANd$os%t8&7^e87kE`NhvpzMOn)_wfTVU{Lf+k36C za3A4~aH+Qj${5v`#48CA!I#9S`9v{S!H;&yv`a6aZupSGZ;*c@+Bh%$xGMN0B09oOd%3%m!E z%pJ3kl5^ABTv#EJYZ-ru?fW(QLkyP`_7mV!E@&lx_8Dl7m}5hl=WZi)<>lt?l*7mA zIiPIog|-0)yip}oe8PfXh@3y4X0mBcxI`5p?Tx>C)E=$qR+Ky+eAAZ|nU7qN$F(uFHE zopcro^q|Mth6EyUR0dpcGz7~n18a=yEz?t6U$5YkU?*)w#?fQacTabLZ-cMjS0W|+ zQ)7p?H+l?f^0;9u^z#y{y;)phJuaYgWadkyO+o%i1&2i|V!JEcPO`nkPjf-mjxGod z<%yOhh-^ZmUUnE5dx0)g1e&qdbW))2`05Sy#K?n_^Rh{v{;H7QVl;lft^Gq){{sAa zBDar28swTY9U9iksm1u^ieZzAUXN??G8~fgQd_^Y-Q9N)?OcHQ0m8{apD=eUh+BY+Yrz)@B(pMs!sr;$sKlDuJx}f@pQti9Azt8Qd*m6>6$p^)gf19h9-ff|8e@L6NtbZvPr>1C zB#(%ZfmfQ_JQtkW$PxrOYu?3%ibMx4gy_%k0V0zG##Bm%F;nGG2vg>%f1BP|%s!XC z5W0}|rkG=`_U53=`Z>k^5m=~z z;AtL>v=&Dun+`vF&+8=#`MTnn`^}~oZf@6xbafJdzHTZY*)PP$1aE2YquW@zQpgjQ zb)t~#9Mf7_ls}mD((9f>Qsf|&*%4K@j4xBD^HUW1)sBqcZB$zO1VknkSsNyRCJJp< z?;+CDwvgjY1Sk7pXJh8azOWg?d@U?xgRbrigFXv0x-T)S}vEPuhAh53!hlVSAMv;1Vhqx^fbGBjg@( zIVm@gWWnHGCY@a-C`pXiAuU_!!KpehYFd>ZeXRZ1GI=qEYLbxi4ekWLP2n4(| zJT-iD*fOuw!h3hVB89FMx?+bNxN;UCb0rbDN-BDC1KFsd7khkZ6QQ9RJ0VH{EhHAw zBm)ies`kFCZL$sp5zLjp>l;2{eW9HV1GRuWRd~665V9l5J@g6YIg>wRTn-Y9jj$-p z;?4+a8y!K36JI*$L6jrB4AP&CX&d! zvszqv*u-K1Pv7Mv^k^Eb)YI?cvF!<2a|K6y5*Ll#+(pPD=6d<1i8=b6HrAM`$Iz>` zRRT2kb?$IoV`r(ob4!H>xeLn;$+L>g`bO!BYM-XyX;XyiVEU^XNu3Adc{l7`y`M*A z?u*{8bB30^2K3Ckc4!hal>Lz;hWq(KL-v?4Ctr~G;ju*dabhraMwUZ-+FWD;g5?qV z4WlXH&S-(G17R>|ZmwY}!Ks)=8GYr{Xb7H??~;nd!>Pb2jtsM?E^#V+#JPZs{3Zy- zbN%~>@nG?!KLz-iUWqIR?<8MSGK_EA0<1#BO7w)FwPS05XlU68a+98%^O8ryCAIZ$ ziQ}6I&wI-e9(Rqvom@5exi({Gd|ZgwFPMn0#Fm3$2^qhmi{Ea7fN8i3XyQv@>oS6B zvb&VRu-~`iI@!I3Sb!5v6S{vX7k$<6qhYB?d>w_}izEVm$%aZwKhU%N9@!tak{)Da zQ;IdkgCLD1!QBQG3y%@%=Jj=W0j`qX9)|xp1~(bR8Y@MiTX+Y9{v-CPBXS7-NNXZp z(4g1>P-W<*KSXy0TvKOUI%Rr;k8_DFs#??Fnf;31@K9)1DM2c)%>hA!WBBFA--L?&(HS560We!GYJ0nCO<~+(M)B*kC)~-k` zHe=~-oWVd0XLr^uWp$Nw3bed@}un&!czyk2S7}Tye>qQak1Yhd#CuECgo=p;`wO{KumECJ`8%mexo^mp(t%kX%?`FPhq+_oHMe>erE^^GfH*BKC@7#m=uB)uU*l z_l{c30J5YIjssiVe?~2zdhe%gV5bQ}J8hawW{kI|?A6JCvEAJ<^O)R847}7@EelCt z)(iqjbl9Q{R*9WoOc?87Zp}RsK03Ay-AHjpY)#}H^#~9|$$Z7;;f6_ zm^4su&yFlN8X_{xVq<470HW1KhA8a;R>0@$m>7gC6R5_?kKF*E8SV^l=*N6_c)f|8_=hlE!|c8~}R%$@P7+lwj>tXxzqkuhBWB*uq!`b-x^u@i29vIk&njLrHB63LqJr;+QuHwPFbz8v3K6p6Yc%=m1CS7u z#Z`&)8Uv8QEeI(w z^{5YE@Qh4S=Bhnf8-EUwcySPEkGYUJ}<4ilEAjG+O2}%&no9Ko=aWT9P$pt5i#K)FvkeBxqVL zNy??^DUa%PQZ`7kDYvH}n(5D0Fg@8l+}hxem=>xaqFA~IUn%aO&D$=;`zOr$eZ@P0 z&>eIN?G8T$Ir-ZNEq;t78RO{|^Y} zTpd0pP{alXPDs99dC){YK_mgeUj2?7-rjIaY+1NL3MdiOAk-*&OaoM7*Tfyxe(<1p zsA`c}e-_luZ=X}W06qg$BT>2nG{+zXD72t?dM~!@*jf;SZzCSHppJ;jk+J2VW;A;! zWPd7y9}x6yx+BY>c4+O_RS_GkB>5OeMi8$s{UB%_*VtYp=hKBw4KriPuaYXqdFQ@g zq={3g4kF@N4D#%mu?R;Izb{*6wTc(m36OfwSlS5=GHbHv5e6;bt_jp4OY(lovH15lM*Ozwh- z72U|eql}hOt8F3L`B$XHJvhNHt)>^klPoqBw2|#ne#s7CImI7O+QbW7MD#n=ooanu zg|+BrA%m%8WP@c1Wt9b;fq?Zv=)P3E83E(dq*&BoDqt>vG2`RhC#gF?N| zG;_KGz`V|=aJt9Rc>T_|h`rCXad*T7$9c669s2d>C7f*l6h6W?*uez*@7gWv|LV~A zk9PYnOxr*E?%&L$q>6GMB&0%ea&+cFABZs0Bn^uNP;&9X#j&^wJ0?rU_FQwD&Fapr zi@`?$la!Nt|4cJl1rzqyLY&up^XYaJz>`b!BKr8FbC0YeucwTsxa%jLU+>^KSUh%M z0UG+mQTAX#Pjm8(3cnTegMq3|M*&u3S;5BC1ZEwX@=qp2$%bZRebRDVNjE3|{>mGXfH-~7k7ZPT}S?ON$W{=5dDm5Yo8_UeT>snp5 z%@-rMJG$z8g%pMpAx+9gms8ebF1EI3T$oyfV;jRIldL!~yOp)&b)F~^m!p#qhug6U zdSR}o8`eh;_jbj46G_zmthiEDwg)fAQF&u4b-YE!0cqD+TA#fU-Ktn5@&eFe>mTCJ zW?{tZWToTN;*xPFK`9Pe%8XUZYcI+Zrol==ClIJ)$WS6t63EQMRan%$R_!$)iWbJ6 zzEd4EV2WnqOmnR`sErzS$DZV5zFr<7m>BE)3Kf`{)a#5MJF&xASwA$YGlpI1z&2=O zw)qZir%QI`L22eT;Fj{{USO2`c{4v@gHfc7ZM|~!nAl%p%euH5Kfy;8D>nAi%-zIc zSw;=2bykIC4ZrBt>{PUy6@$|tX<_c|pz!zldGUSO5%MpR=&-80r#g$()9P0lrRKoO zydoniq(-FnG42W`vG(x?ic~6igjYdJVpG2E5KyQPQv%f}KKOJn zd{;3+M4IrD0c`k6V5N{ySD1_tBVZahU^zZGxLRNjp^#+}V@*M@U@&2DZ30$FT4CFO zZ6`k#uqXsf0#w-CAN0Mze15oMIdGUHqVO5Gvf$DP8Tg`*%Yafn${Bbg2>W0~z>eDu zKGKF@j(*KxQxMBh4uEa6WH}f|Am;;XfX+KuzJm;4n@BYnSKzMjSM^^+uMA=!QkLyN zNXLUP&Kk0ye7`6&56M?3Byw8o64EHfb6S;G&xk#;50*96;3padI>kETWP>`3#d1;$0Wv(l!?#`PmKt*N3^eHiWbfPAp*tb97yMXe zM{bLTT?s-ogNkAh1Hd`5^Hobsaw3U7n<%TRu(@qPH`^bcRL!(2Wzx0&iW#OVWjf~E zGKBeE53`h_WbyVZeK>LiiaS5jkah*F0(NsyF1{L8U9R0(ky&wS`%GtoqVBeLLd3@l zebOEvQ(nL*$EW(Xg)=fpZEuWG&=}E{C3;Q8FS;1#>peZQ*!{8gcC813_Xb(Kdv6zt zJFWLe?~RVtiu`%Aky8;+IrC_SC5>Yt4eLFA$0@&#izz@q^}SMXRc{ES*Lbd*%4?Cp zQX6RZ;fxdOHvg9GF$k)CE)B=MzRGKufXZGDq}N*R+D#aw*J$3&UlL16tQuOj@Af?L zPwn|%)k6Ovbx%>x-o(i9AE=0;+P7Hm+i+1)o*w{SlaC4)6;RdA#I83?Rfv}l^O~%I z4pgA8pc#T^P-okphBd#EfPtEZ^En@LT1=sI4!;6j~F8x4Hewo-7+PIBCK$cv)cyv<&p%c@Fj%>e}F(#JSSWugI* zwQVmgzUxB0*`X<(&dayuNF&sU=BS8ePFR`UxNoFQAoQm7BzGTj`VjQVC*k%yMg|4Bk#cB16V8_nY6KYSNA5@z0GXR3 z#~1Hs4Dti1ft0l%M~N@puOD!A;qwp+$@KSYk+U-ctK7cTTffG6!g_GyhBkK|mby6$ zH|NiL_3WgwIkH=LQ+lO`*!$4RyPmM`>s=&TuhDqb%IB}y$wrJp1jpe!q>xCBbeOz^L8SMntFzOG zyigFJY8=D(z4{?u$*P)Bx!5YFxjX3LdPsKbva_LdNLr{ycA0}x$YRJYiWxh+u)>P> zyU5{oNG5c-@_uW8u?5Mw7|SX5el|s#v>6#a{=D0zw;;(RlOxRfCb+rUm z4FX=`Ah=1MxfR^HrVRT7UV0sjOACcW(>4l~T9|qjq0r7}51+UH;U@u5^?bHn4aAkU ziSrWB8lB=9-W%urM8!UCu_!Aw6+f(~dgm1*C_5XjH~X{Tj-*&@i~mah?VHR~@_(r;U#?^=h*?R%%k%BRG-KDlGnU|T6lg#p632~`0`VqDI8{MY)! zUy($Zw?SBY1OGKZDHngK_gE|=-n?2jym zX==}}mm3Bj$|SV+(tB|YoW=(_0o_?z=-?)Pq|1twru=lHDO?4|>W1F&s7bio?Obh= z#wYt7lQyrVvOCYjr4}-J0gTt8DkjYQvV%$C$fZB&dGyRLNqc%w2Fjgzi4{R=-g1jp z#bZnx%=N32yXK1z#;8}3h%a}bHY_QesBQ7Tu7gwAQ&!T_)n?Z3DpF)B-6t&?L^h~1 zq*qKZXhzlT*+Xj#LZ>d5BGYzI(>3{J`9=Nk^LU41p2~+&IpAn&YzGKqoE&;*fUO>huG;dNm=J(ksC2UIg&*|b>TFh_KD22M>BjdrM9wN+kyoBtZo&IOzTz-6wK6~dKtE>=q9>^KjK~uT z!dfTo`g|amzwa=`%vxfj<5DNMaBmN(G*WL_R7x5;$_0nTBD7T1g`}ErsZrS9*N0ah z9DNfKu;%+)Zi@J%2B!B72=VnDjr)_kV35|HUy?(E8?>qIyqplb)41v_SbPC@_pGIs2!smTbZjSIQ!G3+#7{)u z%oa?0Y(8-wx$(HSeeKPo{NYAP2mJfIELeuqbBxw@twGWy6;FNdvh1KGNa+BI-VK&K zz2lU<>u%W;A?~M#HS5y_G0mczzXpEXI%5-5=RulNr)eX4hgnOJRczj1^9FUK-h}ny zeb`1_8BKZ6-eRjYtFm^thW7YdDC*Fg!q~e|xJRPVr%aoQrz53_hqtrX6UIq;MX*3+ zAm$y?iP)vyQx(;i+cM*ygdjU`cyKxJumA>xDe(|G$%Lq@{GJ%udLkQpr~a~&PbgB( zcaHZbUNf36>&eEB1g8@FQ7VxFfOUq9Wf0^MA;QsXzI83q=aTS88}){;+- zfP9E6wCz5!s86*`v$#j?5I;ZGAfyZ+1vq}*UR*y2Lrq0m9|?SBd|gF8R5XA+_yRgS z0$(vSG0mSbNVZzS5NQ#3lH-D-LUsTOfQoHS6px@HL4Dw_c4&b36qS7;GaiZf;rnJ_ za}cP%yYM>w`7S8ttS&h8Jw&T5+EdPSyCzrRWOxyOb0y=`@G38|&or)kOmsZ3CZHH- zO&QH%t+WiU2$*v%^+sZs1yE?6(kH^>a};;>PyCqh9+D+<9d^03n8&dT*ZVQLK63U4 zfsL;o3d^{SH}?LjR^?s7)KXYH5>?=!-7k#pzi{UM@n2xf-?iBNPr{df#hHozLoJ$F z{X@bTsbux1Z@jlM7)Fv3Asl=qk?bs7PY4wv7zjbm44^!pRgH~A-9Vrr%cM2jdAXI< z8_KzFpB;%@bdLRwza6~!v=xs@}2y~A;TFbQyS`;mL1(RcrCSw}q z>hy`St@=xuerw)n5)!QGn(HlnEafNH(?8Ywunx9E^{wv6Rr|Bxc(z6r4q< zqkm*JN!o3k@Ry=VwKt!$GpDCQ&$spnm-kpTLM^t%Eykr4Ueq)jA=1293U4h&{%D&f z%~&ix>5?Kc|CU=`jyWi`lbuR39o9o-Q|%34dnG05*S@?M&M^wPerL+flI=ExP{W%D zW+2^!g*f1ABh6Cvk>rU8R);JJW}wWH?E3k14ZadlkHUbPK0VPWbCCo%WAa}3!=FFU zEDXrJpqyG`2E8!tJ}mX1oNf<1A%Y;WXX5zyJ(@?9W+s~6AVYGXkd4fi?LOgzj_^(6 zAj_2_2sFYtgV}5Uz*}@r(TO#k4Iu~D;QbDQZ*(I_gunPfr&x_$IP8}|*;Rp@80}>G z@zp;Hww(qAFGU|^ARH8-hDNf|P-|wwFj9o$U|GfR5)=`haOd}O*8#sCPtlEdsLZJtYQ}ZI*M|xS~mObeO zZiA1n7cpuOQX5)7OBk_70FJkA@H3Hi)Y^tGkv8yY*-|vcxVhZ2ZvxUFeiFHp!#E-( z3|n22zX$lE=Qr+}MBO+?2FJ>32t8Z!X zaSq-+;_w}6lqJ0=Z3Zd0Nhz)aNZD2-P4@TT1?FG@FV8+y%4xkRNV-#Q#k(`*6CG4GA#pBXCq@oIn z#Ko$}#j4E3G{2NYBE>s+kO%OYnZVfdzP-E@e^ zx55`$xN?(wcz1QD3@65w859JDwJ0PM@X!FC_(Y>`gitKzpH0_G7{h8_rkvZ(pB^l0z_O&Nb5rLl z^+(O=of-R2*;hP&3|!ZNMb4%=CkkZl_zLo730qu!qH&m=G_1_KRYm>YB?ajhUPU?VCin2Q$)&^p7*2KWCMcq>mnAsIufC+ zOrW1&4`ZVAbfPct)AzVWZY1?JZ%uRZho(*aNV}ZOYfm&J{uR5Z>9*WFDONheuN0O; zs9{%uB;sLb4Qhkt2rl}^v1O8cDdF~r4|_E;)XSz_$W#=KLETN_MPRkK_7Yf7lUw^)$XIgqB)i z)Q`cvzVB2Th(1fZGU#|Qo0LsXn5ZUy9c-vjUoJI2IE$jL`&uMEN?uj0qVL(mTAwr4 zR_2FXF%ArsW2?*t#FMMri4W>6l$!E(hUK$Ps;dS@U?Y(;BDKTmX;g<1u=cCtWM?Vm zZexbuS+@7A4jKp8rVje}!DuSYgtCV7Aup*yQGnG@`Cvdq)guoeAup*#kRJ2%^Rc`+ z?XQ!jt|#BL!pEaQ6m6q)6QM}L_0Zl)vuU`Kq%&&K1(Q~OKyXh4xIxql zK7L%(?p;(s=of$VOMsa$Iyb&DUe``*01_}y&V^30%(2c|o3@sbW5L+5WFqYq2vu-%`IptY(VbVgXJv(rjAGUZs7~a%PK4u0`&vdR%gkl9*(Gag;tbVdccI!ez~Z+uq3c*Ax?c7oAd%JG_6um za0P4Jzpdn~-&NvNzYl<6|5jhl{_kfNWx9U`Bt?v@|76D5*#Bew{?{NwN^vHi@angi zBVaJ5A!fnzBnm0dfUDj6xG>=?C$CLs-wfH9M;>Nj45#eK_p@Q_4Ji!Kg1 zv^5*1X^lx7OQnYZ3-d*NtMD9ZRba(khp#_0 zr4`EpmD=H?lFX6DD>i?&3wg}%5amH_XbUEH5?C~MrflI8)d}KlI#(nnHXi{&rxEoFf$+sujOo7K=8vf^EEYq>=do;-L9yO z+iK4LYSLN=oIFCa#7`CsEhn=Bjb~j~2w+Rr4!N`%b&*<2*$F1dlrEXvd4SAGy*IyE z-Yy>=^RTT1>JvrCbrXfcl!_+8g~c#D1hay_9{G(!H4UO9S)p>a!f>w+$oTo3%9J@0 zcJW7%R8yt+1chKDnz-hns(ro*k$G8Jji)+&}GM6;B*+~B_&TE8rOTG^lC-VplUb47is;dNlzAHIo&&~bPmfd z69q$u8;#DmYVNoh~4l*G@$BYOlIk%(MvbySj&OWj2Lp9 zWRrO3_HlK;m5q}35-XVp-Nv5-d!WRll}xn!RqH)}v=&3( z$FG@gL$&?}MYKQr$}zzaIN&ag!ui@97Hx&G(#vq@5DffKKOW!jfBpcM7IApQz}ymP zjee#6uooIgfrJQi`*6RAy(vts_K@WG%FISZ7YTCEQqIf zGII_CiVjhqhMdFSI;071(UMXAgWyyTldkXQaL@SbFJpVj-C%7@g_%rjEoEC$uW+Sl zrSaN*raJVZQeF}^f0R{4b1Hc1mn z*9Si`%&v&z3|s17E@H9{exO;BJ+e5&tL@FylA2?3ADS<9dKyJU%_xB;t&ESc`!Ojn z^FMq)OkPb8@@}aF+md`VvQ87ehPwPA5jb&Y-BT_VPJ%jRD=Tc*nDRuqi(GhY)N8yN zy3y>CmI6bXhMkwB4q;-f%w)_nsgzgf41fQeRYuQ(nm)Ztuj1}D!-=8(X*gR?p47lR znr96WO;e!HJ1B=VtkhAmON8W4uC06%7WR`|Tj?e(Y)L6YF(#9THny5DzaM*T@u%Kq zJ-OdZ@y{9f8*rvM03pdvYdI9oak8J5c|er=iCWHF5>-lRUqpy;Vo=~>*ik_}M{zxq zd?X1-xB?Jx=CoW}o?dz6&s0*yuyZ$mxPS7_n6kcsa&q9nu%;uzMThtv&EJO9u)S)R--zB5E7dv;S@JBdWIc$Ug zq;AIB@I6uX#D3%?nMIDX=XnE4PRQ`?@CyiB6z>OC`MkQW;o*B$bAM~KyT)F`a7f6|n9m1?eR$ZU9Lk*|o zKJ5otH>w@j#SVX?O!_v!-vtQA50_E(EW`7sVKlr+4XTy(EY!oywqTu(!i0kU`7ECw z-4z!^mV#b{$Ji051Z`sw*!5+s70+{UI1ohAVn7^3=9I*Z$mD33+HksC1}NnOnid9g zUpgW~1;OY;|BSoz6Y|E*gxfJUe=4^o_X9=2JM_f ze{#7_b40|kDzq9q=MCgHTo)ENg4oYj4u*9Q&gkE6=Cvaq$Ud{v`aj;0kbO-w(3j@Fu&b=&9eW#YCGp1tZ`RJ*lraHNI`9egG} z%f6^vt$2a%7g51yksh)DkF?>l2%49B8I^v(TWqZM%<7Amc<7Yx&f(8x9XB3$O5mFR zLbfEIPnM`ntTApFP3N?QUvF(RzNjJ|S$2YtwUnmr3>?5Q3e#p^>ktgZN!-0v_IWo} z0Q?st`=wbYJ@0EpME{q>{J+aZ|DpG##w7Md$NsN@(N0=+3{FB2w)tZA%t3Lpe-<0T&6Nm9UQfy zJ(VvUGfowcWG&@?m#GWDYSOY^EiH^eF^?T688ddvZ>||}`CCMnQL+ulNUzTpR166< zf~@UNX3(*+J333qYf{A$?0`%um9sEoERi^?r4nV*SjlR>afml+(oQS+Y=;u|4pdiK z`NZ=}Y0YhI$+~L8ld16H!I1)JYRF0^J-EhPtnJ9hTWF?c!F9Mo)o7F#_7^N^k&Ve_ z<|%%%7^K}A3`(5Okt?#Al4>Z(o(lJsClBRw@>&fpN&u^Gc_Fs1swcT9Z$Q<=)b3a@ z9DXqkCdM>s^l8g`I=EeJ)i+wBr6+d3OgMA5+Q)z$r%%hU3bM+nl4pz6FeoddfV`=W z&X=f-4wtOhZL&@lePh>^_&${)xTL|>Tx4dszOh#iSDH?=CZdBnN4TeooGQ{qR-in1 zPDB@Z0+^%SgRwssiaw2bht)U7&RC-ej+Hc;Rw#4y#?1%AKdvFH4%y*YBPZ zpJ3I|_)!gAlow&otHSJ4NY*n=KD;%1UFmjEh!Bgc2~MNqv0mC!Fyr)&TXoQiTGRJj z4vSnRm)Z^pboy00|FCPcb<3_+T_m0is8gx_3KJq4pR;=5@b4SSfgv+EhF%_OwZCkm zP^}EUHgCse{F+zwa*!LLb&l*mc0K^ixLk0XUnbmNPRTcW$U)9c|)n>xJEs0XUNr6MOOT4sA;3gq%;-VBD<|esLkcpQ` zoQ#`{pG3j268UzW=p)cTkdJ{c*%m>XV4C1ff=KcZUyWD^sF_=ErAerY3zl3aeb^UH zkSBSnBQyN=NJ`;B(HAQYfVeFmH1?6X!x}q&6ZaSnzs=RLOtDRm`Y4aQB?09D+1az# zLzsF8^Ew>iULgp+bk>%h5ZX6AfU>6-T|2+1W=sBn6q-Rs0Yz zkmnR}MhL8P`oVH737jyJ{0j-zC>lIL2q6z}mxeaH0Ye@~ z(Zd^%ElLU}}pE2ds)eq~YzN&S_3B-`|oKykn7I`-#XS{MyB-32ij66@t)@ z;|=nF_@O!I=PvuCi$$Ve@Cm+_vjiQ%%NsBx>?-Sq@`j7|+-bYNujpRN9aN2Bp~$sa z16uT~>BeaDV{;p$YW>Zj^Mn>bX9RS8(ec2X&hYUXKZ~S$y42}=;q##OvxIHAx?iAH znIFpV1dTY%#8etZBMvQ%H)EE*UpPdk`vm91?Y<=}>H(6hA2#z>06om&@t6V0t=%F; zbi7_X_QEcM^DmB%p+9;F3iRhc)oykHvRkXKH@+zI>{8i+yvqckZEzh!)Ub9}WydS;Y{nh7tKHj%@zj@yZB3T1Z zp!O8;wTw3@BXe&1@Xz_UM<*D!z>UlyJ>l_24_I}X5npEAdJSL1Va-&gjtdhja#W{) zj3~Z}D9<*GTBv3!3x(z{1t>xL!u<^5O$As}(7KpW>#{A2Hp^kGB4KjTaOWkA!Vyd5 zl=%ye=EF!8lu9p687mDLoX%-(1F16k7|p<|0SIkBsj?xUo;#g+R2PA62E|LABBoeh zI1I1ysFfF;mBz`tA`to!rf->3?r4UJ(0Lu zl#XRWe+8(m=67uNYE)I^U2LO^4esj1WQ zszVF+zERQ{G$}7LvO@H!E{O_JU;De+rxQJD*0c654&e;gQ1ZXw$=h9j8%E_U5{ule zooynNGL2(fSVy8FQ>FSV24lW_YXhajOeGAL1et5Z8nR2%C27#CsVJK4Ve3Ek>3G}C zBALIOCE+^eHmO^^ zaI(I;S(&{0!p%+G2{y1Fcyr4}y=VwE$#Y%@n-;qIme2a>Oq^C|G6mD-aMYsdI+kf9 zK1VLPnJiW%*0REGh>^qFDls=(azST+x2hLe8rH!A@Dgv@g5{tyNp0fmWc%Hqxk)aP zW=RcGgVTcTpdF#1p?Lvbq!%f1Np&M(gQFF>)89y^K`(irg#LKsU0lhST1r^31Y&jH zS3z!FdJnS((wG&4;@XE- z^Bm4pju@9GdzkOcHD761v9f+qK#VFwuk_Fs%X#!yMHN|l6ffrjKleo8EvRKZEvqX( z=;(`8an3L9gmQ8)8!8UctBY}mW_|Hyhh>LaJ2J&vU3! OYqMc}FAmWv%Odf)kE# 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

lEd4 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�V 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

jXCn_<&-a;M=O6^dMLv_ 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
7cBW>u~S5&PaDq?#{>oTacnbz?_X0OmUQu{%wy5 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

EGe<;=H`++IUR*CA4*@9j*d0-DU|Z}+!s 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 z zkeO+cNIOH4T{G<4<}SCuk7HUvtS)C1qbDTY$Kl{#_fJQhmtRRC0G>Lqsvm=o4csyriNaeoiq{nFL94g|s4>)kgUla|dF1SxekDVOiDq zoL2dK#G|ejhtt*j#jd9F&aSHS95yy>`ncfa849A;bN91=34wRd>iN>26()Tzz%Om5 z9^@80mo-aAlWM%{b#vhDVO0ZBp-NosS$8|#Uj#_E=f9Dl+o1d8`=(n2 zrn(`#AIv4vmp%Go7+WY#~)FDBAA?2;p)yP=`t}*w&i;9i3OPBjg z?kPjPTn@}D^xCGy?72`9LFF}y@>BR?AaVx2an5;c=XC_`dXmWqw|!xH1sx&#szN5W zuNwB+EAg9a1-KP^5ZyHMGF}H}rt(c~mF|+|k~3v88tt5?@0t8K#EZ&H$KV$0ZGLF` zNC6$&=G?JsFRJANDwkub{;)Z4g+bh(pw4xV(56&rs4PoE3K}@K{E>XF+8J70~4FlXV6v5f-jXDq+EhrOp5jm>)`UiZo5dR<;2jH zobuh7%Bi(Q_HBM5(4*R5_H2@{>bdCwBzLHo0h%O47)@1|FmHT_fxK zG^fPV-v~w2=+lbDsKWjL-8GLQ7eG9QWRuG;faio;$JiUJDmrixP1=4PR z4XzC~diS8B!55;V$WBqLnt+yw$S80avE0`fD^ud{T#5r~ZXI=*|EGez;;ozoQ!Ke~yy)JngNZ2)gF{0j^Y z->s)sX%;sVNYskg@)Cm@<|TUcYpGa(U6;`h8sfxn3>LU1QCjz^>>MR#9!`K50IKyh ztrDtudjF=b%uRzB$i>3It8ZO5l8o@`A8$wh}71Mhy81;1yrR$I= z*$b{`J84zbO}+dv3PMxzNOPl%G_L{~_CT3wDNQgfFotm4CufjFKELj$qP#jm|(PkV`9Y&1Px9|UW_9dPpvYR#F@ffL9g(=F}d5R*uH1B1hvgP?*+s&lY z)2UguOF*ziBoO5 z6w3=OfMkTzNwo=S zk;T^V(0pmYkqgXsK>?k0@oqougN7FDDESUBPJa!Vvj?Hw5^Xeb3lNen<#Zc#aL6f6#*_e9jGw zdGMorfP#*?4AXt8`^fYfZWB$!b!f!4XeUV8?Gb{jv~gmxRf zJ6Q=H_@F_Ts+2FVln+w&uNaH3T0Q8`e2cF^+XqdavfI;;+f$CzA!hk*c!vJo+Mv3Y7S4)?1=RaIwnP1h!X_$PK~`QYt1ylwR!^$wgU~u zXkg=a?du}T4f9E&Q?x{E-4F{F&j9J5<}S~+ktSUd)iIDC3H0t+tu$Gp+#%zC>}dV= z9_l-KK^f`~Bmxj1;o&s1p2S~%^m&GM;&^wmG6Jdk`9s%P73$6v>(on^?n{@xV{841 zg2b>2Qe>KDV=Xf4>V$iZkaf$>U+}di-a?MDC^}r3S$k?Ds2?m>&#{!OS}rzQVC@SjS!m4{0tiD@00Zk zOz)De+DnHP*%Lhv#<}C1;H87j0RbBXv%5G6>KKi)qmK$t> z0jWIV64XJ(7s>hAfw5#?{>N}g>RB*r!|XINs@zY@+(3|pgRnGju%1s8(bH$hgHRE_ z=Oe3awzTGX&h9WqYoPar+5MW$0F?UK=!sIU!zUrNlg>;KgM!xl2AlCkV`s{7J=o=B zTPtQhL&W<&hz zAfNC|A*z*&AyzR`6;E-C@yrW3N)tj+XCdnQU20eIUgs)8=F$n`={|MPz-wP>Y^dVP zDrSLI=OG_iCP2b)mi}4Mtu=jNC-XBZwspz=E8>OR_TiTC*^c{hu%}1Z@h9Ad&bey^ zN*-43kka9<&bdp%{dTHdn@ZWJmYlOPtkPjIA+$utq`YOFn_!oV8>N8^uC1rLixkXy z{*GT)A6T6FwO0leR>MprG&=gR40=_tnW+rYM|AYD3_cH8=C>3Fp*^vJUuVEKBMo8L zE6Z9X+gUm^WkN|j&o`8fW?1n?>S_y_tX7vQp`rRU%|pIAQCSi*kXc|v%T6{!UGyCD zFu#KdvXiA0$+Si*H8heb`%Dm@&y!k)MwOL7+>Vs8z_IBu5B{cz&K-WngRZvtVWZNq zm$g71R+5x$eG(@|=Yw5If3qrH$9{*HzKiJNM)a=0vdgrUkMRp8VL>qa%q+D$f}fNP z8Ntt>qJyoC1xXR;r@DL+hJpHZD;DdjmPmtP&UIQ+i#9Lz=iVaE<04NYi?aLN4I>!L zJTMH~_lm=$9Wy?m=2gxI%bBbrDS7EiV4A?Pc#jAaz{hp+tYD*lXtzVF#W%~GbH+-6Xbtz+W)Py^wpo0 z&7<|FaCjeU_~*|oa_Exb-#@7(lKe8{gaZZI?V0aWA}N>;XvJIV(5c%r)ht-s^=K%~ zS$>ePF(<8qTZn8r)@kdwf4p04xjB8>=yEyhY%q1UV66+^e`;xXIS_jLGbz9Ew72Z? zmqx@nAImKKa)dP%qYK2DN^m!LHNyWJPm|Z1ca{yJ`J-n^fqjVL;5zRapmx5hwMqS# zzK0E+A}{ABa8KVmbfW+nk=rjvfKP|F z^F4nl>uddw+12^!&cdqFQag;{6TP4ND{hVA*5o9l2~+$vCV8rtJ~c(x0@9^WZLCK-+vK{|_>X79uJPcm<20E~jz?C0ZiPT}lPH zAG#ts)`1y6!b+b*fl@!e-#9_jPVQQ2sL{}~mecy-*!?c8fIzlSEug@SJ0I<>@|&h< z_!Gm)N8TC{hG|x2;WqEi1Znzsp;?OwYW^gb9eUjQVE1~Kx;%wG{G=P%-`-?UMU3cd zSgiJAu6*+(xEj-rNvTRNPfcHsI)Ady@82U!3||?NvY)6AQ}AQoNqxlCs-xyQl=(fu z)*D#Ri%l3lRgT`XFKsJLVa55|fo0Bqx)+y#5wEX72bs=q+fx+ziNho@P#z-5RlRZo z?HZ&L)*ko)3|T7@?0;-~hG#(IYF+^#TC#uz)~%y0F|_IJ|=rLs0Vk8PM<-nm2 zC+?i(@bk4c?M7eX22i#l1VTH;w48)oWG7y%eY?}v$e8(XTIH`T_NH;m-xJIeAGP@> zhZ%MY4f$JGzKx=k!Ky1VLoVH#2(E0DcQjgA8zh$=d#6ncs6;LmE^7@T+Fw``S~Pz! zh0a}kAH-AHxtxH@QD(&-O6p{nf*^)8ig3)KWc6%$I;I6Xt8d&8*VmV4h*hTlD&-3 zn0^-^6{F$ZQiP95-{PX8IaKC7VpEDZ@`4!E*Xl)MLN*&TTkZK zTHI@}OYd|4RYQ1TlWR%u%q)GBNKZgW`df4AJb%jmR-x6DOD;?x11@wZmZQB4(E93E zi<>?BMYb8Yl1pLO8WS(q-sL1m)93vsHqT8D|n!bnRqvnySq*}#5+8!nnVv!_fVk4zq|M%!6Sn@SS z5^^JHQB6^CQMFzI^uI%w(9sj$d2p+0F9|#t{VdV3B{)vzp*2`hx-~4a?5?-eQ^4%* zuG~PL)W(wO4Vvt#Ut(w+HiX(fSB@noN(MbuAyw%!yLe++b*E)UV{W%A7B>3sqAYKJ zM;qWYBn3sLx;%@2bT{?d2eIGu#X$9dj#bFZJ@H|TKO!#=%|J;Yf%?mObAb)wQP8AC z=g>;3MUeu4C@K;?6Sl4rPQ-s(+;s7?)}{1pQsoMfv8>{{t7syZs$ul1%Y5GM+(?GhvTc@0ff${A&OWSK7B}Kztscv$lpfG#8 zSz28%iY6}sfgU|heSd|!Gs=phAfH}uAgt*98k^>2M{`rO$*zx{Z}|wTNlU!%c2(#o2K-0U+(shgX;1lFj$ zho>3+xji#$0aHMg>f6U-mA>T{GreRQ)*g!5o&5R}>YYW>wBB@|kukyrqPeu*z_X*y zpuJ@L)l!NX+6KAQ@|2WfS+l^an}<=aH-9^Z;rrVWtdWe^w3zyrVi5MzUiLr@QBEPz zp&3IWNT|%`-UG|m@Cjt!-$5C`h?Fc*Y1dT!!5h^h* zF#sm?dwQ_RQmht&J9A~PE%YK=Bde{+1G^YtpPD<`fz}hpfvybPg6Vk?8<+(oWZxp4 z?R*bk>Z&q?+E8`G2uj=j5IVWVhp=)X0DXMv2i?NVz731Oxg9q4l(qK60DaGd!!pBK7H**VM4ydl;-wc$)_dBfR6jmU+I#GgF)%Jli?xf|+Kj)ald3NT zY1PzM#@1+wc4t)7s5RRN4Lr{pi;(e7Y;ABf-g)O`QLDtjmpnkp89GmV`gO*mWGP^TNMV%G>0zGfHca(O5obB-;zuFd126n zD7}G?rX7r_!`!2N78$#hOTQe+!1733Y>mve)qQAA&|v4#HrbAMacM0ufGJlZBK!?M z_YYoO_6yi1JMfsDPzpMB>(~>3GB#MM1Vz$?Xb2++5=y4O5i~=wMs@L?(itK02Jr-~ zK!3)}coWXv%%6rSsQG@U?V-JPR$Yw)sA$j4-{wHW0erB3l9CW=d6MiGw0|k=eM5L4 z0zG=D&hRcB3VnAF$-I5lj0mGNot=WQsE?=c9_v;Gf~@hop6yRMw>(yip};bxbi_6G z^wdL}r{eeJefMSQYL+*72%EQqY7HqxR}bkY2lIlxg zGL{|T6pTKy_!bYetEZ0bdMIfE4El59&h-!e_2dQ-U(0tts1EC;%9dbueNVVswB#KV z0mX!J-CWB=7=Z(*>RYpO`@QzH2dyoe+*M|HvTV+bh# zRq|Z#40tzvxcbrj6R<$I;1!J7w8m~Ck`Jt0UXRC`1oE?SyJYbn4`)lvvW%dDHe;vWY>n5Y_R-QRQiJ0;#l7BO7O)iDjt4Z8x41`8$)c-32Fn`5n(X zCWhRi&(9;;7BNXf_}@zFruJ|!?sEt0%&k7TWLm`T)OA_YFraks#9}|<>dgtPoVd1U z(_EUpoP=o7aUw7gPJ<&5u&((JX2Q=9PIf=tMg#4R>qlM2_9CsN%o8Ht)hFwii0;W^;mtxCPRR@x?+yBNbG_AllTq?0 z`JBH*SxPARW&7I(3FyR&Q#q4jrn2=hr7WGlhKqAcXKrYKOkOX%R*=VKS-|Tah zGk#(&OzFe2=bd&%Res4eGZ1N6--u3Yyq*#M--uejTj#E^3C+$O&p`VbC7&i2xwUC!1Nkt_ z{2zqNss;>Y!*&%Fv=rz+`+>{-EtCu;;@pLof*m&2x^j=^NG^pRmey@)EP)_oVrm= zLA!Nma|@l@RyF^NZ~%I2s7t8Qg+_}@SSaY=lIO7-EPv^Jp8kMj=70Y~bhJYV;`0dw z;`PaZ*cZnk!&#Rd5;H*xd^(odY@k6Kt8?sA>iYAKMCD46STY#Yzy3=6x4BNj|2gZH zkx&)0aN6g_ma6U(t4lU!sMF4{S2 z`Ne8;F|!vbq+?aWCk(o%mslWGd7}pK)NuIQ@m3_%WKVt254E}DQH^5I_shBWl=`=<_Po(S)XZzNS8LF!7y%-owdTFjhwH8HyZMpzVG_3VM#x!z97g*Q z?AtXZ!2QT;Bz|tv)JPmEa<-K-(|8%k$ncZLRt&QWV^t|w$bnyeIU*N(3rs>!$sI}m zroaWP70kk#+Re1dxl}dzMCL3k&@}7hIh~VT#VPA?P4etp+TG)6Om4LZ8a*N13t`4m z@Y5IQ59)m~{rRa1K=lCsx3Xcx2Fq*yeaxc~)W5rN^Pd`(-^B?39YPXf@9TfTNLdd= z#)2tuX>+34-R-vCbQtt#sDv5J7^v_Aut;UpGid7#By%qzS3aD)`q#kZBqs^+E8~w; z2b2eEx@Ug=UcMh|gAl~t2KEg?^EYW#@8XS^7HQtnHqGkELh4%jiq9JDCL}5%w3D^; z6|G}TjFS1iyN#C+mNRK7Opv>6@lWRvCTfA`s;L#xNJ2jh77#~jiDpWY6RwH2ka#jcSd+2Rs_!%_NQc-U@y` zr?^)n8$E~h7PFggUgrBG4ELd)O}RHNWy0D++dTezka08{B?2aI2dFmlcx5GP>8TftRFi3Zse{H3(lz zwcT*qXQ|#oX6XK|x6nFvkNMpiPQFKLaU&Teo65PzE z6SqP}H~wQ7S43bJ&(TQp9vS=7q-Z9IqH2moXs4Ta$tk!~pnQFesV__u`Mwx*ag+Q< z_yUS#SqWQ;HYL-E4Hv0sUY42WIg4^(H=xQ!=Hx-j?0$W-D7_>-pIeLtBtkQxGNvq! zc>sqSvzR}aKHctyK?Oxkzkz7S8P17cD`Vr|nYWK)f=?0DL z@S6YiES5v=n`i6cc4F8lVYPVKwso)#12f4oNiIIj1AQ> zq*wp!k@?KUq)3DSJ9{ahFQy#fyuB=Jh-It)5htqMWX>J5hHElB?Iq=q*2*_<<ss2U9pN3}lNUg+=6D!)T~26t2KzULsE!A#N8d4o{4X^W=3j8{Z&O2~zvrs| z*Gu7j<=||=WbEK(Z{lTQTG4g^nb*V zn5fvlx`)cC{VX%4z{bFsXp1|MZ$K)t+2@NAgCQq`O&i{rzc5^=#x@ zC(lp*5(Vg}zr;wY5$9pRa0%20gsTU;k1O}bEt3X+*%~DoHLI+fr3X}-t^k2n<%sMf2054 zo~dIknBK5bJQT9@p<1D0v@0@B8KIYn@tpt7Zyn2Ormt{-Gs3tj3?u2fIrPPZ zC1mp^>xJC&{CN9Yfq|gQa2P9+8$R$dH5?&J>gkEL*mLFiCi)L^eAqX1FgwpezHA74 zVUMs`IZ80X37TBh`dgEIqaTFG)m=DDao%yvdCVz$C;eax|9}UJn?Dv2A39Waujxmh zYSWyZLsfgR5U+6oy8V2{kLvr%ogIVb3y{yk`XBX*IJ1(ZR(YM3AtL?LOaax4>>D1#holz_s(lTlZ-?3Y3JA&77Yc-`vJ|uX<9#t z%%531{;{w;3!q~B6h$F6e)1dYm23`r-+y3?I=(RQ@Ev1n{~s_WE}?2>`Y+9C&VOO7 zSG2``=PAn`Y6ad1`CBj!ag~)Mov>&HyOmIkOPW`s48TIn51;UxK|**R)P)ipUm?T< zhurw+LH7yYfbZV_&*Kr>SL8;VlB_C%(B)EEI_BxgnEtDXnV@91K?DrR&`~Z-mFqJb5@2pCI~ke;Z3IVv37o{=9cyHa zUwW@yIOcAc+|#$$m$?5Mx!}kQ89;d;gb+0>+2VaayOYPTxqt6iMurbQDd$9QN~p7h z=KR@L%*Q>~jw|47*iA4n)ciW-*iT5nbe40pLdRPdBI~wU#jD&paC%O3F-gi3%VX6wu4Q;&Sm9e37m#{I4jfA_3UyXNzA?|8!c zw|G+if6}x5iKqXuZCPW8U<%AGD72T@WiFggE>+0TBLSdUNZGUcLTST4ZhAGurC z)n^trQVckYKIoP17yc7nNzX{aso}s+9SX7(%sk>6!DJ%K_`_Ij8$e z=1U`F$JFcz%>~Q9e+#z^5Q^Oz+$j9u+ZG((3FV!MklX2t>@XbTd{kwT6_*huM!G z%#iOAy%wjasefQIM5*R({k@eLbWE7)2nN>&0bnK8E^8xo2xU)g=7ZU6 zmgJJvKBYr(_ECRD?H>#yt#au1%-$9QniS^*2&NxSSK#_z&{FT%)(DJJ#>`kpft*s* zFL!5gwF(=!esqm4OyD3SR5n{oY*w|d=g5ojslxgGN~24vzriLLfPs7V4mQ1i3pT<3 z3$XojL+pQ_Mw4{l_13L(H z`l7?XvNui_Or&bubYxZ&5}FjS7ecT=N-g-HeOtR0_jNymb-(wc%Bk1JdBcrNs%?^a z_vOy!Ze7<@~wt5zN<9h#uqGX)g>mXPaXjVwUdGNpB~kt<$z3Hm}~H^R_?s zM@G4}&mJV(qB9|-x(~I&oes9Ng{6LV;=a1yOZ;p!dw0-tKRY%$2rN&ErL)LB4Zk|3 z*D<;baJOX75UI{h8|RkXk&xM&dP8SJJw3rleformdTo1svAsR@eKP#X@`$gXxKT!+ zuym%YwOVSnORkrz$^(Owgrt;AwNJ53&Fj z2ak=FmvkW;dwNo!bj#0Xh8tIHyq08SDhS%TX}wRTJRN@TjXc=1d^O86hZ&NgWSkg9 zCa;l+Ku?ts#^ERG#hgo#$(qrG;Y~kW?TEwb&A4;&IfR%^1n48l_X9dw{Cl3a7|~*o znL#LeqUb95B@2TfAr3#$bP}-qH5X#fjWs*iq-kKy&nFXNL$*@;)skH7ZiRXQKoe`e z12mb5wWTK=#>o)38EJWJkff(Iu?5Q&v+-(mDccv{N~h9V(<;?9HmA%4?^u)*7b42o zncGzkiCP&JF0070W#bG>QX;6>1>1n&qpXAi7D%lH51^YYJ%WOuV zBCiEo1H?hOoZhSf&XngOAZ|g{ZW*e!Zq)c8Uo`WrC;p^S(t7hb_m|k{HrXhZ6`Iaa zS1E3LbV>0{K`F*6-QDY6?Fz6h&5+oEUoymmcVz-cGq6s2^x3!POgEUU3iKtB^XW8Y zfzEqJPMi;88fsV#QYmuE@V&T{Qbv6w{8QP2%z*FXCj+|U{nL+~H5ppDVuly(7>==P zl$()H2G~6LuT#gQ)`pJa2U24_i=bq7+xr~pQS)dVicuEaGiCvDDl0B6>^ssZ^~BpS z6!AtVG{5d!Zp|g`leyx?dyVh&P&cyEs-;cg_VXm`B%tYps{LY(1f>nTp!|B!xIs?p z@sAT2U19!mGs=%D)wiE)b%aS3Z3S7%FxFCr(&MC7eOz2-I<|IIa~V0wN@Aw(KT54z z&?%(^iVw<-mMEguVfty1A38yHC-J=_cxJ8$4&^L%LDhmu)E(f%j8vJiZeKX3=q_y) z5{B{JgTv}Y0DrZiS`R!l6`(_=Ckw!zzr}!{Kr@9IO%qNXPD?y8i!cC?qh`j;R=y|- zOb%=ej1H`PpF}!A!(C%2+cS%>QL$x*uu;85fUr@%rH8OlwIzVC@ng#e)3+w@p2o8~ z5S9Ajd*He1#S4PJa1ZKCl!N8;qA98XAT-rC1x?)sI1i_IQ#j)he1@Za2auX;|DmE2 z(@~=&c=!3sf@&3Mcv}OyTS_DO)&5;RB5^{weXGSM~Z&%*?`ew!1$_C6JrIxji+(&DvaI6R_Bj)C_9vDi2MNa1jILVjPF5Z(Ttm?6&%Z&<|y)e2E5gJY51oekh3~c}|QZGO8uqRH*}WS3;=$<@@3M z_4=KjLnA-?C)IWLk8Wz94V;&82W}p83K?F6bv%;+f*wo&{=Pc>aS%n#xx9*{P$84V zZY3w2fZ>L2l}pLzrbxl(m`JJ17Fxo-AM}6DfzMDu0hM5mXN;f#^9v@V*OZ=amIn`* zx1KE_;4^m6oB0I+7b6@j6jhKm%qYlG2t?M-(0s2Y7LePR!g&~{w;r) z4_wvEtAJ_90JeBLo&l!LS}X0!S~^;c{cayG*OhT6-eRBZJ0H@;##?KpX=c4>cLKS# zI%O3)v!U)W$IoV<+(A&canU3?F)i~#l|pSNCKX2SNPkF2)po0gA4!-u z)tJp8kGD?T&%W|aJ2c~-b1qr3JGM`*1WGZaZzdZE-4XyL<+a>9bRHQBy)`>yIzPH? zG<}C|P0wh4lBzxol#@}==91r^MmxOVdrc?4wX-kc-|>OqXxXnUFNJhqr$=^_HgKqP zMoomWlP4F}hO*r7EQ4LU1-y8ub#zbH7LgYG6=fI*RUdLAa9o<7=K-6T*RLWKu}!AN zhuNpC#-;UZlV-g8+(O^4#2gc=+1lV7C|+!VdUPlqtiHQOoFZ;08JeSQoc(sne1#Ep zdC2tF4cLWNFKP>5gf^+cLBB%;Il?9zuSuPZzbC!nYUzui@By{weF}OeLQCNl)!jdebnP}V*PC4MOg^dqv?YYxj{ zicsPUwj{K!Sr0hfpbTkBBBCllqgGxk&*uh@prAZ6wHgUwMRu2@Rku>C%U28p6R|;| zd`%>Oq=@)x+Ts&LknfhZp4G##KxHgEW;!s2uLn!-;L1QN4VtdZF`Dg$+9Y@J%0XM3 zH3wa>->We=qtchb&ZVrJY{7n}x`A78$KkMjWyW-43}ZvbZ+-o9L2k!sbuh$$7EG(g z_4}*@=tF-io2K>|QcWYjmS;x4ADS?Rm)GouW+Ixq zb}Rd#F?9iswu^KcnSwfP{QOGXvb(5DvID|G0Q9&4!CJXTo zmuYu!u~yidjYP7ILfK$7%*=wT5vKO|{$G=iESNTvkIu7ifajjz5LmPox>YcrKJ5_x zRmVl-zkfLd#NqLo*c%yH8Cg35GG~YcMgMk7%#Y%e=%GUo+OTxevT)*v%m9H)O~i9e zg*GmgT(zRRM6ZdAnJyqM4}3362ZMV54a z3zIheZAHBDTwFHN7)IJkWnJlN?<=|Ye06kAnf&%NlTf?^0#;7AW8cbV1X+BV7caf! zhi(XR2$6PDtFi@yW}H-loKf5^(GxH;?`^d#bj=4dTjV~CJB=oq7Z|fTQ4T5>3dg=g z*r99nBJ<*fobv$zLkVj9@Lf7}JrBk&Ajc^)V!%bPGdNPS~LzsEZ1PvWqbriN_^eTDZol{O#PR#YSAYTrfYp-7ZlI z7X}SMebLO2RnUh_5X}Qx+cIG{s5RNlv5@yK@tr^f+hlJlfS z1q9CGw1(MzLTA2xW^xaVNALmZw+cAGg<9|c1;+nU1^NFC6@GW46h!&xB?N{4WI}#K z8VJylLNV0+BHq^eJU!cI-mVhC<#A3GiqE9!Cf8W~#397k6Zt(N-% zubcE?<+nR_Cqp(x9;1p~&rWV3n1fKzZgOuM1kG0|kJELT;xYA`6c0^?Jqf>827Q%A zF4@n_@k)hBS+(%14yqGdj%07qhxTG>@UUQ-Vq3E3lO%B7=9X}vd?(&Og$`rYmFD=y zUDfanQFv@a)W;LnH%|UJX6=J@?v}l#nQk;zCz2T&n!~9VH`k36iTb^9mu<~FOxg$H z_rg;!Ef6L27=;y2hkTx0cZvOu% zWKwd$BlT6msi43UvL4S%p*<@?z#W}lOLX#kmv5c~c zI?7&Jp0kp+u{`llQ@;AR%<*W7@b<@XNazpSV&!6zi9Iu)Imr_7L0J#hpGx*Or@K&b~u68VhzK8wl_E(xHpeU~gt3*F#J&uW88AqE38U$QDfj9uT`)%q) zXjKWD+!?Kzz_8ETqMgD0mH}o(F$dwlq)g#|P8mRke~+2mzhH)raP_u`u7#Hx6!-^b zFqL#fL{ulT0|cW{(tV>QO$5=saF@B^IG#kklA4Po2O0Gbt127oI@+I+t1<=C@Dg~B z5Q)YEDHW6PG=A0FG|TX>xl~Z}8JF|f9*YI9yGK^wERL!ONLyiq$BQHrvVXNxnQA)p zd+M(6+(1ZsEB83uFta)Oih#YRA$R6kFAH@*dtLrH zm5#%(LV%Ma{v?jTDa`-peW@Kei6rEN)#1S8u_mg%DwG~`Kp7;G12|iHAW!r<-#Rtw!`-Rra>WGXqkg2hUWs-FdG?wwQtd)OH zkQ&QqyE?cp#(%8q}yYGT3&8RSCG zJjeU`lvst;W3k%?h)eJTIe4@M${9^*ROtXyyuG0;8bJK6I6W80t7G*9Ezn07$vBb589v5fYzlyx1 zULcgn$XaM__cMD&aU#Y`p572z^z7$MUIJp#YBowpL4s=^*%zw_9;7Ffj=b&vx%s~^&|(BUjsy#yq2T#YZPj1<%&{>f3HqGcW*A#tgMFC$jVubB<6yPy1| z3X{3JPaG^$$+0bbZsJEr2NK;PsRA^uPuQ2z-Xe}aV8b-iW3r7LC7oTSTXt97g22D&~jDO^?>?<5`f&&%TJg@K@8KM#56oYRG+#fJNY_2=J_J3`I3t3B*tx zwm~>Uv-F4kQSpU^fnP(=RzZVtZXs|$ux4!1YfJdrulaUvamHmu`or0L6ctisr%=!H z7jn#v#G>U_@*oozmy4#!CBM0=185S35)Mx}1kI1y+3&(at&`ZgY0XU5k$Z}sZd78a z5%Co>Ll92A0cCeVJ+&lUqGEj~Cv&QOiQ-!gr)fSkWH z^7#;D>3kFYrs_lG6Alf5j+_OtNUGc6^TP-KbBRxpPm&K7XfG%ch$&DEP!MQ11RI{N zVy6X2YeI#%R-j6>ax(>HH@+CwZQV(tDNibs?2M7UYV4{)YqvOV6v#t@PilrxfDKiD zYKHKBbR1VCM0*KQ>u$otL2!n+mJlm94{rp!{!WiZs`J!IR@IPYhQ;;S?qFE{s}xIO zhW zV;@L3X>o%i&LfI@XRkv{@6}lT)sjBhq?(jori>UB^URD%-2J(9$2$e#B13Exl-z6a zny#{FA3^i?+Ou%lXA(P5`?p0#D^m8JVBs752}G5P!-gVW~X^f5teF%l^G{YJYhv7 zWPH?UacWG+giY+J$3Ca&o9VCyt{(kr-Ug@fUQcHn3l&Q#bf0WZQ3!hBV2BT4bt9ED z+MiGuW6~q2=rbT#_t_yx*s?>wmA<##?n5F-aG35F<0Snq&B1oGYe-0{V!z!Fi6B8w zvds}5=87X7+6cu=fU5uV2TBs%@Dq>QayHH5@12LhVD z1EI1m2Lk1tF9bCGXhN2qiGr;dI{W(_1UZm8C{<7!$aawJedV4Sy(d>V>o4Dl*F!QL zuD?is9~%0__QXuuQQX^dIV0YR#k;fH5dVnxy>keT{Rx4TcYl{O?e%BuhQl?ubVkFD z)ng$J>&}Mrsvqz2mGf(0EZSKkiud-ePTFfCM5^@wr)oS-gWcs>8usoktn~T*X3Lce z!RYu973cX@wa3$;*JC8k!_L<s`)r@bYVCbJztz#GnY2XldwX$E86T_WbU2o;pdWdNYmOa z_^2RN?LohZtfK5++>7-4sF6+gqy=?BT;xBqTwv2Uu+P*D)677!EFSUjqxPT*yx+1Q z+c9NHXY*ZVu)b59mD${Hhg@A|9p@raW9s*W^&LdN`B~FH;}k4~V59~TlE4%3fa|yY z9diJ-ht=0V@Dhrk#`ct`CDdWhY)`3h&BV5>Pu_yP&zT|3P|M`fHvww=e6VsJl515( zL(T%n1k2;6F0fnEiKR9!{hd9U+KJtjYFpuA0z;Z^STawnB`X5u*d`w!D6`!P{YJ2~ z7CXE!CN6>7-wdg-d_sGL|psYPGD(L<-&KZv4Hm$a$e=(l>e5kq7;?LML9q&1dw3F=~(&`oY#k}~||NqBfdVs}9J?8{MB^BSp| z3}9uJeH!)E&no8NO*;3)jIK8WORuoL#|+?s+5&wbIQZN5cJ&dqma>9w#_?tKGG-J;tLQ>YY9LlE3+}%91ilNXy}IsQa_2fw zPK&^ELe+Fqf9E&y4sfK z^i@{Eia*SB{V`)N%dewxn#koaMSFg~awp&hjN&iz$$c zg3aB|Xz~&D(Cx8_wq1;qO+~-dtfSHnH1pb=Crz_QQTWdqObSbiH92$yNxT(*IG6NIAN1ms-_Yie0MQ;#w3vw@V=D$St{um$D#2sLG`ts?M zH11zr>i@e5kbu$8f7oh8B=mRN?B@i)rh)J8sP3$8d<2hhL4w=NpP~fG#iGZ8MCUuN zo0Vdnj5+78j?70xf&3k+E^LfGJl(y22H0lIiV$ha9^$fR;>0t! ze1zyQFI#6jJ#$3ZFp%P`pZQc$fAAc|Z)2EEp{2vZJJ} zhm=jYmPoN^i~EgOUCyj__I*YAzO@jDh&=pOaFlc0?Ic(80{(%ysm?v}ZB-eoHSh3;Qq`?@}P2ioryT05J_u z9m1DGpBh8FmSI(OLK=_-Kx}C;4fiN!3KDV}h6x(x8P6 z1Sj+v$81<*#C$F|Pg5=dGrU~iF*K3GRp?ww^CLoGR)pg>TR&_-D&}IL4T`-Mj3 zi;lwlXTR%8q&3F=ijP(fYLHis^al9uUkRc^Yn+2oX`}ui~>;M=`WS|=Zxfk zqr~5dkRFi+NWrawo3HAbWoNSuv?}TNrArjWibxk^DY9n~+81LQHRgMQwWQ|b=kIZL z;&gU;+kPIgFB}hPX%oL5;69nKQDuJ{oI57uuPUw;R}To?xN!1I9S9!Lo4i1PT6mu; zmoZHtGn6sT7NT%XlO#@s;6aEPBdk$0z@W!1tVxz6AWlL)l`g=cK}5>;Zz8B=&CV?2 zPW!;WmdI}7e?_tH;Nc+Su*HspKwIjD%jup;{Ga|`y2*5;5EXV+Z-u{1bQ)6%`6%Mx6fh7*l!}h zaAdMM;4LEnl$g~(D-RjT;3og<7$E*CI;g3xGht%9Kzb^|y z(YA9R3;uM^YM`gVrzR&9yHyO$eCP|$jP3iD<4&Ez^ChsD8lm%~xb~M^Y(;UEVQmcJ zi=?}rjDQs2!n*uXH{>CRLeVLv!2*9AjZ$aMD#j&ko?p|HuHHxx_bq z>rgR}0`C@3;A(bN5-7_7X)e;1>*%voFx;1yt+o$E|2TpD`H z7z^utSGMv)ee?OQcqb$z53Sp$ z2XiU^M#J2t8!Zh~^Tks4&Ag*3+tg~803aXO9svLieuS2QGL!z8P3PMBI3JPdaNBTX zDSu1jN+XLtYY}IX6^TL=_nvjmdmR-W@T0l=xI}@gKPKsE4IXjO0g{0Jr91e)P^12T zAO6o8MHnYf#WUH+YWLZiq&ZMG4?#dsmhXOtjzvH>Nb-vquLLUz&Fd%LVKyuC?e1RC z2a*S;b9VMjor|xZ#%)!D1Z0a?NkH-w6dA0M6#cidR$9J$Hex>n0RtUSG`2OsQCsmp z=c$B}rU_kXPGXoa(i~17)}=uSsKrsC60pQ5bR9*AHir)^6XoU;9a{494*gl9V)6Nc zR`*2Eh|wy-7`lW$bl@~gO)#dv+DDaB_UIQY#p-GTMzjH;tqS-!YNZsG)?~{`k7V5s za^L29Sez*?DRwd7U-8|8+#gpU* z{>)$2w+N(WUs*+8n{DAnG(Siwq>iylX*P4)o|=2^wGk}f4`P=Zg=?0&{t&(HE$Z!M zqp~nesZ{bt`TjI^I{MK509cdD>aX+oFf;M#u%| zquiNut&X3|H=OYBpKEp|8`c)Kk30mHbBI@l>Z}uE;*Hs}7qf+dddKuyd7MKj3F46c zo{R8OnDpEkQWganOhjb2+@#Y5DN++5*9W5VtdfvcffG}4KM5?O|;FzTTF+E(1|KBc8? z2;}*ap(C^AYii3P#I`0mT8eoF9T8z_W|c75V7swTT#AB?n}QyX=Rn9N$wkLke|JtmmNbZfaGIW)g5mvhT`Ljf%E{L7 zN#hvgh^!&DpmUM6lL(5LrEJ5OqE?W8MJfZNOh^YFVvd@AH$pexpyt@4MsJE_=A0Wj zY6Fr0oe^}e_xCAV9Yb?r!7*L(5MswBe}#iw4DY3vECdPh#l4?xjV=%0y~*$6ci%an za@9r>r~-!O>E)b zX`lD9SWBhFMe2%@B^8jJAcIwM+S4i3KcFxgvB8u_vnzlg(YCu#V&Y04#n-ATdi>-*7&Mbn*i{HvQY_dH*O52Tobr^QoLMgqtZv(du1m^Jb z>W&r7OHM&H#B_`IsSmIQ<6ZNYmxh&>WZZ?M3)S{XE+_hhs|;Qa9mY&i=ZXmb3QuQn z9=aSkjI9#s$6+{+t5WHwG+HG#$P9mDI8U(q*3X9#Y`99eQyK1IbUOkuC~JfrO^>%j zrq!N(ta12BsY-T-IB7FDu_rZziQe&%Uuj{-w_@hDz6iS>Mq>x3orbjm=dzoOx5ApL z+l2WhjW=t+-x0E(dclTPn!06%Vn?zw)dJ{APS8gS#MFG@epa!_2|s#Tnl)ejNbK>< z+SLM!s_{;;+Ek0heaRSgopkPTTY91E#ZxI&#O-^QyMS9blr;0Ky4sc|)eQMpdU+gx zNh+JT@Xf2BCB-4f)lrO5aU?h;GN{=x*z-JjMReN!xU}L6xv^C)l>kjxiF6L*=Lg^z z(Zk!>FjPjXQDO&WRh~tGHurSq^`26_6HPCT{KIm;V#2!a4ObZ56r{T9PG7DyO*4$* zROCPqi}8u@mdu~X=0Vj})3~;j(jynS?kIfSts2^_m)<3FgE3(dD;1uGWkE;aSRCWb zVV4xHm!dnkvou|$n*#zcsP&k?dOmdM%-h&idVr^7vx{Abn^3ZkOLBAxx1pRj)BI2m zp_bJKRSP#+%2aGQjgebH4p5*8x{zw1tOK*Nkizl%=*Myf1wm!YNLKN6+*sv(1(z5Md;1d#_j=E;~L*qpyD~}v&(?lanKgL zbfZ1*G0;xy9B4!D6KO;58E8cxKvVPd?;{A4(3aekplTo57DL^*-lm$#>@!jIOz2x^ zbA@T|+@_>z@82e;Ex5u*&AjE`9MSH*oMQ>N)I;SUK3CotS>T9TE88|)yoN;gQPSndV7)i>m8x7JG09()Vev|xez%bPF>HlC$+ zmPnJ#I`j{{D)HJrT-dBJYVL5STi_%93u8fhSNG35_3;oI5EreX9ipzd8j0}9d66B{ zEsL1LJ57BOjrJ(sv9=9`TrFdcN9!0|CkcJ;IC~1{xxtb6A+`LqKG@>drprC+-S^mmOzeULg9bNr0pS3n z-J~|4xhlWZ1UziY%Hog1EYy6ZOGy_Q8{7_c#{lC1BAg-q#b7cz?0bJhIjT#V2pM@x z2Sc?*`gi(Zp3^j_6$M@*V7FJmLd z_;cV)f-Q3D3?MsC?_2L8jmQtN8Ruv;H$H9h>ESMXYT1+mspSF}iRoMGqj+S91Uzft zBO$=qAep6208xB-xmC=gj7#!KQ-MW_`4^F4J{uYT(l>L?qHqdeUJp z5h)4h)M3Cxh%;$DyImL(trNeKehboP-<)BJjzCsOHWd(lz?#%j5OL*2S_98=YKvEk z220DuQyVJ;^toLm_&oVlWi5@CK}<9niHI-@iysYAS&A^AJ#uTOrvwt_L^&8Zg3zXN z3Ue?u!DV3G{jl8VktGGVEFj1!E=VhAk!bPEkcYzoc!l;ux6pDQ>vE=j^&^v zWeLH>A+bCb@s89k%HQXJa*yWF*0aGzZJGKi-)M6e3Vb>!5vPHhF^;c_fnamWiD_L$ z%e%!TwGuJO8WG`=mDF=_Fhd4!mr>_hhRWket**`t6XPC#41U3NWX>C43aw7dSmT>U zdM16Ff={YbI8$!JpM!9J%Z@@-6o8r1ZIxggEm-?Z9m5eb^v0h$T4W7^wc|c$Z|c`~ zBtIr?lZ$(cRe)-E?S#r+0J`mX&8^)rCH2LHDUT5!>7|T$|3GPol-(}NaNn~4HqT}o z%_`U2F@XGTAJ(v+45n48-Ld)-s(3UhUd1|U(p7@Y`WXL$gL&SpWJLgZxVWVjS0#M= zgrU2DGIp-FMY+?UR{&py$SQbU-%+^Y%q})ht2rIF9ZV%Wb`<9)SlddE9pNOBtbwuU zO$mK&|4L*sn_USV9;*kr>+nxi@8)(jS_Au|0{|&;>ntAUSgz%>`%@G0 z*0pRrVX^gil|;W{){vhqC>tVn=MA;{;%w(+yZxaj2BYh`4PCUw8}uo$K=R~I?>cVev5?CxL|T+{5>dsj4H2a$@lp<*gx#o98Sxk$dG^CNhK8lE)-5dI z`Yk^+3b%Tai(*)+TZFmpYA!LJ?%ED!nN@IFI?wdIi+Jn;&YO!Vm(S!L^bKRaTq~4| z9yF=|bzl;^lRHJPZGODiul%s~T{IfK?r!?H%>QyLYJRv4 zm-|p{ESz1^;@WY68@-YE&}n04C^N1-B>r`q_LwrB{@}yr-UAT#(ZwVwdubokmz1N+ z0!voZX@T4d?LwXuxImHQ--5ClzCcbkaDpOfQq-*kHB6_>2YxPRi*v4Y2^GZ9%GXur znhQiL03!gto~H}BUY3PvBe&VFfil{+f=t!Df-<{}1BJ@qdMUl%F3|+cHPcVLRi}#?@FJ=73Lms#yJz(62M`)hi7pB3)vW>aR~0(o z%*_TF2G7tf{GebAo-x}-WDnbbEwUa$=mB(h3`A(LpdDyZ^k?xa3N8u*aGnv{(5)2) zzsH<#X)YQ8lf{sW!NooT{4_&6bu^xyOVFShXq^PT${)Tq^sj=#NqYp3pL^hpR)Z$! zJprrAp*P|X`cyF5NeKI!={*Ct0HHqLhc6{C>^yb)tzXl&8lXF3r~Gy3UPHGQ7|u5X z?>8l&H;f)}dm_=l_h06Pb6yz)6&jxIQJ?nM7@nHw+}F^)EG4S!R86@Ox6^E1268fe zX1}4`P4d}hJ@n{C+y3b8KkU7qEb)?W$Z_y0hk}1cV(_cEa%t`V4qmo2MkAH|J4>b`<;!te$0C4*@FU6@*%v z2=Q({wxpUjd@j`q>1LMBCjNw(VoT)K6Ow+rk5x@gTPsmWM~0+TXEj$Y+5zkq%f!y2 zH@w24jlQe2o_A0~psN?sag~9_#FEhEhxz~{T z2Ri5#`Z#f~k~MhX2vkfFf$gL*$5C?F%c*U8HZX1Wm6$x6120DYl^N$Mq+C}4qP}De zDZX%K_ZgOHoJ@90;NgU-hkBn)?N?YG8BVDTE!nNjPNKfu=WU)-%U^h_R(2(np);+J zVy|y>r5QoNfegds_r2lb=Gqykg@?OpX4CML5hhBM64$ z1tv7zjY<0!LB-?}=5wS?Ey@dJ+08Wf#5Owy`bHDX-QBVe8*S$}56^h-`T{=MPuSk& zb-IO1DY17&#pJ_F6J4{R$X95bv^Yy)qm;%=Di0a~t9WcNv7X_r3#;*F`nWQ?f>(lZ z94WjhzNUA&sULU(dGF8g1SC^0SsLMKz&q%)1jqD>$&hm+aud&q(Vx&6@sn%eOJu_g z!hvrf*IU$_24wCQ3`*MAshG&8DmdC2v(wYeaNt%B!#Dnd15;wb?NX!YWk}1BKNToy zTTSlmK-8aA4s)lGq8`hE$}6_7KUFY0F0x$mGBcM$by74-Ij$^r9)P!QS+M(x6FL3y zM;rnQLd?u(z!od7zwG1vb3U!Co|(Ofk+qS%9-x!-kBy}A=&|2p*MTyhF~GpQW$mm0 z?F**rKGQq`L`ZnP`?^^%$l5%{s7uvmdb=&)N7;V<-`xwKmEHP=gLT@%vw?#ZP9H{W zqbL&5gkfO6+ooxXcD%tF>6d~f*T#-xR!%EF!E}VYi;L@u2(zrgX;j?I?}0U~%6n+jaFSN} zmGRSBU)?Xc47nb0t3eXWdD{Tp3`Nn7mnDjHcEaI93cik6%q#Xng9?FVhXg0pHF$Mg z5K%qSZ-^~C^;L;NK7KC}#z8T7rsfaumZQ0%!fe9p#Up&Hk_21Z*(0IWGOH=v)KO@s z9ow63T1t*po5w)Am7p7U2T?(PTTh&~6N5$t@NTvK(!2d9l6L;%3xc5NpIxT%s6Taj z!umHl!T((+M^O{Jttv-@?QZbP>~JH$kS|DRizE;C_p2{^wO=!BE!#Ky05J`-)z0RFP=L=BEkqqSy!eejNNrU-qNd@Rv~hQ7sN;d40W*s64jC_ zrnunJB}rjnND9!l*is&q0`fX0E~ru63JA;<0qKPT^^fk54W&2GJAZ{p6jaK$v3%eG zzIophJQ3Turwv6+P?UA)E=ziHk|ZnAJ^M9&qQ{itu=fB-XR>KZf*m#J+Lk#rWKc8{ zDsw$VDN|wwQ5+rDj4?^VZ~s1OrmlF!d#m@NSu)Cj7BmOjbF^!Wl1`WG)`_gSjsk+Mag=;rD$l~B; zu=DMYhOJy?D-reoolyVM5-FGc+aUZNGc+{Mzp8tDLK1?R-C(dWHTRosO8K(}$ z#lYuX0D+krhW$%Y>myA1wc?mop4ai1zFR-9q1|zlZIHtjXBUEI**gV6n3p{B`$dgw zng;3cA!b+BD(($vAyS3cazjR)&Wda;!);V|eK3);rllS$IGm6lG9#hbW?k(YB+Hf_ znE-aS?$jJUON{8Er*2`)Sx9+PEP-3sI^})lLRrk1(8x`c2xi6F1R?Olm)|_uGP|`< z{+BZSb3Lnn`+53X!=yZBL>!nNIp|~7%)p{e>BI^jf~J`!>?Pp|GDpKN~u2QBA2v9#$IIT8!Z#y5BcnZrKy zbUAem9N_opm7$7* zV9+WK7AVBJmj+IGL;EKi9lq<>r|A>`x?SFp-^EDOQYbFO*(uDazz`o;dTmye2(1g6?IL)-JU6%*cGu14t=*(oUJRST~u+*?r z6nb2`nS?Yi^CiP?Mm!2J-#Q#RH`jg=x{!B0*w5dN2>VOWT3^w)yHyHSU~oA`y^6tL zI_DAhlV>D~{A-MlNP()baTQi&qwq-0AMZG`L0Tzu0RP}K!0$hw!ucl>rT*c+MAlNz z%vw-^PsrN91`wF{XS-WLOJ+tF`MdUVMXn-7cbqR2g}Isr<<-w(NMIV&CvjA%(F*Yw zV@K<=Y1Hla&;^q9?FjU~-!D6_TGyCFH@hbbF4zx_*tsX34kvUr7(P+DcH?1;*q|F4 zG%1;op+_idEe0O&q36+J^sliwgKN)zg+Fwly=Eup!lszPc^Gu^8#Ft$Zhvs)g~^G^ zj?2|zwd8Dh!8y%kfW$136KCSgb@gaqN^bLJ(Jq$n*T4+hCH6VHRH(yDPZI0P=bkW1LE3V<)@Jcn z?FE?bi2Y^b^|D7^3wBBW3I`TN`M1_-UEi{P)v{j)S@!1#~1#V!=PzaiGpk zlluLFFt{dV`*YaN&5}?Ssm^D<|2lXnd0U$fU@1ok;?llo7V92L<6@gx&R5*+L)6u}#|%NWcPp=;tBDtbmBjFlfILK~%Zt+f)H z;K{Nys`gf2tuoXY?lAkRF+f-WIvUw{9$gW&D*HXF)d~?53L{i$DNZ=M0FM?XM0MIF zZe#c!5|@>leSy;6I*m{j@%lbFAtFNE_|+^~sIbTYl~qrmhdPD~#T)o{>D}j|NL2+; zp81#ARWkoW(iI#H|J@(8qJ_c?V6sW#OEJEw+Yd6l$Q+Vd;#oBD&sN#yCh*vdJO2)L(+-lQz?w#d@D~Z)S$%U9&aDtxm@>I_6|j5*p@!nP)5pBH8-wSwOV?)rb}_`TE;YG$)Z!_#-m5Ej7FVJ+FGVx0@Nvh_(Q(-4 zpRLpb_T5kA5^-3K+a>fCz8+x`l(nrN3#nrl`FK5$?nt`y7|S?#5-r2?g9Tl%mGSj^ z;qlDM!bjaj6$hN9ck#fgDx_F~P8_UAihhA`~AD+|WB4!#WOAA=(JATB?^#S!U zfTtG(@qW)WmCH1at!wB2cVlq`9BxhWP`Sv@l2q9J^tqpP#$)iI3e{f6k1H?>-HGb0 zB@5R$jdL_f@_eUHCcN$J_2*WdBN2+()*erSx+>lDl;SP&GpQE#F0a?H_dxc?9^uC? zvim7}AS72Q5pFTU?JC~id_+4o_~Zikzy$lNvM>HWhY`PO&y$1^CC4)%e!83NqmF?INDCGOAb(m+W zq>Y+rWxJhd+4?vwXSHdIc&0Q$a7~=Mei1#JLia+0n#?#6g2>|IASOWv!m+Y!24c49 zK3?;9uA<%E*P2Hs${aj!&jpFjF_wNST8!wSOhQ5W{se&VTYHd(x&grmmN6C`6(Tju zeG{j#yYGc{-A^*0v7+v$HcZcN1oC)b!(bGs*NfG<7-YHw{E#ak7#bo-$QNF3td z;$(i;(^(E3J>BFi%p2G_HWd8=R_TPL%vtK0gd3@PF0c||ZS3OQ3_V@YFE(G6qx%i= zoIpXT%h~jl5>=Q&D4T44OUc>+m&8&4lu z_1Ir`_+x(X8wxnc(6Cr4o)sWS9dJ_q)9ZXM?UiUX*bDt!W*n*%vpWZ%oL{agv5r#@(|~JwYKr^N{ihp(KMF z9>*T46@a)*G&B_xaA zQ}fTrS4HGeq7~-DAx28NTS;h){ucCECmBeg4iNS0|Ba~3EPo*?*quITy|@rJ$QQrJ z6}G{_W=c+rO#$8#QvB?%laZmuEZN`Aj7&CHn?~DA&beK9I@WnVDOQO@m0{OGOec0D zZ83Khe|0>n;k{k_!Oq~wZq#K8|6EJhtQi!u>~dFg6DGWikVXZSm~(RVZMtBt^2B); ze%3h0WAun#8r=7TfP*XRC-&V77c@w2nq2xpK#$J~FrO_7;Y*hIB|PcJkW)aRx|#dv z#i6$KPNki3T`irs7_b;HIj{uSG#E56hF|KiL7BFNd)_Yx(Sn|*WNoXfHmytt0I5B) zjkhW|ci(X#;bDYeh>_IFlIWOsD~)q}l>FlIb0DuDGM;f0PDF=@`Rs&GR=>7YMj8oa zqseh1Y}H@GMk|wMd2;d9bN4@k6fj^RAuk(-m(#Os6qs>BxkM`p?Zz<^c2}3s{R)vt z{)5!pr`M7HJ5d?g{)$w2IA4@S3Y0r|DhM9y9X!I5iqkS*xVNH=fPnAccqvkr0)Xlg z(|sKd08OB#ht)rBhO&LQeAV`|1fn`nG64%9h2JOhC*CIw2=@mk_u@cv`3`4(9@=Aw zn{Uib(2QdNP^~7@46Oj5nyTDWu>wFfHRPPWaDWX51c2%#0M*%xo4=z93v3Ms@*7qE ze}(E1eMjz}s80VKRVs{sjp|W!`#63wECAKIz6WQoaR92&0{<3O{okmjga9f3J5(|L zK$R!qPgGZiIR$^CdIhp{kA8v#Kvh!KG?u=;f6+6w;EZfl=s!YLdg#tqhs}o%*V;dV=>V~@Y~#+WGOOPk0lH?7aE6)WRHpT zKL+WUvEhkI2dw;V^DhNmrEK@Xxt~uXxmb*ULTgE@(cuR1oQ2{hX6M~&?c_MGhjaPO z7;VYla^Z?DSEo4l{KWQq)^yBd_v$~QyVMa(1fPxG>GBEo)s15;xkYl#k$B)iSH%3>l1{ZbFz!F4GF@SkqUyaStOAwrK749nfTt<6*hY8 zambs9$i~gmUvkl4t4hdj3Cu|eR+Y3t&76RSNfit^ku0V4C~BC6vIR&MlXYLL66yk z2I*3V%RVTntOxzFjv9cwU`a;q)L?9qt4PhrTa1R6feh`KmJO6(r39C?z|z zP?_qlnLABdcKF&4!N^A5ZNPTPLp3l0@P;AY(@I1cnkDXAo1T#+l5R{DT$H!?o=Xg#4>F| zVFc>JlG4R4C)38|=x}9iXk;-*t6F>vM%RJnJ}2+!{(M^?J{#PmuO@L@QYA$wOHEWN zvn_uF{e3PXP!sK!25<@Um!Hu8`4JZ&;lDZ*{XXKN|8XcXdI)O+;dB1~c>BiqI`nPZ zHfU@#R%6??ZQE?@G`7vgw$)gTZQFK}yp^84&psFL+;`u7@2ubYu)ZW;=9n6D%=!Pu zcQ^_u8Q{N$3WVFZ$R|9fwTKRk`y|H&0r4*3XRJl%Go#@EHrd;L9!oi=KgX@K`C!gU zD5@fZ3tpo_0Dly?K@k3QLx%-s*{xaZA+5%UUL5U~GoBwi(`+$!oOHTCz^a2vEyS}C zlb4~qY{p*AH}QbPrF-UM#~#{EvUwTY@|7OzD++`#TW;WfiCu3-3|^CTCwB#cL)-=S z?jb+>M<^}@F^&*a6LoQxN&Y4N{_fC#GSFfE$c+ZKtfG;?l)Y=9m`BYYpXOE1oKvCF z-wbJ$y9;^BC(l2}0MS($f4BS+<%rqv4T#w)zKSo}?9kL#pJjq4cehpktC;N5?B0rV zsja`#D0A3BMyQ>P2Fc(NrYu_;{(73e#U~BiWrlb+!_ZYSC+)pD&j>Kl<9n#5I)koI z=?YW-;bxh4Q=Z&p!@ZZdDE|Ue{#6S7Y08Sy#8sO2`WEz)pIbGM0)BR5K<9v!Q#8VA zLI&MMHtuX(^aR|2h!8^>LOh^bu{GxYai0E2ef@g*^yz!3r?12A!#6y4BA{$*@UiY9 z3EUpJ&i;|Ol5w)IegPDD9fxMc*cRv8>#$*CON4Z4Kp}*AAv&d;dpNhcfLHVa$eERZ zoGH8+ci}3?#fAgj6#8BW^<2-8Zk@@(Ym(^VDnl%ZJycvd;+Ojb{3y;#5e#FX%1<-J zx578j8{(hyHR>X6DqkTXuQe`sw;A7}JOR4q_@{ z8_f440o=a@pA{;X+7nvjBPN4P33nkS2Aq$;P?HGq-CHDXWIcSK&E>i;daM`c7q%d(5k?UE93^Z3h=%6o~lHqB%7^2=L711 zP@f87jS;EF>f)_)0_p<71Bjs1pb|mTHX6PH{4y2bmsl~20KZhxIB`CrI92sx* z+;ti}P<=p39pZy6g~bAPE#n~7kHDLrm;?!M`tB{9doBhjXfIXLPS2G$KMbc@p-yt3 zY)3XkM$fW*_n;T5VCd>cj^t)8By}1DSw^yKA2DskxR0JY-@iTV^)<@S>;g|Z`R$ij z5~QO4B3u4L-SanF#_b)H{25}qzLQYUq9D3yfP1VMgP~9UAB5NvRy zzzxpumJ>QGP>&I={Ab@wQ_dOuYa|FjxudVgRl)txu)1vUcu0M45`Mm{!e_T zG7eGhT+|D+kXd;&1bfAox_AzRY)I*9nS~-Twn4EQ>>r@Ovo(?uq+|Yb>+O#tcA$VGc76B2EX2fs9d1mPA_yR;aNf>j@BS)7z=lt!))$?;b|E#ZU9&ZpHiTDvTRCHB z9A|~$e-m?X71d(Hfo+BaeUG*Fv!pxHc;M6qRd5s_<*Xhej*bLUfI2pAND2$!pNbkF zoaFfdc>(bN7d3-Q41n%(d}LOxQJS9HXCtUR^QfPOP;nP>uM!8N5zLE+Xq#cdSSKQlg6aXe6K&MapRgD%)SIr`s??zJaJ>KTs z!jfi4#+<&#+w!DQGRS|7w}g(!Z0$=ix?(}eEZu!0zYTj9OLFqwo)G@i-1&c@&i;>; zthJ5xAMelP%LCR*`Ov(CM`x9WfAE|jf}~=98dugm;tQsR`u3hXV;ohSjDZ0Sr}Urk zR$g`qz#^o$x~}i1+#9U%Xs>^$vlWlF(&U8SsT9PUf#G8a7rvnj2WB>?Pz1!=R4FA< zF1jswF*n?2FPdf~%?hYQePlr9^lIF9NbkineG9>1a2{dJc+Z?Jf?8~8l7D1QdnGJ8 z6LRnhg{pB45I;r_5!aSzuTK7P#VMKGzLZ4BZXb<7^+C0Ts^~^tHB$H$<}>-(Mdlt4 zZTuRnk@=ma;}>a@fa@%1eIk#iY0MWdbaZ%NjZY=ap$iRqn5261!k`==%@vWvq;Nnl zOf5g&O_`wMN$qtHX|gcmP#e6K0uoiHB%;0Uqi+9g%Qmtd)Y9{WMixDm4R)W^MQtjQ zDHE?0iS%$<8pMLVwFaRAmHTgUClEd>`F};~G;;W>FOeGtTq8v0GMJrNP+yOFYM?Hm z4kWKA;kSZ9aYTV{36IOp>&-JP;Q#CuU+M$O(;08wzl`R3f(gho-@^AszGV|^W2i&BpWV_DpJwbZHAVT#)r)0A#zDaRQUjJR zTuDvqHLJyyHQ}*dXSG@zQjR((mvJoI8=#SkAN*zvo#O14ApP9uH}UI*_Rk`RCyW41 zXV78|_Se!~#B|uMH7a;b=$^*BTy2G0wT**)mB7iZvhI9&hG<$^bKQ~7rjI?mQ=K4u z)ZR>kEB9rg>^r$#TDS-v^*qKI_j)e_eX2W~U|PoNj5@|-5^F`$B?+* z1yXR6e7J-8UIf3b(ryF-tl#@j9r=IG^9ug9{$DMP+~OYqs57%zO=_WmD~A*)EtFNx@ z_$8JrZ`C0fjN4%&=bUjvG<6}RDNDZ0v9uo)S&^eAIcg(?oKV$dxfUx-6qv8_FiNSR z5Gdbe<=M7UP0R#^Iw6&Qop*${ zD`w+(?k2Hm4}@@h0XF9y9xiD8rdjpeuJp8dl?0O>5oV z>mNc`Ael#NMi7CHgf5A6lZ29j=eR{?@UwynL{NQp0lk=hZHS19E{VC~W0r@QZ`4-`IweMnQq58j7L0vX~Ou;2OE6^J`?n6Q4O znzqQ_l3w$DHJ-bi&5=6q`<$3rX_G<-x$mv@X?L+ZC;Uy(dmK=Nw|trP{Hn(=>#f|N zHTTu(kYehLWs0e`61{M=v%}7u^Lv9S3x?(=SU}3=8c8ho(U1z#?Et$wBJMJy@sOCC zv54f{o4>h^a{pT(P}su^#uP<6V2EY}9K%ExMJn4FZ+(15oUf2}YjvO3fXqS)Rt@5* zdNnX4{QA7_yLw(e1@|5bVk0HiM^&zCgTI-gP0^O=3HB60AQ=$TC)39CHHBamNJ8tz z;>jr+`koXQhLg26z-z+q{Mbo-jD|_1Edsd_nZXUS*Mn}HxLbJSH9kaUhNc8V_l zk%(_BFycTfON75CFtXYnN=cqBtVtEGuw_ix5zhE@o7^?S@E!_SL&Ts%|79TftBsOd zeh&rd^|Lc|^=s$Oo)@3Ol=+Gv{{(?`Qfw?SQ7g*RhR7pw)doNTwq;%BQcfVHyU>%F zV(+wf__&GC$*c^nZ*e>i;t3YHKlsI$il=A-vtzTGxHbSV8sMv?_EdKwe@_Lq9!}nk zXi6Yy8A|~Qmo9h*V%es<W>n6Bd>F&A2XXGU(xo zs8Z`OlD_qjnkd568hzPNUd3lU@ojIBvR#8&k2ShYMT&YfdigaCSb3rNT08?F{PaI< zeR6}jL8pZ#guX#4E7Nkix@W3Lmu6pXKBfv7hY&2=##MczqepChw(lCdSAGo|)?qdk z9mqf5D}5xp@%c9(hy{S4yD5aRK+=#_44#IRp6_Typ&waO1DqOsO6RMT*Wf1!G)17N zFGuGg01&u~79myrnDkYHq+8{$nc**)p%xekOg6(;AovY}Mj=!b=`RJS;(&Y*t0Ti8%R1a)6Yr>RRP~F@IF?&2`90 zZMiZ3swv{40j=l1RU6x@0&({B(k0YKmd0D=7< zAov6WjUEgb0}?_*Bkf#$ZvW*OVxdFQzTEonK=5MUwRW$3`5Oche}DiQ0D@WC0zJ(h zf546^acnYkOm}<;qp_4BtpKg6yrHjRpF)59KZ2liko-LzzzH^$m2eTxKr8@WAS(+@ zJ|<8*B~bFD5}@=?J||Eh!cXL5L5j|72w;Rke!y}u)YtrM!?e+`27 z7ft`0kC^_u>Rwv@&#A+E_x(P@2Nd>yo8c#QnNZN9Aa;X&{@)Os5PT^Bf^(g%hi$!i z>^DozE)6j?J1p`Ck5Uvc8O@i2R^u)t9r~X;69eYT($!}_t8OQ!lYSXMYBjh)=S&8(U+N{qoCeh6{VQ-c~46D^% z|IKU${=sZkJVh7v1*&ZihvE$AQnXa%KxmG6{x0d=V?sA10g)W?pQdxM{|EN_tDyTshC%#y z6H5BNbJUi9+R*MlAvWRPiA{hEBl$Yx*yCNtTeRViC)eUaD5?deQ>5WLjCV3!sJm55 zcAbau^=J2?Drga$zD+iWnU?-jW-*%LP$krn%CB<3MVJLHHmwUP z7mmD)w8)nV{w`9JnF~%Ph-MB{5Ei-x6BJ)%tRJOrFpXY}Qm z>Z*;=HM(k|fLF0_^c~e0T0PVd4XYE*>t~faT5pM>-V|x&^hLdibFcTSKI!XD^L7b; z(qOg(Ry$c3G)TicG_~>79G=JRL3ac2n$d4eMiz8r>G}e3qxer1LM}z+_IY)mkcaIJ zTNqBp^en1bM1DvZvnK1kIr4E#xrF;mXU$GU0--uuu^}}@zy8)_bIGYcy%Q*i|Nkxd z_oD3YmYn><86|zYzH66tD&ymO*y8_I)Bw0JwSO~ifcQObSZ53RyEj5cf+ObFiulgd z-x#_`*q(uL-R(qiac@>Yg85$R(nEUAC2(c)_oY8C_3bKg)qwvTUP(A{C6F!CYh04f zLsEQWy>DLL_l*F0Q*#pP)MP@36+#pJt*8my=4JgNW{c$KDUWa3zsaH3cs7H9bKhEk z#34=DrD4Uz9||HAtDit1#78y-;+!9(s--+it%C}ZVzcXRHM@H*ZPm365MKze>GH%) zKH95(q^q+2u8Z#n1C{uVvVn4^S}eM*o`tXC@GwdbPBY)1VDK%KK0^j_Ky}*CKKKU( z!kNV}GFkb@zANaIG2~?iRrQmR=<{f@yMhJJjA>X#9D?j=llr@6}L&%)r@WyBM0%s9a_0|;Vt;1wStaRqkbsoN zUZrL~gtt0y)tn)Pc;iQ(F4SMQ*&z|%>{)#fn2r;h@p6I7C#-h$pEi5 z{Ps%0rpj`K-(JaJ$gW^Hu4`7!An-$=U?ENa-cg!k!X@~(SBCyuuS~9bIQZ9?@~;Bv zA7pNSOOfwhNkUPjBnpnJ31F!E`IP^|uz~;gu)%puZ_K&k`ttD(_Is#-ui@jb7(CC@ z$IKR@Ch%@>3zO& z2mOH%BA3=&5z&}DQMod?JTg+Dz>SJu@TJ44i@U?IcwyxpmE{djtHm^~zY2Xrt^!X? z=-Isi;u&DfPobza3w65agL=#SA2mS8G~5A1=8spjyNLvOQQz)Lvgy7&TVF>h=AeVL z;0s<26HyBoQl-5?CzFMgo+*9jNdBaeDxRLTV_&DDOK`Ca?!tT&P|CxlD`H!^>)+$t zU&@ln|8;!*p9RL3T!(JJel@l(X32El2x`%P!gbpk|D ze~kk3oEFhtjMrTEUH4v+f8UNo!9wUAE{p;hqSy@G2=sCD%Hno4NRmpX0uEBxlM((V z;+`{Zga@c}thpJ)v_taob_XeLQEt(|mZy zb`V&H_9yx*CkNW|3I>GlG5ARwWS17Q*K&10sk~Xs$nl{jL9yLk?z~y4ImUattNOQg z7hxsw{L8M!Y=);A0lm$HGgxWqi?UV7bryL4H`@c7fSG5tUS7r>CS=LHYCV8}rYkW7 zix~pZ(J>8g`RnZGVvdG*O~jqgM;UJl3|IzQLkD~_;Q>vRWr(rnV94XfqRxd2nO%y* zW6;giDf%{{tMhE9yqox2+IV0wq{71hVnNPwogYOJA`9IB^eE+i==x^m~ zdD61|vLIUDI3mfhsx{*GmDoB)S@G07C2A>*)CNY!sV!o%{sJ;86`?hD$Vf{1jlb+%=>M_t#-*obgL%S7fIEPo9OnUsAy}9PS9FPM?wu;mAI_V(S#_*D~6q=l~Np0(lEIbJq%Gu*zTJ3K8rJ7l&Z0uR!puln( zBn^fY-4@ACRb6)v0yS2R(+yHu=pA`P0#)o3D=Z;2gW)|r#C3_pJqk=!neA&W)AHN0 zjvbKe)05Uq>yd>dQi^XCtISn6@EN!~3lzj_?Xl%kQ_g3&Mx~{oD1{Xuzhc`BIU%in zMCTcvH1b6jNrJd?r>c>hBQLGbFK!n5wmYcrG^9MaU(hCfQk^PEa;K_Q4D4Q3FcZS1 ztN@w$O=2>>!UR-aj>wl$MCDQeON~g>#xMb|KISNy-kCy;8R?|*kwmW4MS0R0JP9UA z_OZ?5?Zv2`WAYK2@$LWC&^`7FBBq; zcpD)dDIFmlrJdkbQSUI~0HH9Uc8rVCR#UG9A_<{(5?TT)867cg8%Bc=+neBQ*^qB% z%q(+c@acehBUt8O651+@;B*(&1K@Nd?{h^ERH{tWnl+p7PjVab!ow0@pPPg2dm9#4 z9g6w0H4Rt=XZNrOqqSp^lo-o2^f#MH_wqt5ozMme*Q!f8oQD=AgOb>T?ps3Q3nxT6 z!&tN+(VWlCgqhu~VxlXe1d)z!`=i>gOfKU*D_3xhNXflH5M^6&AafTn-VdrhW**=9 z2A*%u$zTbhO&=Uo@KPF@1>}W#98tXQaA|Xb?ox(ars2);6$%5wQ&8zu)Cch#=cT0E z%oMkzY7uNO0$pkk?oVk}+TBBK+SGXKWf5lh10euJsVbVA)y08uRLn$+B z$G$vkJD_a>m36;4Tn^WN>qH%gwMQ{9^sw~Unh_|<^5dqv!5h~0ib4v%F!(g!Eu?34 z@;N!Gv*Qcr;z6p5|0wm0J~zx3i1g(`g!9p)O3{u;mcdPiY~3YEpl8g&d2$=mrjARn z$M<`rC*Qy~<dh-hMTqQiEQc8snl=!Mq4Bn?&$8C_vsK|WHsCj5%@2>X>O z8FxQqu><@y;Md3Yx8F59^CpuTCSYSk8t!kZc))5o;Df2B_ufGN{lftG_228JO>FEP zX#V%xRsa1pl;8i5UqDFU&jX^eU(KBK9E<=9(SHkcqv{YIinFskCiHPEuCCGW;OxPO zYCVK{;2a99akrGU6$c939UOy)EiF|hn2gX`{UZ5494lj|m!2*JOTiqu!jQM#I^r4NZPswkquT)89oU#hQK4F?KTD zmTGO>74w<;O=Jgm>*6ztJ`K*bQc-qHsc$K$7w3f-UcxYNK?^Uk`l@;saiDqZAi()8 zm>jIFP7^<(?qWj?66YJ{Xf%E9d_KBJ>xEq}EWSA*bKYzzc}ev;;OVWP&L+Xeu0rNX zyBuQ&`BZLAs?r)S zRJXly9S>>i5bpBRTNk!TI6eAO%UEn%S0c)Lc75>u!Z-V69SK}$7M7`O zu{CG~6ySz=2&KSnf$WBgg;DrLKHcSLlfo)jtsAoTe5wia3tv(DYj--m`9HP;U`iAm0S+TDsY9MDgM&Wq&D|)3;B!9v1_)*`*g6)5)ef{tf~CQ(7vV6Xl%s`(?&V1A1ipa zl@>2Hvy_@gEtmpDIFr{IUax@7hVaWC{9ZD{nKr9)F-6MQ zl*}rVFRzHAy~g!$yUo=HI8tF`&^1VBkrZ0Bi+gqsJvll zo+inZc!Q~3&Ym47x7`fwKB1t7VUck#wZ(af6}_zad>6Le7L1i*Qc>somc|l_+hEEe z5hcajM>9Vt7WuHM2dUtrSSnYEuZzkYH0@`!;_WPKuu8a^7?%Lfd8=q0gsYb@Pm?1(T7%$CS{*hpc@F=j1T9i8(ctb zDn9oRw(TFzKW_j7t>ATnfi}tcq=7s{f51iE_@bD=Vw7k!T%>40U)o`+?>2pqfKsi* zva6kHs$Q!MqrIi~;|ji&7~@>}J%JSkgvL3Qu#AOhdV3l{bdjaD}i6S>NNHLW~_=+c&y< zTY3zps7BV3KU{U>wYV#~tQ1A?>Z?bW9JOR3no!YXc} zphv+zrMinFlX+ys$3LDk5e$7Z4RRxoP z`3Uroa+x7SW7)0v)l;}^7-5CX?4adg-)N0o0mf%0ZFPHQ zCyBY%EGnIyGPi0q7+PP4qeZQR!n~pBnxBlK*YeerIu!C9>@hd7ocTx{?lGnZ&TsgZt=m?KCJ6$wC#P`s+reK^)rog_M+EG-s z9O9c4U5DJGNl~T~{3@66TwwpJ;d1Y>1y)Rft%Gw7>*u$a6=SEB9;iA~>eBEMk}P?V zH{4T_wI9njckK+#SUi~Cd)`wIoLlL4w(W~JuefJs4Q?vFGMxd4lD?G^wq%@Nx*Q$? zLC$?_#4qR`5le3$`o-(py2%D%+IO?& zzfH;=2ZXf=>9=(WTFh6xZ(y&aUAxc{n=*(i(3PT9sIMcG-g+S_M9Cj3#j1StU<9as zX#tV^67VGt?7NVGAnxfPR0VrW)W!J~#3E{o&_?|Ya}7@k98uGEkSh#?Nwt%!6vQ1( ze1f=(p3)GWP&L5m423Q_Yu+_)lxAzqFpx~>!ZlqDB*@MUA-xwePy)SxUeX}Bi#9B~27GMG5`jB_IxwGL zCCncENRZXXUa$%7Sg0w>{eIgBS|#k_!yWAj{3c(Sevz?iZ&k7$dXISEEdgh^bYML+ z6?8c?OUMQIU8pVmJRM`$1-d3_ckY3ntdI+|3Z0;k3)W{^O^WV)+c0n$U6>wg1lUbP zgvbr)K)B!wLMK{Hl5ROmT~iYm5&{3sRRXLY;Xow_E zH!MPavQt8=4-}jrI)Rm)Nu98tyUS%^P0`^#pgs`3ChOA_V`+n`vhm=8;KlCu++o z^_Sd=#MR208??>towUL0oq-ESqcc_yN9@z3zQCIoyY{ywu7amhgNJMOwA#?(nKyK* z-6~lAxE|D=EZSeeoN_9nh;YvAkYF1z(!{Tf#$=Idg1HoOjkvh`lTql}!J98H56OG= z1cg06jputW8Vxh2)uy95h}{*OwDlJr+w}Gs-cUHWU@5S9{EU(b2p|Iq+S6nOzhL?? z6`T5dO4Hso`;4{vEd8Y1&uHkW3kD8NR_V+!OEwZ55mIBk*{)>79|i%Upz?yNUQdT_ zY|0L{CRIgM5Y3F-eB4fy_uo5Wxaj3()xjQcfqu3E(=D5%YJ&)_b6u>=Byp&?RVI32t3P4{(@A@jQN zzbOuW6TI-Xe&tgg*SiG{JSWN#Rk;->C(e@S+p!nWzj}rqCsrIXyqv%1t40L|%hp=& zyl(rb-EB^(Hw`>%3}PKN=qVL{@;j9!#lDmIVq;(#k@hy)i$-LL`Q3Qx>nHi73E zVi3cjBPQseZi+u&C~O&(i$LOmiT#!-Abdb0E}eun4QkZTONi3_MEG=g_gQ|qKieMl zNSs1?DJ@+IbPVmsOjHM!Pi_V<{4u9*Bdq`rH`j+CcCxvs`|XsyBYFvF8Eo@@0mkNg z==5bUm=z9~ef{gPk3u$EVr0al98JxF4e5Bu6=w>kz{_f zA#9Nw15cOBQpu_9{QKUFk=}UN0~{9S4&5fj%}kNr;ziS`ek^^L2m*M4S?2?|b82ek zJxfvRLz*dpjai@rAFz(oM;LLYsmEv4;P};I#p7$s2oI6i$8BO{9-=!WVaw{!Ts-|`8&n|ukA}f#gFOq8%H-n_Ufz8$f<|dQDlRSM$ z;jm-J@=e^#>f^J3Fl>5^VI|`N3B$Y^shA13uQPUIxPT}n|2i)*^GafJCeIb4rw!UP zQp5<=)J=v`eC}K30+DA18t1Oz=lwl`2$Dc=iK1*cNd*`|{Reg5ZDyCQjbweo zhs&`V{;6tj9&m@JIUu)tB#Nn^?5?(S)x{FPxs;6^uPPKyZAT1gW`+1RQQ{wHJwbOd z3I-4K5!#Vzkay@maab59NlLTLYBs0k3yGbx6p%VG5!0QCXuh^@h6DiH@^Eq7GbTXT zaZYF|DZ}@;n`OAOs3hPsoeWG(p>d}Z4qPZac~SjJFfK|H`l+_+lKLuzWnlM9ouS%0 z;k?#Z4#HFaSk4`a)1uAy8XB|6p(kp3T_!#7K#Bm*Gb!U?3Y^RLrGVJ`79*HF@DLzHxP8 zqEiJ{Q;ZU6{Atm$>MhBMQv@825@Jbtr^m-v+S8uv0HxiOy|HlEX$%!fG0)BVspb8O z{a8DH*5iE;^#@aUV4QeYJa^f{E=jl&&g4_R2rwF?WbKUm`B_yi^MW)JadUG&;xkm+ z*_ks7MACAIGmEY2)_!w|%E(@V{(2w<;8UwK-!$jbg(`-HHR0_&UPqB5UPi={wSrry z!O?G{rx_e773Qkccny%GtxG_s<=7ml92{vZv7Hr0rAd|f`Rzaos!AysrxC{p+q$@B za!3$VsC!~sD$fF!AYzLAmkWAQEI?#0Rf(8Ryi0j~^9Hf{S-K83Y=cdA| z=5h;i`eCJD8gW_k0)oF!WiAUm)sGk!qt>t*Qq5t8n58ipaGWx5RG~`LV=9<4lF8~h z`nFd$Re;VArm(6^-!^HNTV%7QpoZKklTgB~cH+p_eF>}x3@`8!`0`rJ<<=JUjOjA$ zz}=o&on08@;0U^9$Cb`AZ8c8H8E2ms6xdMr_2|-J;lPz!;Fk+6B%bzMQe%4;t8#1xKl~c>mlvnmM7eYCJib zS-|J44$6pc%r)a&=(_yj-FLMMbHe1FqxZI?^bG9g-5nfvm##X_$K*=OtDR4c-D}O1 znsYWHaHKbj8}jUTIx51i-W}X)0JJtzhLX{xN?_!GfjsAMVlP}#Ul`ujXKqhd((m^2 ztteHpq3^BrbH$T-Bl2UEl1LKM=FLH(&pP@ZeglC7uTNH zF4YYQOax_`k+j?h)(wl0n;)IPvC&VVJqLNHeA1HVmmM^zLe{z1*FD}lOL}3Gp;(6p zNm_ceJys+&Jsnxq6*X1wGI!%8rZkb_*})O+Jboyk3};>WnFVd}DXQE#EVgUNtnr2PxQs0U5lV))fxjc!m2bKBFLFmb%roIf*WcgT2|KJZjl zlnZ(4*UnlG0(pX=p*ODFaZI!hl%3uc3+UJVgd`OeDPhH*!Gc2tv#mv*++}%_`t8R2 z$}MZ|1nsY|?pU-zWItJJ*&|>OjGZ6{GmgF$DF^ErR&UblX}KdSI1173v^90du(zfV z+Y{+l7&;MFO~njVNHk-Im)QN-YNFg)x(pV9z{zq_Ou-Vcm~)Jqp^h^^A`z(}%Mt1s zm5Vq}zYJKccXuMl6csv@Y7D`VGL&GB>5FinI(C(54JB-En>n!li4+>I^(#3!ai&bg zU~eb~?eZ69QF>srbMip2$e<3FrQerYNNm;S;Iya?T1THCoKuyNw;1KpO&g|8RMc_Hg7s_d4 z(txTM&86|++ZUQs)|i$b;TX-+O0U+<(M{8dp5U${%B^Qt`l7I(1C(=>WnIv@WCyfD z`RbtqzguHRhAp3+*g+T76YIHEUdzdN$q)se28k$5(4&luEPo&-Bw1?SzisEHl(Jv- z1Q-gveWIiqWO>RqDz#gf5*(*mQY!UJ-G6kTKP_^u$(=y45T1S5iL~RI)ROpm+)pyx zVKXm9${6RV!ivU`8cGp4o;?AIUEr&1XG^Lf?P%kf9c(+oBZ43iHf7{#MD*1=!v2Lq z6Qwcy82{L|i5yuj#Yx({RS1Qyp~_;#!$JHdN2t>I<}A;A@5g70X@hOO#>1)V&lgZM zg`;us8cjzKmi8Cxy+Wg#&)=IDb?pl2E?J;!EJd;{oIzICh7x{Ajq!`*@yXR!l!EhZ zb5W#EFH%Z3B7bqax|fa_&wdC)h3`Aqej(19_kzOt8uQHgYwOe=v0>7QgIHxFtociQ zj=WKut%G=OwHv?C3L}lCLGa})Wzs=0BzJ) z?b3Rv^6h&F_I1;gwPotTM)in4q$XGOEkrKs8$d2IXo}oq4$OUM@>TcX=R?X=wk67x zs|wI#<1W_)=Fa_&{+8PrG)}${{APrmrDDtQ|rF8M&Ahg9EBflSb8XsFxAkb7I0kU$T_n6Ffz_7_&DPuQT>7g}eYQJc?@6Rmv;l)LgDuzSv3Z{eW5DSI?7R02B^ zHj!U@FH8bEXn$pFW*ND_z2a{(@zV~{Yf}`^#t%2Cj6~aI`Gn7hiKE}!pL@||=p}@+ z1b+%dp~va82jSPhpjD)86YLjw`24L%Ke>lCO0PXUsLveT23b3>nSPB>+=!E4g?^0^ zb&!=<+z{)t5&asuGJRRXWl{3@#9)LcnDQ;mQ3~YW?n)Hb4dLm9l8TJDxd#-$qy|faup~jE7kV9QIvq z(=X^|=w=uwX$JiC$^DY_tl6Z)h=8b%8>@@IH9bPi2|(cVwq8=l zZy~k;)#CNGew6H5y~)O6evY4*!PzZi(h#?(&G#s9q6Pt-OA5Z$Vr+>$D3sOM$3$-R zNT|5hPpdrh%QCuAJ>Wt8^lr0*nW5pL*3fuL}mSXiB$R>!*5GIP}CD!MYgSGwO7?Sg&C8X-J2 zm53U}b;!sz-sGV`W)wSemg*KoxX0!n|c4!Z`Utra-$E7Llz^0bd z>~+u?3=T$&t6LtjHEP}awJt6W$xP%zP+<^A(V5Sd za@Qxa<%6G@NY8$%dfNxej|ifpuy3%1#wc3MjZWg*^$2lJIblp=YV|ZVw#s85bMT0J zan2l+6unjzPFm@k4Pg|EU$xMrcUo4axmARMD#^R-jkm*(%87dN|Ut&tC$ zZPtmxLS%dmXqZh!4Z%miM7(Da*CwOFF~4!)T5$!&)lL~dM(+n+rLJ_BZCg1?kROMg z(n~)a8@fom6r(-wnUh=4dZu)_!RrC`+mhO=hKx60o(*sxQOJgxciM%_TplJ$$WIY!Sv>8_k~0;Z;U0G4iuh_xO6bVlRcO11wg$41J(Xpx=ptX3GTOt{@$RMUnbPsmVqWu)-Vg{6?s zTY|cF`D?M%KvQN^41G?Xm+Xp|l@QbPI$Jo>YL83VbNT{5odNW=3yXW3jqJ*d8-~0= zF>9-XXxl5L)h#r4#CR%oT6YwT`?8j8TFNs2=2eYw(!67K&J!W3s@}F^f~;E$&4gt# zw}5`-{OSR@+I9uO3khwZwRXa@8x2Eqw~}=v3QOP5DEdS3O7tK%*~>Wzv% z8x>zuH6(RamX<*z_FbzkOebgB*c2$5_^-vlbkd^WQu6=+(BUq7Vpe`hb!TZy^AmS_Qd=skQq z;w6_0_NLZDG*zcX(s*%iTW%yWwp7>{7L>?OuA64aEPK{P3?6c|GPT{^rC+~F#3mNU&TygSs30+NmR%`)h|zM`U{bYL8M?bv6VbOV2+dy ze-emAbV$^@6^u5NV2F7CM5%1YkN>oDlGh&v;}(qo9)+7(B*wf4M?p_Zez z=Jn~hQ0Jq=R^z7`7F{!7AfP$MW8rJFL~~}z!bSa5bOwjC2&f{cIxHkvTvIl5WZO&a z)rkyGAZiGq!22MuNSrec#7JnUCdG&WNeO3ZDW>D?5!)Mx47E|i@5G2Bco=F75oX40 z*?CN(SJOqsn2|pHCk}*Nj06V4k}L}!7?ShZDa{Y3Z{Vw11hcThjzM%{6ga@tej1ow zDT+|eR&9gigN6pIrYLSV`0Q58?-^AiO0)H+|Iic%!Z1yZ@F0SDuD?+9wQWI?2~hkf zA@*5`$}x0s{-Sz7LK}+p$V^YrXAn31oKgjA|A*8vo5$(cSmd&^gM))Scgw2DvfGI4 zz?Nl)QS51nn4`Lqg93!e)3`b1=0O3UYtvGbd2hU|X8q9PQk!vawZj)w$)ig^QwS{}MWlL%3Z9#HwbDu~pvB4aI22(?iGzt|Il5 zxCyzJyye{AJs`0ZqWdAW`=!adQser~dN>72l&3?<42-8H;fk7C{z2!01>a1YKNACft`pCb^wo1S0T~{cUg%K|3~J zfcwF_`6_?%8MkQAwxfitKxn@l3Ve<~#^I(3QPE17zoykV_I08n_Xc_5rLw@GQ0jn= z-O&c;YoS<+(F*zMrh$$wmV*lanRsMZWlNJ>g~n*wI%3z@rG&8lRNDf97iteylpJu-$W>1yYmx5%@UN!C-u|32e zrOW%eQA(-+ZYR8?uE;M&sJOU+XzCyg>ZE{xgOHbf#xBPkpA(!3R}u)74YZaPAqY0AYDFSx%n-1PBy9_TtKge3_ZKsL2vDu{{-oQ$wb{{R}G&IZGel>JB@EB`qZ%3URZWKJE3Y$@xxko^qi=g0PIM@V2j7#)zAdOC; zI~1))BLqGskHs(Fjk7|v`6)eNBEXFLY-@{*Iy12AU_ z+l!M@@58IoqZCTZQXqqh=F#2VI)L? z7dif<+SY1~&+3^aF>b^6C#>)zu&M2==`RK)gN?dS@?+yFuP) zPNjCu?`!gMt%GUyCItjRH2G(mEU9F(M6j6HmYu?#r19mQI-g*!Iep}TctEn)pX3ma zb9FOoDuL!s=89sW-Y|K(DITw^D3#e3q4rAdIca%fOWzkII9J0vzZ-02dkmm-g=5LG zAEL3nx(^$)FZJ3vx4$Zq@Jjpqc$qWUIP!)4NU9C|c<-W}rEszt8gP*1XZ7(BTVT4N zCJ9&@G`|qKCS8=M+$S8zmSFapXiyz9D~s`sR<(OxFGn~bUfiLC3PX2fB*52-rB+)icn)o?v~KAaiw+jkU+JqeTXF#Kvoh|| z-uE|alb_V#oiglyvR${c+^@c@-LHKwe6znI`(X8ugk+K4)EQzWZRwmd5aKC)16g#* z2x`em*tuzjafT@CoLgWqCj~V3@a)?P%msGuj01iH3Tk2<(Unv(O7SVfEVqyS>-b;PN|=qijsi`CC*uK)Jqlw<0;QX z<^8`{d#j+zq9t1thmE_tySo-vxVyW%I~2BYx5C}s-QC^Yp>Qj#pf2b1iFmK?z19ES3sTQ!e;!SSkXm|J!d4kLGIl31DGDsv-tQCRFA3$K<2=@&b}o2|_ak(6GAr|8 z1s7+!k8fSDh^-hRop0J*q8!hUrurC1S;*W+EYCuKJ_Y{K$|%^{)WctFV=aF%jwHM@ z%kC}s1{gB77K;d_XPx)6(2UW^$cJky>zn6dtpSb?yn)e}re_eIOIx#SPB#CZ2r(A- z)6*u;)3FX2*RgdLL7*yURO$I4D1{i~e)7xoRKHo(C1KrWA~N|6o~peDxbJgT9` zibj;Q2I#k>Sdr6;N}BkCZt@<3MbA0;jYC+gr89ZMMmCCE&Wyao9&@gW%7n#(pGvq9 z0%KGlu_=7B+Kg{#_gua#dFKjZpCv#I^66I4!A{cX)?-<`F*0X zB@RYl-=QHZPQ)QOl3pjdS)DRhSerx|HN&XS|c7}&-vF*OTy-B{svboJTCaw5u`{1~CM%Td`qMmQ$xL0Gnof~Di8 zHazRnnVfh5fL=YQOaZI_j22x^ok@(|kmL_m(oc5LVkbO7jal7I zM1b&mBNUDkWuw+OnZ)Cc{qc7qLuQv|Wuud(x}Yk+%zbH~PJDblN)jvMFahhzp*#-L zKyq}YV_I}24&&gY*AoUS<0zdO`+-{3FMAxqt-(f($+aJ=x0lWEwMkAa*T?IA@Xu`g z#3l^-vyEKLT?zZbK(6W$n4PIxOkgW(SIqtu{EeaKsdbrWS_pBh)Y;%W#iNP#K(!~* z;5)V;gOQLRJ;_idG&bS^8!Fvmbp3!Y}yUZh1iSK68h|3ig~kST@fAzOem#_8y^N6|wC8q#Y=JuHdAum*iG+ zC>JVQzsDQIL@fayskq<~_nYFW^?|Io{RpC~HbC4En-n!YbqLN)UiN=||@)d%@z`GJl-q+-BC@{n#A7J)X7PzQg06?3~_` zyN6VEf1Y5k2Jgt6S9Jd~xA@7?PzkBwJ$5LmVZ-l`QocTz0hf+#`0O9*)AXN9N|~z{ z&TZBaf9M5vyF4%rqk015M&Bu`@^bd*u$n8rb6pxPnHN6c+2zKk;p|hdtJI zz&K|}#N6$RWdn-q8ABl(8si7j*?Zh0eZ%3KJMd}#B=1|m3mLtz48|?Iz)|(hTo_7J zS90P>WLL(Xrhgj}A$DU-IG<%zg@Z)mWFmfnkr#>$fZ+xYu=lpt8kJXWB`Gxlwc-Bt z9U8iw+uzwXpC^>5^mbSTlU48ctnDoDObdx_(_vN-dUbvb^E9@8qbL76Neol{s|wAZ zytE}h2STRq(2<*&LkeN}v~AI=^dWIRd>2LF+3`3g7SH2*>;?}$zB9^>y^4-rv+Q3v zT!Vn0;+T#YY)7FBFLpT`F$TwLZR9c>e`|tH3>w1;$UgtcN6MuLbtQlS0b#)U@6rv%7&dh>?;UunTqQmjcb*OlydZI)QGXJ}3(I&H3i15$! z8QHS>PWRgF%Ia;Ow|=G%#aX2U2`p4EJ1xsy=GtDMQgR$EZBCh1<|}gqm|v6IPFxQ4ZT3T*3s-kW%SP#K zg%$|rN!`&oX0bAitS2bjildNAY-E*qm((urYC745jH3*9p)}4plxm=EjX^3?D-!qO z!;kpGPsanEGmg%wW*dx?FyT-jvlW+Y;OgJqv=SJ&*ZOQXn+|a%7z**Um;lSu>-2(I z9_fv8-%L`Kw2L+!E|Qw?Ok408EiQN65q<3p+q?IUU#S7i=VoUsnakH6OV$Cd_f zM>BeMc95aj%jonwma0)Ay*#CE9!8qkZ)XPvAah*npoiowbEL2I@Mdx39FBHd2)(0{(%V!O{Cq3++EvS9weyZ`peWuY#Cc& z)n;M^`cPW?CGboHnb2E8+?6E|@up~z?;I(FJ`HEmORdTIV}jnb%ceg#!Msh-yhP z0c(aCUtw6IJ&yTHFh|}a)R|MrwFzti?n!RhF<5I;A77+c=+X3P2yFYeP|Sp8^djr; z!{}&U_z6uUC17-2v|pC(x9Vu{EPg-)k(epHXmTS94zyG1B+#^Ku#uIpKZ-T=TZ$75 z4h~-b%XxS-cLOUf3vD6bjr7qZI>{v~TEYoCNvY{j1f9T>CsMv^C<09!%OcLv8T~st zO&6g!(=NfNjnd=YHk)T~5?3L2zX#RJHM)LGKAt-KsAEnNKUM9}TrfahR^C=#SKj$? zeo@Nc`(w(|F#X%7>c?#70ab`-`lAXAhbOE8TJ?TP!R#TfKBsmevgdI4r{or9h$S?8 zi|l@3D$XOK{QjX%o7kq{hQBu)mcx&~5t@Og<1iWvQc^{3c~4APT|mtX0^c1Ug3fS) z+jXXh?IqqAI zdhpKjg}&Jwo4`mqW1bv1Fzjy(p&&(LCL7N$IO(x-Z{iN+^R1uX(OMa1_FfDV;Yw~J zPJv)|h_Lc3v+KB$fsM=hD1q2qTih`>)+haOp0}DH4#cro7A#?{oYk2lNXC$%%gI5t z%;KHe+5u1Cy_9?QMWZT+a)7vZ zs;OQVi7%7rUys`vw<>#>s2<5FQ-0|KsCkK~5Wy{CRBie^@p&w#rnADN-shRUF~fV# zot%NNXPOs|wxCLvYhdZ(4{>4Mv|!hnw4%dpsfKv@KlY}%XY-CW;RQ8ONrmc>Dvz!E zLi18mGkGqGw#cQo{@#^mY(_J>qYHkdNEL!Zq6eW;%2H*xi!a}Y9Q30tm{l^0eKp_^uw*y;2P1RXUv zAUe~?PB0yrYI+++`lKFpNh2qgDmSH^ZTFdR(Z5;$c+cH60BehIfM#Ka2_`X7@TL(o z!S+O+P!uqwo?$w%;XhH!7t2BlL1)oW%8DCCdSb?u$~is7iV~@D=Pu5;eb_}4g@*B> zkZpq{8#km^jqIABgO6T_eyQJ+cHKr*pp29;h?g28PA+Imy8sF8-(vGZ&mh5iG|B>m zXs^|XD@&@u1{67JEufF53^hoi5;nP2!lz<7X=2!!{~Qr$9dB*Z*=KdcYVlLrr2D(j z<6g~(!9&0tTQVZ{^2DvmcU>rrJa1I!UDuHQ*O|Xvd{FDA`1jFeNAja^l~X&R8qP?Q z)8^A*c1Gk@$jJ5Y9kI@)!6s4s?`f=f!-4N#aLH%vESee$LE3dTmHj)^b0@94?b6Q0 zpT(>5!^ygp!-n$*IfJ%l?hV*g@ymPDQt3C}^S z2i=X>Ucrx9>8o+E!R$EGR~PsIwZr1r-xnSj1;vQhX1rGs=z&v1-~IV{%?7`jB=at# zRuE+R?bm~Qt$J@F8G(07C4vVdJb$?uv9UAG&Cl44ZwE0OIUcHVymCAKWXC|i@C17` z2kCCz@adwEBFry8qAlnr;N;&dq zh2Ka?>1Z$rj<#BFIIzNt=Yo48CwriR5GNaXpB@2be(v(jtzBB1v;MJ1j=oKT7cZ=? zAzxZ$AAAJZR(YFpMGGL`*Lf)hW}2 zMlX+Cwqqw?^RvtFDC}-74GjmLcM;nYy^O8w6G{?wv@oiI?DLEJZ?}$bQDfwcM z@NY?B>NCv|(a>ErWxynwjMQmN)i40|T2r;M^{ScFrn(0pZ!Ks=CW*qhn8bv)#@c#H zqejWhl`35)yXT_1S(v%0*uFB-o+jPaTf)Rlqg57ENx`PfTJYN^Vs} z3KQ@5C#k|J8EKiQE$lQ3hv2_*W}fO> z-kNpqhzyrZSp17?vvY^!-|}dVy@OsdDy{4#$#yn6rK&WZtzt7RH8fMy_l^|nmapcM zCleh%iUS~RjMa3v6_uAn_4*)W-Gz<)r#D<~Wzd}CI$UcOoJc*1IcS!z)R9knf7aZAeGNhs1`&Wy9O#-+TZ3Rp+MKlXdlN@6MI<4e#!}Jv zPys#dIDd_C&#`a1Rvbhy=e1@^N!FkG$wa4u_v3*i+a^Fb*kR z3S|ktY1ceHaKh$lH^Ss$By_Gv8R7CoA7Q9+NjN+p!NSw!2cVs?V$tdH!si%f{nDbt+);JYtOgvXIY7xbgxJ0h9elsmlyU)iC# zAZo?_X&m9tD^OU~3;m6mVGzzJL8ju+7b3~aeRzaMAM9J>xI4|7fT(`WKOW@%!u~{s zkDQ&Tm1GIIWe1P~)(B>-1n&9gNS1^U>}+>P)V@Fb(G7|$7UOnDVN&dAiOwtc&qq^N zMVaoDe$~}>Ic0sKa72{w7pQ(qhHtT?-Z(n>w<2VR7z?JUx2u zip=#TZ30Cy5nQWJ61I61^Zqm4zx$6wOY&#oXvLS5Kn~!)i8;M!OF_W7{)mgugNtP zzeiXk+kR7BwUvIcj+`E!9r$QGvSW4@+zn3leIm6^^6a;EiQUVD_n^sUqSUFR5WjTt zcgl1wW&ZZcG7DJLr6!{^5X`v-6$J;9u#<1|oaDNSCF@4fN$DaRnw%+k>`)X-3&u7x zxXa^K9MhdNrnm>|LDd#2z*1RH(cF+%{ouU-?bJ5MG@h4z`n%hzl9VAwQ@zA2 zI^?F{0{lhjKDGEame{j*x9KUXyPY-7iLp&{MmnR2+9yQvoN279B0C)3c?JQW+E&Xn zTSgZyHgC>qaW?P#xun8TI&)~5wu@4dPbaQ6THX+&>P6Yn#+HN=*J{(JpQ#Na5AO18 zQg#UEG=+I?cA5T)fXUe)3~DL(TZM6%jmU3P=n>G`IgJY&AfcJK3g?h~CYIhLn>BV) zznc_>m++&<)1ldw0#$M-st}={N1h`a3D_H2cuYH9ZDBdbcGGDs7w1PBMcWnc>)q_| zn#(U08f7dinUO~mJm|_u{Uc8^v@&Ev)vdSmjQA55B$R=vti~~S zuTu&*8-=y*81s_RqZfW)R2EGyW5G`@vH4K5xxzU_dnAbGcNr}cP}>D9tZmKo`nPYt z{+5l4K4w)PYttQ(#?csSQy!tkLBWw@%`j^kvrKVHiC$)9$FXDGFsn+qW5Tg9t4ea> zcq$c}W4MW*%YftM4tpRaGDwf0NZ2EA?;YZDQD9GHh{a8vA;`YW z;O|V=Zk}`r-Q%$sq?}PpFkI6zyJ4*%9l3>d4zPX-j26zSBqQnj0d=8V3n)gkX*@Es zi=T(DPMzX}hTyuezxeLs1~Mq?$MA>6q65@Mv@4X0W;G2{*G zlp0I!u#l#0-!v_+V^m~lo7%APR?UIPR=zP!l#G_{hzPKz02G{-u|F>|ilxX{AS%H4 zXBuS`{EazwmYNf&Gyh~|8!$AwQ&krtN<1HPQ>jXv$rkfn3t!Pu;B)YR5K_mHE9x(8 z_`xo02lLE$D2y4QO{r*g9mNl&Grq>3U4)GI4N+k}Bc^)C(3 zadBkuqZwrv8XI?$m|%}V2r2%9de5b;CjyTe^E8d-+3khu_ks3uLLTdjctdt5A81Q< zgpaF{N|LG5Gs1)_f51HJf4nZUxI$w@KoMu#E!g))HS3K!?yvnp-`~#?aK8dElO@hg z3sZ{`a)l9s=>N08<+d>RrhDI&CxxVJ1+F3$q~ck+Y^V5!@0i?*^=tY^Oj+*G&5YdC zWuPCc^mbf6!`~g2=r_B;@t$99>vI3-<40NYGt!&7iesi85?Q0CaVhx}0Gg_MzfxKG z%_e#iVi^pV=Rz&&Bnvq+1~gOc^Tc=xEz_^eEqIMRg5V=b@-ZL~iwfn&;S-i=UdjhN z`|%Fo%M)SuF^woMw-*fX&9T%X=XrS)6XD%oaLDuCzWfT2$d_=T7wuDre5LxNEgEg5 zVC?e7Hld@fe*Db^ARU9BoXyPj*@aZ)1uV<=;KsFv_RDvvY~fc&@jBZTuD2(XYtk3B z<;Xf8k*>{lIlq6_3Y=J{d2bZ<{613}TfQmm_|@jvGvx>7-UG~XvDIkcgLZ&nV&|hS zD=n2k^8W2|_SLBAu0~s)6D#*$SNNc_n4^GVdcxq!kg*}evHwmrj<`jBranLBik0+Q z$#7sx&_!8NYNf58iTZ4N#~$Mv@0$$UAJ?QP5O9h`;N}^qMX$TmfepR;hLdjq4{C)B zs5A->mO={r`%eMYySVM~tFMNJ*#EyX1pmi9`=6O!DH>WHi|WXq$&frE=%}d;7+~m* z_`w6}dHLVenN8`8;9ON~hm{mBi6=?UMQFBl&h%kj3+ePMwO|qBU9{gePCp|)BXVXe zrJ}!hU9A{S}2zU?p~o zXdTVjMKN;k5aDtojLild5HLOv$%Oiy<>r+??tgx(OGY+2-i!)^AVCZGlcMcgg6~wI^G$P{9JnJGoMJy@rWmN}oNL1t{wBU;T zQQ9Xlg$7o$^z*V5PL2$9PWKfx#G+0F0c|f?JWS?J1p-wJfpW2pOklyrk76n`FicNn zi;IMzZyUdwWaWwp7`hBrb6OgbQ(6`j(VU9=6;;Yx$nChZ!_8jx1?^E;;2Gp!*$>bC z8H~(urg6FM8-zwNm9D*0yafoQG_`fvAgc`T;!!!mpsR`slGZMj3bm!JwziFKT$mhO z*8S9Jcv)9`+TCL3c1IreH^`^k7UcLM5ha$B%`77`q^neZ@ouifR8t>0BrPdW+keDB zV%D|PIr$vLXMSQ+NZia{ky3+T7bvTb{IbU<`IZhcm)-&%ZO1C|M4Cs5w0~mS$Jo=Q zH&@Xjk8%JxF~WIj^j=_XpsE5jb(BZAD64(zD5RC?tvVmg&8Pee&sp!SIsf9u z5$y|$R5SW0+&xHXCqij7zmMt*o1O1=D$Hwqra zl+9hINHf>~L+B)LE5vvg<*x5Q6^f};U9q7|`7yAYeU-Sgb`8@dNR6RgFOYv0;Y4PA zOT(Xh72$Oi?M|1gCV6}6A?cygtml+UC>t*56Zbckt7{TF{ibU%p3y*y_`W*i$8^KR zoO@daKBl1MJ43NMp7xb#DnZFktHFANIYm;G0_}4~ehz8jS@2~`5haGLlcu1wkZ%0yYg0ONZ38gXo zc0*DCInTiHDAWwC`Kd_r7Ml?rRQE#)N(agCJuS-8^scERIe-s#eHe<*`m%l(>HM2K zD-T6}OtW2;ok_q|mF1|-qEcLvth}5AolCW6ilA$D?IsR_)O+yy`)A5X51xwVcYBY5 z@XHG&*>OLJMUp+l4?XGub?>veaG`05?e~v=GP*&$x8JFw1deUPYZ}1K+(}zv zNEbLFxAnMge^Y04if}ol%J1Nu9rfb&w-#C&zow)3vIG%nSI~vP_jIn1>NajW0bjG&4lzFJC19-d8BQhx|GZ5`7GOuuzBv9)uQrU|4>mleflTGS+0tS*YE4vQ~RPh|JTBD|899H zYUOBY=KR%pBbRqjG%_`{vbXq;9$c}4oXp@iWWU9wk)ap22U<@{NUg_T(3aHV$S5H} zqi&5u)tTFMc%gsj6(IlVQM#piF3!&b?qL4&nUIYrxAq1Ev0g45SV&{!SP*SJ12f*- zy)T|GE5%(`WBUAiJY3yz*K$0>=3<1^O4_W*!bD&nWA$)YlKW#g7a)k1xI80RDZ)GA zr=!;3B+XntDL?6~CM4;hLpN|_@Ya2N%<{&fZVV42F<9A~!)@TLXGurc>lZ7r2rr-r zZ54@aL!+L6^488U5Vc;+vT&T?!zAFI5Mqag-q6}N&3r`+OAvq6OVX2R;ujl}Mzo{e z$G#+wL-P7hZNRRdZ0^rrD8@g`SN`i2SN%6}j{j%H6=g(KSln3*IR3YVpOgj{My?vS zN#dBd?26hWK`{;A8;3q?2&YDcfpAWAa@VAiH&0FHsLMU3G3-OSEgag$=BMUaM_AUI zQ*-tEhi3bkNm}04RSb-^h4SQM&<|X^MTv(3uaR__l)No-DeJPiEivWMSVa3^BOzU- zpu(p}P3wKjvYPeeaz`n^%-<~q?o3BvG#hhP)Ku0qxl+>RM3wvl5gG7wegK~=dH+Z6 zBlP5r#Yb2YXjCK!;RGQqVFjTz#OQXXn-gPzZf)}Z>~3snw-OpfJQ%01r{!x|;dx;o zrZ5GwQcjy!VRK!e@eDv>?(+lew-QVwsaINRTXv&>>I1?VKI2{tR$1KXT84>B?C*optm-m(3I#7L{Jz}o=9=U z*draIEK&DS>ea=f!qrjiNLL~(vFi1QpiuC{ZBge*j2pw{QS?Y_Fr8F~-o?5MhM=+W zXX@}{X#GnGoqt349JBC@)eYe+9+5TRCL=*$oGw=gW+Za3CAakwkyx{`r~hI>%0;A=@zGClAV&8iKlU+&-Z`k%uZiQQS|gx&*wRv%3l&SNy~$UoHj}S0Viqg7O4|aHQj{QIXfg?oM3x z<{WwqDt@C5E}e|;Ty&b<|BYHC%_`bRkfj?pn~o25s8D;12gibDz6@VcR@9uiA=!2a zpEXc)Fkdr7BEX)QOYpdyV_H1pCMB4qrXmCMa4=TV(w4jGg?cFL?8GOi0rU0||B1#( z55Y>638#kZ%X!ARjtwlW?o)X4{C8oKYk}Qi& zrAq>M{{Bw~_U-`8I$o@wOtn{ken(FBb^C;Jms=) zRgo{w5AHYuV-U-7Wpg7`AGyHZ5KZ`T`i;8eb;QqE6^Zt|Y!s1Dl{B)KjaTsdwS;Oe z%J!9drCql4Y=tOVs}4_wAHimcvNF3txCQyIdVReBnYdwN%N(sJXp+Lcbgh2RMOIun z6`R}d_)nU`7c8lZ_(PtpW4>>12GaYx;tty3+LyzS+F`!;B)JCw2@wfZYc@h20^2xL z_*()2bK*ua`4Y@mAp_W0TQ{uMVv|Megxn0#jDkkiO6=(_*oFd(%sd?-fX&Tf%vyOQNlnN56 zNBX7C$^?oSUFg_4MJ9a)u_b3hUSbi$aTE7Z^)Y=zaa8>Ft*;D3t&apW3=#q|8ZZYD z0uchKOF>LZO#2NB8O>3wukD8oM3;Ks1w@yAA0C7*-Chh>4caXwr~{^B_m5T>&&nUI z0ME`J9x$F%ZYMoBx#!dHF@BBy<1pPF*d2QeWP24oT3v8f!E9~;VD@J|QUaOmmAZcE zNLl^hVd%L%?Vqe~ZBEP2#{sWLgA9y+8JeU0bulEXm?)Gh<+Uc?wGZkgBg`d-Ni_(g zuZPV)U8>9b`X05cXSmo2vT_-Y_nRC9aNOI?Q`GGnTFRv8noTQ~Im|?&s1ot)-1Rt% zQvs8()Ebr)O!~S8UlPGpV38@(i&a0;ao3qS{DBLWE?!Yf-wADgDxg1XbI9Lh^Nv8y zXN<3O6!a*V?f5#3-EA{*PP3(NtqynN%zUYdAF{=0tawP9A6^6nJ73xCnAORTRh-OwjqZSoy&57!iKsiF3esyq3Q}!9ld7|-`U|sU zrPpE~Q1t`9R1_TVt>x7RY4V}nQ1u7LJL^RTkO`CO@N!cfX{c`YO*shD>JV}hn1g1e z*P>>n+Q4$t9C>mQ9VvRg&?Mi4!=52XgVZ`CgM?ds-;_!}IT5a&nd04K=4gkz^;U{5 z*xiIWxZM;-K+mj~5cMeF&(EY>$NNR+tS&*Lz2YFOAv1 zKj5eWs0O4jkNO=h+wgjijx@6P2ge5uh!y+_xtI}{Y`%;kFo`Lv+Q z%{@Ho6J9k^>eN2uw?>{W+2{mo;E0zYznx)KuzGV{0>sbVc*6_a z#5SKImj0D2GYlj!AnGx$3;Y?i7#MgO*U0+)1NZz*Y$L^~=KHtBq%xU<*aUKWLa91w z3AZeUJyzTUTmPVCd0b!;w|KxaT2Xm~Ecfi8X_j8H;R+BT#v*-tEya$~n2hU&cq8gK zwGu93&=MVw&=|w1_C2x9Duk4nVhu7$*EPev4TO%GfeSnJ{jLq;!LI3m%G!p1 zl=HEZKqPCL4{`j8I)9vHjZpSr#dQlyr4LUJ2-pmK0F%g6kA~Fb}VeL znuNDU47W6anN(IDOMhyPk#W#6PF>L^$+1izm2W9 z{VkR$m)uc_+4`2)1pqrTol%3Jb8NHo$^m(79Cs@D+JRJ|ZrYu5b-h5~1UVsgIZbsv zg{F(d`GQY0*!EB>r#qA$NnbXu7tW@&^x+goV6(51F@rj}lgvNloM_Hw_YKPrRZj^{ z+nlm)v_`eWAl0M`1tLtyV#NV1)G9yBT=`;EL{DBEG+(SmTvm&K#rE!mtsKKzGWj3E zRZZ8L9M!V?UR!NdoHOc;iz{;YLlyL@T8tIsZU!Fl3@$hB+D--+tke(owY=L#G6%mC za4SyUAapnZJ8h?f!dHSW$#L@+{nOPAQ&)v4k|qv;?Xe92ZeEDNBExigEhbd}hgsYX zP@JQsVu98uKu#-VuI1f3P_FA19w3jC$(R>@;xMs>sm+itnL7lr8Hvj;dDVk+%q@B| zHB9|i=pX6#PG&p`A{+>aH{O3&82yjOrT^7|{TI%u=4xg8uLNAxMrHBKkd`j)n>M;4 zx))AfsB$t0Ev$Ha8l=(p@82Z^8I2;!tu~}Y!e(A1{$RZg$Fd$CRtilxaak$n1qRl$ zb-%ZrZuwkqZ~u9H|A78MW80ip4mk~hP+s2(G5r8EYlDNJiP0{sF}`G*sQ#UgAAI>tyC~3MncwmKK&Ze0WOQA%b^OzXq>19VdSQ)e1`L zXBVpptg6m%A)|;%m?bLA)1vH!Ip}jveppW_X{_380Dw$CAjMVDfYha9?E6SZH@6)9 zru{3+-2?f>DICArDBQ!V5TTKbISOxkYwdI_<1eu3@a+_iMXS0bn5X4y=1cW=Sf+yW+1 zZ8g;6$6*Q2wRIwol$>~J%npXMM@954U}+;O0@?A+m_Ag(=U&~Bp!T8w3i^&nm}{2q zx?(mIi%^0LHv}i95Tl&i)Mz85ol*8nEN&143dy(u1_E;Q z)!X^6y9^TlW-a@FRR?(1*i=XVM27*Bm?m!AG|fOkXN5tBg&cr|u#`%Qmp3B(ZYUE= z{$;dwopLSryd#(WX_%et!s~xUw7mFE?l37Y$uqi}bn|}ganpIzL-jD*+xr(Z4>GM% zNeiJK*9XG(p)w;NaQGv`{uKdpNi@T{0S6Q#@J$7*f>%whxdXyhZGdE3vAR9nAloRT zc&1|N7EL(fd;0f3Pi!t^^gC#**imy`CgCF`gVu^s;w9-MhGcL^v?vr?N$R9(C84S@ z2&^$Uk;9bmZV6DJIkS`KA>X${hMN7 z3A(Ym{P&bcw>bhzh^1R$mSh+!yTjQUcmvCxNgR)#1^8->qwLG^C9+}bKl0Ix9=aOJ z#wr+*;+~lxwU(6KVw_#7jKtx_{fvf-U^W|5r6v`d6&+*|W^WgkdDtl7MySno30E*v z>Uc%1j?OraTx4k#5EC@$!n!h((vI>_;hd=bE6?JEnR9OmRrLj7N(#__yxij1Y2O#zhVbgT*~rGUn5R8&&$O zxy5AA8^^Lq$Bf??51DaX633IL5av|}3iSjRuM<8DQTznUrl8aDIUdD%|3I~mk~Osg zag(*Uhi03$Hdk+QuD5>UyaY(EBVM!kfxPi6PApyTqEO7r}J;_SO6dCPj?kmaXRWzOtwfzJBeq>}Ob0 z3P{z5Yd2q=u6F<|#bNFw5I{aAr}TEY7oDRFXC(P7&oM9aA3@Z3=+(G`^RfmuY`Llt z{K`=sYDgmq-Nm{sIku}PY-@#J^I#(|W((C;(L3st3hkZpiW;u$V^9;(1C%UYOUrbt-l1}$8j*Ec(Q1K+_Kv99tB_UY!#d#Rvn zwFYotr|liq#foCANVfsdP&p6m0TPZ#t#V%_KoV+;^IHG@cSNHEv#2WpE;*#I~`;n6K}SQrmAY6Z(Q3AHd-k|Vf?uSiNA;RDB+a1m6uW?4VT zfMCjGq9MkLE^gg4Q-`OA}QS3eo(c4`JQZV=I zJ_=%-i)Z8@n;^VV#9$$Q&e1JQ;dK|kOp z+^v~EY-ZUY^WAGMOrS>kt;SnR#P`6FW(3Zj&P!xkFM_&}bbC=q0Z_S^fWskH&MHI4 ziaVyPx;yb8Sv@V4v={|6gc!~q1#Vh^gj63vh^jJDH_ND3IA7fQOX`K2h1@o0kMpBH z^-5uk)VW?>sOo|xr`>lA)LJG{%Jf(>2+0ByTSz^X_u4(G4&9nP3s9-9G=I<4k$1rT zuNhCb4*l$-<>_vJr!L0gZpPv+!Mv&r+drCFD^OEK3mNhZ56N_y`YNR{OlbE0=M8Ra zFCm%V8>^J?b{!WbQ#p(eABJEzO0DT^yB;j`kKEsE2W)AbLu@hFX=9{(e-24dW%v)$ zNzpTjIyc$+rV=k!4wpnhmS8l=SLfMHjNmofBzktzM6_B%dP^S2;nf~f%}eKMPkE8w zIT@jf>V95ykvII~4{DTwf4{BLSCY42s-Z zi5VOqOwI^S<9Uc9A!D9FLqycy^t;DX+igf@@@+ItSHc}ieOc{Lm$5hp%}9eWDV;ev zHNCD)N|vJLb=A};eeh#eRfs4(y?{BzFqqb<&+}M^i? zxI3v;x(Ulas5%P#RI;gSxcPbuulJ|2Qx8S*rTJZHm-zKI+4`<7#a2DRmYJvlXGp4J zwwjG_TZVpF0;Mq}-vV%u?>@ot_^;Ol)pH0<%5~6sh+0j2aSr^bev_;nJd@&!hnUssBo_=DiHPc?gv{hJv@^kpZ+(bWc<<}hfuD3 ziaQ!HnS80uQnSUKlRAk`x+4G_DzmIaC+!g&oY@I(x?O~GFz!oQu=Pr;(9E9?V3jUOM*ycB!UP9?K=+cfjzkA@TJTB6#J zn}ZZy%T)LkK*e!`>Y-v`GtpJ9U-HPwW~2tZUr#P0IKei0bf+A>Hp+SZv|GCB+E84% zxcQ{Yn+T0wqrUp*utqeIv&MBSUILsh&*CwgW$Btht{$Y=QlE=$MR(oPgTxJRJCF;_iF07?ns$`vhoonQ zfz+$I8sHDk&&%xG_6##p>K7kEf9x~XRG))W5hhAShi|A9-r@-XJ$tN!r~be|Mc80ZdqDl%%1kQP}f=rrQZwW zMuYr(@)Kc~uutq_7v`})JAGxa=aobyCEip>Z-7jw)G@1@Gu zd26>%;>*iBSgwmz>i$Eni$6tJf<3s$QU}+-Y!1&(;c${&-T(J#(0@c!G3zM$)vuY| zKKTDgzW?v!s4r3J|B?OIKXtkO>s(&#-}&7C$&-*Uvo~`#a&`CzYWpv~gqqGj3gu6A z*m9PgNNQT?%7T1dut*JLNbxG&;>blD1Cb6Ov)zJJOSIqP>PrRN#>^Uy-$Osqu_vcp z`G)g_?96)BgP#whPs7L4`=$rTp(mQS1v;!~m|)w?9LI56>`(LXnc5YdV{8<9Cvu0m= z*d9@MWqV@T)q|shnyWV79;m-?19>aDG!ro-=B>hFwv6U5lGYK>fmRP0cFiUFiOwSK z&#CQpxIBx^G40QoOk-WxjO^7m;u_pupJ{9;yx{g2We!%(nd>pZX~7ET>|T>1(R0LJ2wShG&dOr3f%5Iui{b2a zCdi)mU8&~(vm3#42R(D7%A{1c-|iaCEN_3q z=6|vFj?tAx`?hZ-l~kOHZQHi(RP3y1#kMN8ZQFJ#wr$%L`(^Ka-n;F!x9@K4oOeIX zPiuZyv&}jB_>bOy{R^!-tz6n^A7`-p(iNll&M&e&@Sr9n(IWed>yAOWHRMixv0aQ7 z)U{TX4q?6+-uJ6jZ|v~y!PEugY`ZN;`gnFaSP%};(TpRiKpPG?%}}uufI?o#5vWKx z$b!??60kmxFhJYd=7sXTg?K;*HQ7#2lpn7oWG^->KwGDW7gf!|P%~_Zs>(nqjFJ+s ztUpu5PDjXEUo0?++_9bSrq1!8jQddwK@#Db>wN?#w@!uB36;9KjCaqvyyMSU?^Q~@QT4ZF*Xmv9-?}ltl8C}Wqlm;C zd$)ox>{P0|aa&C4yNcO*?VfVzS!15hkY#@f)c4feSf(r$hEKpgGI+MY51Z20yVrkW z`VjU8p18k)PNDxX==9%}SO5GN{D0rx|CMrTRMBvl``V9-z#@qm*bx{|hipiP7$!9# zNQA~CXvc932rxP-pJV3}NQ=dNzZ6?KvGK*9?zkfyZ(y4nXSplPJc&NN)7IED44w^M z-2-Ggbk}=5u9tUze0(LH>^$iWf&(&jWDFA;0K^s8Qp~c#7cgpmI6~XsEgCxjHwd4+#a+&UFGTzp3F1u5BjDHq>}#@ax8 z>yxCnN&k*gX1ZYq!b2^)jCty7Mvt3d828k{q?Iegy97=CL`KzWFpN#*1Sw|a)}vyW zJ8(KkUDI{U-ERq#Og&09OoA2u(_}f)1T~oqer{x<%f5o*Kc<+ z-yP=^VeT?ASsSdirq;rU??H(R5hHL#gyt)5PFb!aN%iv`J-;Rx_o$Az4kA67#FdNa zk2{6|*#1YBodUtY(82xV!4eiY)Jz1>NM{H)Wdl?zX{(IQq-S&9O=VmVwE9)Uq|*J4 z0_0+p8f}7xO4EgogBEQ2GUw2K^Lgh^A+U&!An`R6kE(J0inuint7Iu$HLz%*vc37L zl0notJ9M~E4pJf-A|fIxA~HjTejuWenrOdh2BMv6KPTdmXb0skEy&Hu=kjTYFYnID z;q;=IA&GsmoI3|or+3;?pBHuaX8S6oj1N1v4?XO(N3KT+;a1^0isNO~(l?ioYc(0u zv&?$w`)ufLP<4Dg`qLBZM3oopwWz}?b+l`*?-7j+yc1OI2-ETH?gHqJU!Wr9EMj$IBdOPN^NJ|G6HG_9 zkzp2?nrH4e7hL4|bTx5m2EO9FA#Z!Vj0M+*b_wX6{~WH3QTTn2VyKV#J1g7s8f2Xa z5`y~p=1)7oC(i{nnK`#o1!Xa>7P?FOW_rsF53~_`d;C@MQh-EW-w;)exg29k#AnbS zx~s~tw3HV(*F{trCSMH5mHjIGNYxlHBb!$aY!zdin(ope_}DR)eAbA1tvo-t_q>T{ zCRS1Kgr?N&F{SPe+nTb?&(8Pef3M{u@gcz})YT9rLWWjV)I2*rCfK~?m4C^41$6JN zGRytov^tcVS(es*1^=1la&vj#X)3Yj*$<$ktz@L#i;)l z<|qbjPl7xH?fwnSKEnMFxeowkmHHQ2u24M5Q21+eJoR-j@xRwz(*G0fCG@{7U9D6L z^*~-i{H!GPm@tPL)c1D~graOBB~E8vPUvTYSKOse0wAzJSpaFrVoB@UK{N1xlJ13% ziHi-g?xb>>vqGRqQIx;&rvHIooi4I+e}l0yRi&0rQf+$bI(@zK;66%EWw%jvKj5d& zgqZg8QR`KKYDHR7*_8u{dijwZDh!%&4+p^o_G|tX-jP8^H(Qt5SSLK~8jzsEkYidT@vwMfL(454nb?Ac`WigfWMT z(6B^MSfFuWty~nAwXZ_qCuu?nU5>d(c=RKAP=4$-?-wkDMP?^ZC11yPT$%-kyneD87@S-NJrJdM7h5ZFp7W1)OEZc^CK=!;!odHj2 zWa*S8S5^)q*3~j=6A5Vpb7>GYY*losE5(|kHYY9V4jgV_dXDiCMtu}Ut30R-(F1iZ zb^oxnk~T)2?EGZ&t}Z$pVF`}!`)2@F!!Sq@{(5booY}7#ac)ZRQ7;+J3Rhyg>gwt< zGX>UL1cl_CqO;3zSrXXp+)`-NyO-y>u7Fr#Z42mpDVp<(2&%SC>|!Dk!(5!LvpT9S zvtMx3GtRUb7-|5qC?yqDN{2g6npIk)d}KXfT}glbW|YJ-I`ce3vnoIv#v>TGwr!*^ z6IpVqa;F~Nys@=rcz~R@K}2kVzuD%?gs)^$?KE)zHlI-D)^K)_c&s^oyI@{z@}TG` z6z;)2QS42dg-?%rS2Ym9yhQ)#yzeaK-{~J3?AO+;7mlMkj=dco*$-~nu*BQe=oZX= zq-s32qN*PQKhE8Qc)YTG$TkXBS^meJrX&Jfh5o>a14)T>)!RO!p;2ObjQ8T=nC6Zm z=TY;GBtl|-Ot{Qg`4XjuEYZf3$XpHL0WCLbPAnlOEj~H5$XAvWdq1EPz?h$>2z|Y} zdg}OoG&Gnf_cQPiiRRExIvpj;I#;sCHg6`eNmquy7h!~E1K%ycU_s29k9- z3-Pm*9leZx`Iph`mxp5pp71RFtUY}4p3OV9dPHp)_p)ek^d;!>ZAK=`;uNN}!g_2g z`-+Sg?RG<5+gaIS=qQ`0oY@=tXFeSLOS)2F9 z49cN41H$m}^xpY(b(uL6r1T%@VL>{Uc+IGcniW$`YXMEiZ%lx7&3^mewT7!3x-{dn zK`;ZJ;*#9xPWqWTg6*s9HJ__5dHvSd9c0y{oCggLs18~UR#MJh+n=bl7dqzk*!VD< zBOk+g=BERO)c3`48@e#vzko}^Z0$)O$R)$Rdivs3bMWcU>d?Vf?WY&y$BnkwK}JtG zqszXCnAPIygG>>lCE~5HP^e5v%)gi`ep3K``Ugk_kuq`J#6+|sB-VoNF;$7n3`WA9 zVUYA2ulqt_vT~4oHS@U#XqV=;&PA#I58?x1B@${b4^;Sivd zZ|AU+8A30_2D7u4WD`u9OGiMqHq+}eUuM_X?2l3T;`+s(T8p?PES1fu>f|?CO_>9> z`e?b|X1a^6Y>r>cQ9crSr;eVvWptOf`Y3`WENG^-Xh6?*+a*0eL4%Z9)`jP(O>ZhU zi%7awPAeR;_|;Z4FPBvnl?A8dbE~Q{vX56V%Ss`w@H{JoQa-NA_h<2K7ZZzZWAkq_ z2IvoWpU}NB6V#e9X8@`}Yo&bfnj37GAH#Qo@I1-2j%e?{%}t@{J2RZc`MVM7GidS? zqx%$foM(|XjffqM0@xK0XM4kK6(xO-u;ZWXkkH+Eq9%rF=Y@fp<>#4Vg~3QyPL>Xf z9O)Dnt3_DF!GWxDlPi*(-HWbR#q@@*&>kkW+3U~kVVhgKN z9HF=5c7p4dvCX7*l%TiHvIb>2`IMdntEP2mNp3RZE9G`bz_-FoZ!$Ebe;0=)PTEs1 z*>94^(@qd$--Kf_POwS8g*c(Ly%NFWiMQ?ryn@0%*aCS>n#peNDPa-c<1ya?Kh#qq zE%?Z8+9}Uvq^pcb)zt01q0g}9^2#-4RH}O9iwU@jcN{Yq{3-V&&A{t}DBw*3*KT1) zGs)MJCwzG%Jud=KIVWyfU)4=E#BVY54)5Yqc#~!dLd}6yP4)?r2NCIhZWF&{glE8- z8dPKXyIkm$Eq?gW3m0j#EYlWhmZu?6Pi))x6)KC-M};`;z|VmnUJRCG#^1^6{1J#g zLRw5?Ujo=wkOt~0)yo5{ z@gw#BQ~dnD6LF3IrG04Q8Vx%K2lf3Ne5D*PB*mN=NS09yvB^3yV*GM6iFRc8S<`FlV>8{& zq0{ZwL~ZKxbp_^I+6_Is2>W7-;>DmQdx!Nog2Khft8Ak?7zb9<4_O|HKPxr&62afp zgs&wa=1}1lk5?-PSOL-B9&x?=A)1<5*rC*u)7@X@@)>FOTa`1B2)+uCh1Z-}E{JGJ zznJj`AQpY*B9cQ9ASzIgkx}J@!UB~O*o&;f6O1~iUO>_$Bn9LdWaK0rrZv29B}>Hx zGjxJmgm5wmD@&n2X`W0HU5m(oY%~>RvF<$TuUy;=`Z~D)k+T|40%SQ!J@7Y%OnTLk z4)|VdfNx}yFJB@{gNSEr?m~m3hfuZxti>ie(=TG)sBT3$AxN)&kkW_3XyN07D;5R%iRs^yHnrGjPT@A3j4-6J&SDfnUL5U;7eF!DYRCV8ew@u!)1dPYNE;ZG$sV?0}fy6=3D z8BG%5;#^70T?mrW?Jj#WaZamcVBiyU{U{e@+g@F*>-VPX#M9ic;8W$tkd4LySo6I`Q$S8#JIajQp_+ z1aTP1 z3nDHN$FS`mYdYt<%~01a$v$(E9iqz@)EXS}nZ+lQITuHhG1!&n$Xvqh>OsBLaO=NK@9y%^TGg z$Z5HHA;fO1(Fe(+M5oR+n8GxV6 zXr7R6&z!_ad+6FcC@Q*}JcWDaX_yJNTm`)AT1}$CvCWw*$M0l*fM;PfYxz}62l@C{!R28ms|m zd~(?65}UsxTfVch_+b8_a-0)37QBtuMqyE%Qx0U0?dLahhFK>8dFs&c+&CNCt~RwD zv9b zwK{&pHBwjx$-MqnIGNZ^#`G*7x?29gD0@TMbaT0aUH4uUs0I|*Pp(Mp*qBu~ytvg) zj?{8fJ|uTe5jY_30LQP-ap+)L0(Lakg^N8L_klcpl4%3Eh!)RRpmk4|pzqD3cgFFP zyTKZ7Mrgs}SoN-a;n^-z0vfp!G~NpOdu=?}8gCpvGcIV|TpOn-a?0kK;K>B5z@kM% zQ~S!y5$K1wF;doIqA^qZv7ToKv*MRs=rzW0LaM~0HVYlon@BvpN@D+TZ}%XtMo>6U zBvw{TPt&Z-9_>jSR{6Dc>vsKgPjov^EZr@fsK**peqK!NG%?&@$zNptFmni*%(h%| zoN_BkC3b5`Rix55E|E*~Z$(SLIDKa0v_&gDGGa)tNO2$BB7{a~9h~7I+~1P78R_e{ z4wr?|x(o9%1*Jb^ivxEC`rZ;vSB>Dck}tFGT88cDFNxOWCo2i?YO#CzNIa}R-sp2@ z*yW9`D{Q)u&_c$@82v%AYyNotPVLqc`ZR!gZ#Sl;>pv?HQCfKWCtl3NRa{5-OS+8z zN9iK+Kano~*8KMT5A^Ow5rKc7I_hIpZKajE5#+94E+k0dFBFzVEGvuP9Yly;nT*t& zldd(ddTgst$W{C}0B7-7^?Sa%`;`nNqn6|WP8WOYmG@TX)yAtXna}6#+SNCrr&iR7 z$`~!gxEgLF&0O$UIE^NB`v3!S+BwvEq_kdKbkYXcw4@U_$>qZ0xF&%65}NQ~MGcR` zBnteE)}5oK`hK^xy5t5jtE;GhN%&v2qwz9 zmD0WtY8HKo*?lyzhE=1=)2B|Ro|Ccz5sK=k#mbLGAe5HtG_IGTYcFBv#v5l$o&f2` zM?kg2gVGO}Oqd|)o|tX@rn5}`dHj=3u4(x(rVYd;*7zj8c%)*S^gHMAGwC*y)z$v_ zk@O%5k0PrXdru3g=D1ZeDHloasW#F}&Z5K!wsNoPKP=#vVTgf$mB3^ zM;4`=ZpYQhv~Q${m-}LQwd9lKV);N@(^TBa-o3}R@!n5H-JvNU>$Hpg=Oet?KwP3p z(E?#Vvp3Vg>JLIWRfa=2uT2E3NlJ;a}Cy6OP0y%aZGeem#E!G_2&*W}ohSWyR?oE>KI2A-bR+V5jWZae{JpnS& zdwN z-BOs+EnNw2x%I7bMZSvRyXoiaP87=@?Xd-Nyeh#82PDtUP|dToWw(;r+WY7L{3rcJ zu?n-MUKiblai2=$v!`H~kAZ3dpW?D*5*%umdu4huEjA4$MyNfwdu!gp{76zony!G6 z&zTjceZvK|s=sul$&~@rJEu#1om$*s_%ju2<8#4HRnGsQ@XIo1063}*(Rbe*1x2Z|068t`c9Ma9V^pix zpi^BfnBq5aLRZs4etaDj+Xz)m;|#8_nBea`9$;;L00~MA-_mUkG!zlWDSc*bHHHw; zAQt~}{gA?-ntogVogzPsI%qM*F#?Q3lnBDLAY|KBh6ob>g&;(2Kn{BAp`u5UZdBs# zSyuSFYufyid{Fe@U9CZZB|Quc zF}MKb03IL%JWw8HDLU+ z3i@*_akA=?r%U|?`E5i#?vh^!bqZYxR|J_Cq*KsOON}vQo8_fyu8PDd^F4=^iFtH=YEhncn8qDwvw3dgjAmZ;+1rwopBGrEFeZb(~r+#uDUAdxc zW(kzxJtK=e#?{2WcFqo$qF1$!xIXSNg?Ey_PrgYAk`=oOMA1uYS7SSsmpGf2$;X7j z?0;SFF9Su7eWd&eB`oBzW5{Ac*N{j48`^lO~1{a@JFfA2N>AMGgrgVF3& z4OtxJ0}T{rtSs?Gpq6csua~R^tVHS>JOo8lz_7OVXPf1qG2=>PI}GcC0e+KDfRE@J zV3>1)llHyQ=a>AIC7ux5Z!?F<&D6}+t@le$2h+OGx7VTUZ@W*0Ft|D)kY>@aG%&{< zMw&$~q5@0fLVquZ%{(Q18KkGY(f~;YnlgU~{WZpCc$~uz&{^jY5tvfg33L3@Rve$5 z6n*=#ht^5tK{nou0jz*i(5QtMZ!qyOrf5!UOjq$gf_=`sa+gyxuK4)syTsIhd}?Jm zzN3}!s7|2_!mJu!yv-ENK}Sqd0+p>Sgxl%1rqWWnId+`6vGV#wGT8!hrXblXixsTT zJ3!_E&s-B2&IVj*<*j4iO==wu8)wG)Ma({KQ-KDMn_8e2S6HW!orbsCqAJ;->`>Fr ziHH+lPhH293phkG<*CmUmSA>X@oF)}*`%qQizn?~3Sx^{EZ6c(L%Ya$Ps!Xon6WxK zm`)gRx~tu&iPU4P2Mn5g#%@8@5R4t?X6M^9^vz5uqFe%ulB%nj3wovJU@x3Fe(R{R zIO9?V0@x;49L(y=gvvXd7e-3;xj?HvvpE*}b;)Jk(a0Q3^2>G@*Ky|jU&w(CGiYFl zAn$SG)cM?=rQrSc3#By|OZLlkoi%9ILaQggCY6)VI33B|EQq2)Iq34_`=JoYMeo8n zNOx%wi$yzViD-5sLR>^LP;aV29z{Cnx97EQ>$&74CmOvqN8atHJMX`XJXy%zRN@js zBmN9p_V|Q!AYoESBFxtaN-F@Zg~j5-f{Oav9o$vsp?bSGFFBXe$Yb&Zno%ORuocCE z9yNYR$`;KdbgkCWKyhtWKv|M1mtkr7vo36%p3^0XPEpq?z^e011b5|`=q z*3LaeF>&P2#qtPvnlXiG$~{OC%^IzllqA+BR1{MT`MX9A4BMH|p1~D#e>-%Nn(xY27 z4iB>eC@!T#1d|ztJ&vwJ!B8nfyM(&;#o`&phk|av*{PAl{*Xi%%Jzcu#MmMRiR8{A zA@K-+mLm<`P_k#+-Ew-t$*lli_T$aB?CB;EjAFW+xK9WX|M(PyY{lVump|2Sr#;g` zNi=;2MGrq`c2|DKvsFDo4YN%^3Q`vJR1r|+#1R5H3sVpf1JZBr*mxtfi81Pc;EQAT z{KhNH_81(lKc62Yt>oAsxDlQw%hP)D&Vm$Esznl0_Sbrf&B{K0&JC#!cUAH&>>$`h zuW9;f1n(~ufvM3$+R7WAdP8k~?SG%?j&+UtPAa0@X(hV%J z=eXxiN}3t4O}Rl_7Cbd0FG;G@-M8+i)<1_d84E@?u)SirbAw~t)f#!*T)MG57<^0G zuSBXXGcepkx4VW!SMX!(-6qWSu3SFyUoNryR@~nSUoNqz|8j}_`)}cY7dP-vW5~ZN zhtP09{)gLE(=D*U7XaD6>^mH2356z%1iJqRU8H9azSq~T>fW5Dy4EFeBhi02GbVkV zytSH2_b)=(x4o2rQE9xt`AR3LIwN(YsYF%wQ;v^I%z7?U5f9luKA*?}`Pe4CyI4v1-=NE79ipHO!?hpB#DcFi z1W$%DwlT0AWkKV%q2y#PR3WVxXRKC3p#WqN@=Cd9i?%!LGAhj`ot-50l*Xy*Can%@ z5gSYt@a0=5w`EbZx-pam*}ImN=>$cugScX3HWO<4ob6XrbZR2< za@#ji<{Xz!=l>SNs$p}@$7AB88wDj#GL110$sV>KHLMaAUv1QikD-8d$uL+&t~s$I zB9cqYFBddY_1lKIO)VaiO|Mj(!O;yoxPSXxY+3E;8K2R4baYMvbzXoOzV#Ptq{w7{ zY&ns|nW?Pc?Hp(Opry5`Cq`ahg(wFlgY%lz*W9c%9j9?9VHyCg4l}~hnznDoIbU?8 zKKYr-0lj$pSl0I^iR$_{qPxq*c;;ld1}0mq8IswMAeh_$+5+fuK&0id*<~qq9Sk96ajj>Y;9};XEZNPerzkxZRS?5C@m&lCy$UGEU zr1VE$Z8VxIz!fET{;0tkN49c0|3D7AIJ-)) zP`A~lK~*nOwPDM#2#IMdv$f69f2gheEl$Ooa=J`BiL><6K@ru%R(pUiL!lOnn2JqE zHJ7NukRCmKx?~rG4$rR_7ZFu9#GbWiS1@D0NfFh`Ra=xfOQ9BAzFZwjXP|GmEX3bV zLTvM4o~nm%N4OUkYxSJ=BNTNoV=z9_q#_{{fU82T{XD!lDof^&-5uhs|< zKJJL*JdFK%!i>;e#;TH&}6Ru?>|0 z31*fTDFYt3w-^|y0}#nKT(S_rml@-XPRI{(09;mqsOvNg3dx)q*=O&}Z3t=g?%Zz} z*MNBgz4wfH-Vshu%AM<`a@S9)u46q|UC!vuSQ8-Hm2S7MN-%mul(efC{MPK81C*(7 zDW@lDujp<|D0F6#>NkEEE+iGbqNXT_g2g$E-Djr)y1mAzeN@kLW<6LRBHy3+iht%r zsQ2bx0?b6s-Yj$C`Ye3%Bb8&1>|99(;Od_gYKS&_6?a=4>+cn)T38{i8*I;Tx-8T| z`3bgbzikR(RbNTL%QsnN^!>Dt^mR(`!)K7L7rVR<^&#HTEYJfBKD_pV97=!C3%{68`9FQb!rtu()L;HF>Z}a_@gCVZXkKM%Xk}I|wE_>%zv~vGsJqT5h>&VYhPOX60 zJ&vjnxf^YT8U|A?D8xxQgG~xaekD8TQ{X2lXLJ@~t7z5$cdAugbwH~#a ze{xtxs-Ao~ED=6KNrow)5g>Y32nZDL3CXM|#VM@dkzpqVVJXS(6wcAVES7?C-*X{4 zDLSuU+`XvvUcOA0&c#{4<7DR|pI^nVM$Zx%jv;#s9Ii__QF7zMt~gD<|NEvM94Tlik|aaL`gY6lE>#Ie+789JhYgY zO+sm&Nk=$7#%$<2YX6xmF-}eDjYvpcjEF!ACmZ}FJ;4;L(d2v2qGpa-t0`cZREQF; zGXX@Crj9DTMo25OU{n5eDW!NH0R&DSR4{4T<)tVy(;Pr9a~pC6q!ar$)R8Cz$~XI3 z9Ys;54cIlGcWbk%D0yO%GE^%V0*15?v2P zNEBPJx}3%BX9@z=f-IPTY8KHlukl~i@Qo=Qjik83GfAf_<4&-Y7$_A5`D$my=xJKy zp46mq^&KLw!r3p%+$uJgdG!NuvkP$!6^!sB$$#;R6J(nt1ba^u=}bG!RsvG3)*`ry z#aNh;up@QlYc(c?1^z6Ymc@p)$N@~pGb_`HlM^jEY+;#rce>gm~MzI!AUZdLpD0)dul)1kbF3|dY5EH?N9V6bPgba!D5bnl=kc;B{0}{oE z*hv%>?ke@Q&5{py6%)z!t$OOay+EzuM5w;Jn%%jC(=F)4g&a(_c{{L`AG>--z27hL zBIWf7w9IuG9Ia|f`szGZN9kOg>! z^LrD0=4VR;2=TyI{HoRjcE{ls0zpjY*mS*f|Hv_F92BB$mzPGDL zC#2nA$cv6`MDcaakKk<~$j6uD>!bkClNsY|8}ieQK<>F=3U*KcxPQT?#?6E#MBqw{ zaey|#A2HGzAVdWa(#hE&`VWZ8^#aYbm$f^Hc3|nGLmW03h9a+LAgv`Z0(%CWpa8>C z9O22N5dd8w(4qi`mcapOB+>L8!=!LdI^9Hu->~RvEz_+nQr$K`j=dzV21gex0PMMY zcm9$&^ePbrA^$Xp12g>GOx{BPN(`X+s_RIA9H;1?(k&n~M z*Yyya;9>~ys?*zk?17(R(ul&6pKYMJda!}FPbNL0pWB*{zkwi|c3oGG?A->sA{NJe1c7d< zJ2FQo&kM49L(sX!a(CV}*+=PZ9Zdd>ssu4HT=kHiA`t7aH6O6$0D4y@0G5!k0U7l zl36O7DpWAJ-vKX_FU<}qSV*VP-pTF2{P6zu6pyQAi%3ox-R60K#~S(48P6se)F5?l zL&Du_dHbUGhYz51|6j|{;ak6T_t!Y;_&>Tk|GQhTe=HpTi^C@=s{F4UO{U_QlrSSo z##7sa=GIlSDEet{&bCmQUz5404k}nOBivF*XETZ7v1u!n`t|oWikku|qPR#XnL`rh zkr7UtEBfkhO^W)*x?3$K$7@Ta&cP^I*}pKInc}b4&KVPBDJwh_w9`!bjI~L`O53Dx z>D8hF7ycf5_!}@Am7R!an7TFEH|Sj221UlG7lz6u9wZD&1~Z)pHH1nfBGNG@=_Sa! zM5W8E)L-!i2@R{E&;A`vjDhv=VR=+qmma_-^O$8dZmF4Y*Wt`3T}n`sWWP)(Wn<~< z>F%_+Ylq}TbSJ(O4I#P{9~KS4R9*V|1AG>%j$a#5Ro^M~hqilzw!CP9vem@+p^EG8 z65!vl7L}|{R(RU}@I<&_JTf2xzQr^C#rwgC41iQ-4C0N@Ps=S%SSUGqzD;;hcSl&H z3I`QCng1zPU+zDKf*MQw<9dSahs`QR3(%k`k}%IL&w-Yvf$uG2NDWNu$vKlHC8#{XU-@c$14$N%%B|Mip`)u3Fzyt^MuNey)!Y=h{K z4k5()V{AkPfns1vmN*Etzw-q4ri&^LM0I1-!Wx*+WU2fyX=l4N0B8Pbq2kO-pUU{_qEs~)rtSq519NWKX z0p_CE@Ic4w*)PoiRT2P#Kg`9PfQYe_+348uBT7M>rP8#rYD9vXMFH^`b$gm3vrf>_ zeOGO{z`WW7-_Z=_o)jdhm>Tf~ZdBTe$C;?C{VE+P?LTob6|^(FUUiGox)vi6{mAiq z_FwiDJ9$4g_g@nLjMUg*90;fqM$%9t8nno>tPitlA#HJq$otw*cZc1XytZH+wS$l} zg<&lhimKtZIyR)JK}zj+tvap|jrKeWk3*Oef?yR{4fIaIh5Zm;bB9jdnKh!B>8zYK zc|?UQzz+%mmDYtwsZp@`ef9KscbZc9eNEbS8Eapj2_V}(D9IRA>@97{v5w<@#ty;R z*@a4@t@TioIz8?$0b%u-1PucSG4{LyZ*(3qVjjuod`R^R&hlO>9SZ|KEp)OIH_Z3 zPF;(d7vs*UrJ|tkX;lH3oLl<84EJ!5|vL9BdFyP6Tq?X0|KXcNZ#>JJzM zvnaGql*C3hiaZIowumNEQy&?er_sZT4Y>-HFDFnc2UNZA3N~5>ds4niF|!Eb1J?r^ z%+ymL)=}WdguMct(GGG;tP`H-I15NT&)6dL5<*A+8mwRw=Tz~hPV@4v=ON9Tl(@M) zFm!kM;b0!buZl$aZ>yi|u-hpl`cn|j?@tPEBj5uvS(pv! z68;Arvhh|-?V`QnbdDIxAhhuYaOiL)ji*(#zE|)g?ZRR7XwmQ`zYh60V^7H)wc(zB zF&U4Xo>FhN54#eoe$cTjlRaIXgF`bElK90drPY*@N~Y35|t|LQ#KghD{Ek z{mA;ARCZ?8jCQnJx{X5g{g@V-rK*fI`H+-0lC1P3jM2IXu?!~^RA>}wP$yrFsfq*z zbQwvkzM1^XVV8V1qwP^-1Ho&~#szv_D3=qWPQ2@mNRRr3*h~*`Mm+m!u5J91bl=>@)bV&`1AvHvzA^&>n9+B#W zsW>Wfhj*a%S8vX6?z9pd_D)i2(dDLb)4!Uaip#6Q2Ut@EWs%r{Ra;q}W<1Sa=VHUO zzNxS?!(?ACPA8SulD}Y)hn-_|XMU7QYv@!>YAU9>ziyYPaQ3`?cuBZwh-k5`S}J z+oayjALg6fKYaRHuF?q(z(P4(n?QBCh6nuUP!WRJBs1XKq}$=@5Ei1|q%>foBB{`y z9V);}MCz5%4FDqPjvKMZU!>3x`k6zuEA+K+L484wp*&LN_jIA4<1MbOp~_RV!(U0B zZgio_Z}_0f0=qwSf2z|tK>p{$P{i!4=$FPeUIeQ)9uwFBPAUG}t z^tTVYFfv{Hy#)TsG7mRVUS9^{iw;jX`m61gOxNYWr9DD2J*S;-VmkW^YTB;EUE}+T z=$D5p8$9j7&A5Y5WPLKTGGb%3_(!8RWZD!%f*G_!gq~3&M<)YT>>mdX2VJMfYtqnW zcc1BYCy8LjH+1$82#OOU1sYJMix`ymgAyz3Vp8plN?nn$=D!DlIYm*A!U$lR;QHiH zHLKiyTdv}E@{f=od=bT+q)tq(txKp)oiN8_OGec1OdZ|*Ln?H zB7a%D$or(Z)yn$sjT#Gw8OFelb@RqWO4K{?(_<0gd{b7Rf$)vKOQQwYR8*q^>eGew zE08YN!F2<1e1b-9hrVFLn&chj;~YJBItKZDg6O4O@2)9pz<}yN5$BjK|6ShUDVg&P z0OoVY-3jLj9s%Z4zXKwN7u*{Hb{zFPFB=o;E@6VU4cFQf%Lk*^(j-9>u|H9EUQ!>(yBQh&cN7KkNM66KO?SL>DK(B$oPx7ZW^u;mL~^I71K``b4ZaX* zcFmoyFoydFX7fAfp+ihvXtUyn=G+sIEpjT#O{=vHOOv9Dp0{{KJ!B zZwmVFkldc1HeGQ%^bU>g#wgbt+a6ycR->p6jMKdO588t`qBdC8RHRHvYWU24Myo7d z@<^K_u0KqFO>ho|#Sh$vRSL%LESW2p>s1`0atv{RCTCjST4Yuk5Y3hIR@`4Wf#~|~ zW|!M%A9g>z`msdEWi<2CJwjJnCr`Ft>5L@tn6ZOZyFoar!cj`i{&0%5GxMtAg`S5f z-ZFP7TLvl4>ax{?X`pj{e{_09|FSFOXNT6I|5GSlSLHx-e06QnqWw!K{-2pl**h5g zhsl)Ue^Yk;<8J?cGDRXUD5~&(3sDOXWEBK&wN-1ZCeYF_(Q-wYB6O_N4b_>Z0@hiw zz;8$jcI_)cv?JEb8~SJO-rdAhA&)Sdv?WkjsBgOvJ_*sx?ZA4gc&Ti0O0UO^RF}i? zRAy7>*QKrQH~1Wg?q}PspXHwF7s7vnVLV%=gTp=5&-!9~QF9-3Ku?7(JRrd4gCF3p z8+OoSm(C|hj^+E?JVF{t>vRMx`dQ$ZOHRXLXYU*tHt{jB<7GL^SIdA<*P?*0wwl_W z5Z|U01BiodLeBg`99`Qe4%02!vpT6iWzVqotV~lbM8#Bs%DgE{GOVZ#kp#iTu{P3h zqitt;lLc_f^^d0ht(^RV08b?qOAuP_`|oXb-MTa2ZJ=1Z{Z+-J#ZsEx!F=32$(E1#nbzvB9jhHedsvJroEUaRBWy@p2l6+l-Ab7 zI0dC0$B4p-oJzX^4&#Vn!o?%^tWtz3Whe$Wmb8g{$Q;hiPL`JUVyc!9c`qH)8f9|3 zqM0e4Nt`rgMDaK6#m$;crT74zLeTf|_kVBE3M7|#(#GJ-xRVk&xTpYD7)gxK#9GK<14NhY#@9nD3eNuCy z%<=`ZaGfFcA&ZWlN0t0Wg5ErGYlfM*hIO*j%W0nV>et!-R~`%xaVexlwcm-T3f;~> z1Y2~SkQ~^el-yVJ`M_yoQxOItghQ3;mUX6f}4ze+t zrsJNZi=jb%w7RG4FE1!v8QIa}k*2$ks!OAt^T9K%;SE%B^Cqt5k4$tkT6%>>)|kF> zNj>iL$#8MJsglWAX~y#X_q4PhjdUvbI7-GP?-IEKdbX|`|T%Wq8=nMCbs3Qsr#xz4YQpAyG{EA!!;eR!M_4#{S z4iS5kFic#B;d5&^qh}epM(wx-p=0P8yKY2pxCZTL1SMnW-V%=>p7)^i3B$@i)uPkS z;lujh{g%P6a>&-b6HCr(t4foTS9s2E`im>VxhmZC?YH-dKBN~*(H_BDs)@z%NZU&k zkv9+2huRQ?iYoqZi64LVNYCY*-$I(9pRQTtvU_)kv<)(oRsNTbMD` z75lkODRO8m_fJaJ5r)PHn|63!Kwd)l}!Jr{h7(XcKV{YMKCCD{-TFRh^Aew z?X5MtuoQc9sMvk_AmQRQk;0Juffeq06#;k%2T&=1&nuRe8AD)?!Y?{~{C;9&;S__j zoS$(+yZKV{BUFn@D=$EnINltmtU;H2T+)6{V?A`+I^QYaT_iUZVUnXMbMcKoHTAAP zQd8}dmiU_}2zl63MTorF1hQE!07LG_X_)J4gsJN+6q{Tkrc>7AHoUxTpPa1}XA4N0 zoh`c~r$&LJGdLJ|CN*bwAaY9tZZbn0&91rt%{GUqLx-=+MqWR& zk`huW3l1h3hgZS1*v^eqE6fGJ@l3Adr?<5ygWb}-e*QmAT2s+ zS}VY0EyD8RokxlJZ=_YiL8&bZ8VpvnSd*ELM6w_q%1?76tx7O7MUjcpn1w4-ZlK-d zSb%dj%Gu!}&dbm@nUK(Exj+Q@jnq;Ip7rO1v?5XcOe2>)i{Pw+dC+=@Is8%jfARK~ zv2iF{ws4%7nVFfHF?O4onVFd}F*7r>V>@PMX0~HyW{R1=&N){zbD!SarynJ`Cw47kxn`#K~kM?JkU1$t=Hxt9SrNSjyTCO zx3?}rm*!-pp2(FmX%<#YCN-H3n@vny9=W%Iph8aQTe6I&5a*MSA2CDUXU%%c$*2wpf94n&J-l(OS+(1<2?L$PV1(+m6lJV5l1;>7}#6*`9V=g;)Qp6j4qmJgpz z6Ef6$q5HxuL~qQMWM(TH&V=_sXOMBCXExxFW^n81dzE9(3ANXX$4=eYWY^0dPOaO^ zs+n}=Cld`2@q+F~5|}7veR7$&x$>1*yAEejDq=)WEfzOKNOo6x2hEO0MFv+`y0((3 z-~*U!7|DqxR=F$YMijqo6XlOD7$L3B3>HMXxv-YbeQ~t=T=9@yV)KDRyMH1|>Q$~) zpK7(-=d8C@qh=sxISSJcCnPmA!f){!D&x^=X=0r$h#6NSBAOLh!Q42~tT*V2#beA% zX;c!a!|Xb?M6yeSQ4YXEp*ZFOi0Ous*NLrJTmGR!`us8vTTv&`|PkZ9**RTLqu1k;b%ulRi>eJb-r7TD8S*+P@iysNpk% z7_`9%J;NG+=*E?}@i~KvJPrN4Y!p|AM$~6U@gmM=L(PJlTqOimIbTf>69SDElny|t zBtIZO!ARf>HpY}<7VeLhTA~jJPtzP@K+xxnt56N?18s@v&pE1qzfTEzdY$So!&#}% zmMve6p6(9^J7(|ivkT2GM5!L)8w@%Ij(N-M+)W9fkWJ2m2=HayiX@oeJQah9hb_U< zy)qJ@70}cu?={KQzzN2b22a_>3RZjN{InY5TKIa@n*jS)O2h5Dfjz|1y(_?(V$L*j zkJ~m8z~A2E;~dyxgndC8kh-;MkMpITof@p!q`Iw9QJzC>bn^)Uv|SRpea-*q=gEsX z=x5rNtJf4KIhE|g((V9x=g3$dqLn+(hjlW?h5QJHIVU-~D3{$W(0aTk*B#qxgV*%& zhOnftvfXjPXD_+lNCkO2Pv`Tm>`a%$hOd5rIAm$g%;{Zy0bgeJ**s4|ac-sbPP zF}1lT-gk#oe-Gx3)$Zjb^i8!F&7BuR--y2Z_es~ZE7lEfiJ~jC+NR*@WwU+3w}9esjYfwu)*SiTi?U7Mt_Z;DzqHB1#oVnN@ zvQbyGBs>!HBbY?vtHJa3W4J2mB<#u&9E1V~WEvWKS~XR^isql^2H|gCm^614yr7)= zoVgb(4cUh91f}%A?Z6HS9pcXDi?3bTXN+6b6l<-uk`7nONEvy&sF8h%_9}OMe|}x| z`(t+b$Z1lH0!&EX{-prQ1JDvL6Pf^tPMGsa!s)sG?hP2~-OgI;Yx7OM||Oc2y83wX|5pHDWcyv+0hPMCdp znOeO3l>P%FmLa!0wtPXCXD%&VM|!hi_mkz8qA8Sa_Y=*pMz^-vl#|%Sj6LzE*0@fVMPRp@($`K;aeP)&!l1u ze7eQf;G1vH_;!v(I}1lAz0_cn2qc1wjJmthM@f?)Iih^n8dtw#C|t2;LQzako4Gq; zC(Co(N8?_1U*=d|2QFzMw(uTl+oPPU)p;pUuh)#Bph0?V{r*mKW`G;@+8Jt-9SNWg z^;wKY@ij1GUlFE(lqCM{*GgKR$AB`3~e{xX+^V0F%UZwp0K>B?+ zOO;*Y@BpgIg}DpwiqvA>b;{xR1DxfHCOPY#G^YAk{wjHLwQX*o%$M?N*u)xxE%1w3 zQadr99{us3Mb|8Dg{arUDx@pqAY;S$aJ0KccSLV=bCc#%iwF)MW2p9EZpA}5sRbD7 z7O#QJl(k=!`M)mm3yt}t`(sqg#==@7S%K5D`5Ii~NLEESg)~1DY;bl5Orbctl=gM>lrDPgbcnP?2X*}+U$18L>ldIY_w>KKgcAR6oQ8w|ib{h2nBfg@ zbOvhS|0dpq+LIfu7}EP-Ja75kN^%k>dPo={(L&9FI(Y~l1cVNh)!6URT4Nd_qJkN7 zw$Y1mQ&ZKNW~dM@*hl2pK%OPX$nX6llKh0EYk^zZh!-@k1iWRQo*gUe8UojkU>%Ek zDt;+?G6Jf82H7}+4xVSXZr5&9;e<;3cEf&fq}V)MwYGRO_go(y95690yYh>zOJ zB&LKW_K@EJXx@WZQ$M8?UJw9=qjMTlR#T)X#9`m_I&{A9`9LS)^;5Xr!|F7N^r(0R zx27jBt50QjOz=!#F`q8~w1}ZmS4juc7>985Tp^JfrEU0WkU!oQ-Mmql7yzA5`eNOO z#X;q&R6~OC)rsN^N=z_PhPiHX_QDkG?pH^j0}J;=wf}A4`BSS+s^F_mkKi=AJO!3J zg@+vv#&Jf#9l6vbaUhO1tEmI+4$haXMIGRqjs)kdpU2NE%$b~B`4Cm%qUE&6_pDjt zg%>jS)AZ8@(#LbHrd*naZkr%|q})Z9xgS^9#PO1Z zHp`|VW~MG`4|wUK6R7vT9lOQ#OcZ7~EWsB~7D{t`ZAz!-t1PinC1}>rO=g!Iyirn4 z4@-#_k6{ig%vQb3I?&6WMMNfdbB3z1hicB`_L&CL`trcoi1}dlkOe z*59Y-*==V-?q@(>BuQPw0>w}9cDs6^?oZ#!ICPrra!bpBTJE8{ntH6C#v^JffgA1v zAY=_RuXeE4Rm}lp9CEO$orwl2m6ee80IB`7Kzt={iRc~{*$c1oeF9BeDQ+;`3-gBR z`He=h;DgKXbA!9~TP5WyWhr-}kB{045~iOaNPVuspndScS+H-gZJ6Mgu137Uy6}Aq`CJU?@zm!~=|2eGS!y=BDm6eXE!ollET#Gyog`4K60D0kJe`djKGG*3-|i% zIOgaW*DpZ#-TCIo{IZ}M`l(zQUZVZ`t>5ei$yjv=c2fAXo8&TsiO?vXVkJiH_Z4nq zs$K!{Q*vLdk&M+9j4Ms87hd0_A&ca$aii${8;?xGryE|`>Q@nb3XON}n4xUpt0wq| zG4}vwUA@)MzC*Th``0$fhbBu-9=wx|y1{y}+c`j28RpmJ_$wvmcKSX9i0!G}80db` z!)vz%*}8j<1$?t}hMyBP_i78WHTM(?veoxy3$nHM5DVxsDR~m^t>j!fk!sG{xW2XD zHoi$F=q{DEyJksz!rR{9_mZQ_pS73AV2-l!i+97mKX33z`CVVbp$w0eR za(MM3BhEFn<4L$@4at&UgOMX7oq#6wI4ber z^cZz%t-o|?_a&1rEW{l`Jv)x%h%Slbz+4z^L~M0cHox*-`o(GK1M7w%{&^+ESNtQd{BTt9%stoOu1I5~ zrS`aP26j%kK@Yo3RrP09gS7(Qt&s8B|sFb;5xN*J)YOxgN;@-d28nq~q ze${oM(56MSQ?{)M9LjOwvc>$yX*N}L95Y(em}~R0#YV+}Dnu$?)VG|Fri^ZeYyNkS z!KP)dj%w0;EUpLVRS_W#k90ZZ#Oz=qnMfm^PLlB|X0mKaNo{4N6Q(5|gPxLg7+OS5 zGOvjejl55+@hwtf@HxIUoQ}8cQEI&+6Pp9PB8p&5@@Oq@6yZBsCfo;7rypr-E8j2qB_m2MoWuYei@Czr=oES#cCX$6unp% zwJb_`jEx_6zKdyH#0XCU39BBwBLQdd_&gqGJ2e?Y`1o?yOGCRB_%9y3eI%nKgCvtA zJw~y82iK}HjJ*c-?Jg~(PRrYa+@z0{?Dk!aP)y5_k8+2Ac%Fh?8@os(SFB4*&|iAM z31SH`KiV)w4b_fpLkCYj3r|N9S2VNPb5K|ldRE%dZdd)TN(pZ&Q737=o7gdc@Q3q& zlESf-XfRe)sz3Q|o&m7v#N(~#qq~Z^aF0p0YLXsP4CDKJ_BIt~=90wjcU_~rNIJ^S zGbh`)&ekkyaWC*8TYvZT;nz`PfkZqRzBD!tVoKUhNgNp&>cUB3h$BSo?i}v!pLREX zyW<}^k&0N8lm=o7Z=l#Ox+i>Vkj_LOaT_FTilS>emj)@j)c`5GGY_fQ+&ivfs%voI z0y1T!+O0tOIU0b@=+BWl!oota1%{eR1daqu4LpK6ielImeFd3i8GGEL&&*MH+jbZc zgGa6n7+i-NcF*_Ea5Jd64rr^k8ZTvI-29zpS7q3_#}eXw&`EyaQ0k$CL>z-?}1mBAjd)IgRX8)s#1k%<5Y0qC@Aj^== z{WG8L)$|uqGur}hoCD?!zi&z`*U%+(Tzzr0u4q48f!}4Pa34ZxxRxo+b%quv+&cY;VE~HRO}`ah{Eo{A>r2L<6q7Zq_MZx1RbqHfl_?yAr`$21ex!AWInf}Py)2;_Cq(ns z6mi}noJ@eDP7S+_|F){!vpKEDF%YwbxopOCQMZJ|tcp>CZYjTjE_PIWtZNbLiy(>< zy4IKBX1~r*=l9n&u0(m&h%HdrX%F|W0{nl~|KU%a|97eN&!$yLs!x7@3_Ix?H8gZ_ zcRzuI3kH3v-LH)$w?T$1r6o{^MezO(&}!A?8?#c?G(muPpqIh%+Fd$OU>& zvO7%ay-?hR_;S~^)tY$ilm0e4JkNOYJ)Fo$duac7+I#`dv;g;uAwmZ@!JaemV)kWY z;zw^IL3yFDb>$~LNKbh%Bb|(G)LR@uIdoVj36Gfg0BTuI$0VSlMkZ6B%9l4f^RBJ^8toD(m-A|_Z{>^S{BLPnaPXw0 z%*oO)p_1DP(Mef#`0tjEDM)#Lq=AjGuPqz0%Nby@1Xo+oRcNCZwFjp-37T_Dd0tF$QbURo5B2vR|E=-g2e$4fOrf*N*oXI)Y44(*r_CL(%~${G+pF#wI#Y*eYk+hvk=)yF>yApT`}m;+mxYMnrkXO;Sfwa8m2b7_%*r` zP+Lp|ou1YRqZ`+#`^8cVLdB}lPDf-0vq&h0gQai3swbL`vyxIZL9i%Q#Vb;%aWDKc zNz99-*b)A`mmr(C-IRH&z49pVNi`YnYN*qw(B?Nx5-=C4yH?Kq&{|WgN|B3w!-iqJ zWF7eui`{4cO0G&O}6j^r|3k+GsyJCl$Rj-TQ3WE+<6vml}afyGq zQ%C~+DS)08WPqf}XZcvo{UX34$xzee(k&uW<%%Hh3~v7Kk;Rs2{pN+vC>TDAlh0vkw%-J)w->cXG$j!#z(Qp~!i1e`?fQej*>+G?Ud9t?P zQJi$YD2U873f%FZ3oGjuKu^Ered{TbvuDH7Nj9ewW7f6Xj5{>K`T3!cE0fXd#?xTK zT_Ab2t$hPAucXkS6Vkaa076#!Kyq~&T)vgioWI2zF|}0(y>i6`hOl)5eP7EN-0ZJf zPw5^y;EPTWkiTVN4$YjZYX7O#AAe5+5`2pC=&PWh|9}GeA!ErFVI`G2bg_R-L7_eY zEqICsZ`Br}HJI2|wS5Lt@aY8R5X?lX|Bzw!z~=~t!E4yg-knni<7*Z4%}|mMy8)(9 zh9M@@P`lbkLEOGaUtE$$PWo*g z+D@Dy6YmVLnc~k52?Gy1?(hP(JtFP>JLEnb5IG)g%*h`$N3xd1Lj;jldP4AIhT%fV zkekBCc|YgGUVRH|GMvkAJHK??$_KqZ+`PL7zyOSJ_$nxofBSe!#rr@+g|sGLM^t*b z`#{+_7g4*rK~?>Bw}Yx$7rC+ux(4~_CbX~vzF<9k0B;RhMlyD(vJnXLvkD-lyw}%DhNlwY3;fdOrxgQJmT3Lp4u7(|xhJLjAbj>M541yYi!QOUbcnKMaI3*OYT5yW%Y3x}s`yvZjFanq}y zX*aVaUA(<}x=C)X(yghc>GT~9uqK*EjcJFo{5W?0Z2(pbo<9E6N9$@0CKJFmx%vP2z3sorx{YP!q9ry&Y})H9l~5VOTA z7y(Yk_9RjX<3Kq+4)7~tx)3~k+XC_f;sa^}pnEJ%UFRq|8Vm&%&Yr}sYx#c5e;P3u z3kqnBpytJ3`voQ0d9Yj(waEk3o~PLR=wMz^%_%H99A&JlzGJJ3mz!zw^~N2h1*WI_<${uOB{t4U>4ng_*$yK4Vx0e*W`k3=;p1y7k|2k+u830y6h& zu>aBJhT7e{At4;n2;<2D#CP}wHg5~PqhR>9r zUvCox*C++?4nj%jQX5AH0cxb7V_VTu2{HO7%~FRCb3W4AVv%7ln~F^ua}fJz-Rg+B zwk1hYySgi6Nf#wckC{--=&~7IlF=H+O-or8`nboWqYfV>M=2}O2gifHi*uxHWCJE& zuf)em)r%NSmV?E>Zqwv4@cGCWOClL0Ba#7bW+9Fy=JsSA>;i3F$IGN4{&?V1cz?I# zX1p>!VWKa!eH{I6FxK?dcfaeJP#EEAOhm;y|2jm91@l5Y0M|13U#|9l)%^X>A@bi> z`;TDnpVvEjLbC5GYS5I8Rf)uI7Xu-6p)GhyJ|vkaA~gE1i=h#DiuyE0ln4*nbx3;e zPXv;g${6$!54|k{nFy1Ii!Tu0P|lE7uJwhEvQLH7FhE_?bm1<=+yVo%Y5Q4H8tG~J zbV^CPu!?tUstqftP3+!6>@Cj{1yW0d78IK;i{0r(=+PJ|G>)V-=(YJCzRkyLQMl)i z4S_EN-fo_4%f-{q4J79ERS!;+;YO(rdy9tdCPfBF1hV%+(%pVx6ejXir*KA2pb~P{ zK^-M$+0Jwfe9w_y65HyKiMw1-Y76XZ|Sfef!9 z__N-5|8l+mJ8F@CUvGISfD)4{lOEeYFS^{=pGD`JQ(H;3Y`74ypJ~OSX+{(=2Vn4{ z4}8s|2}>Z7l`-p;rroR42BUoh@l8za-w`?<^x9s7c)*=}d-V2#VC?1>Y*@@eW~C28 z9YF(8;Vz6h5vfglA`jy<;f_KPX)&foWM*}CJoOB?_9W$89)}Ft3*PYRQy?|&4sd88 z;`{)lvG`4LMm1=Lf3rHtaIV=3LyxrFRZ{Dh)Ap(%Y<}W+_`%wV%bO|lntNrNXPIZ3 zXPYNzztXmPJ8~uFfJ$}$TH!vE!~NqMYPCt9(5fg(bQJmuD4QDCQ^{mQqIO%H9V`cE z)+V}rsJ}euNS)%2Ek9mvw%gYScQC6)A*W;m3SiH9^7Pr8L5!y==qpAAP_zmGnWe4N ziUovZ{$IkP{r@ZI{GYJs{o^uA&er-LS6NxHQ&OJ=QHQz;4o*zF>Xb0@0$kGAPY^|N zBSI*}kwH6#S$US0xZB39d*3y(0t4T_z5g&DDwM+f<#pxL4w1uf+3^sw$ngpP9`g5H zAHCqUB6XTJ(zH0jG2r&6`)HbkkYJ1KE@{5dHD#=&x%tcBrF(^llzn?9rX(3`$0cie zp7M7{%^RqmCj{gE6Un#Q8b{4zL%2C}=x8O~tj%GWP)YLJ-;RaGkz zwK>(@6uQ$Rh}j_>v!Q20k}8Y#R$zRLnu(S^_K}tKHE>8L#XTy}m$5P@ zVS^@7wUn%7Yu;)Exep84bbX&}+%@$kCJ&*(y z%d8X^A*>*ylZG~7-V<6SyPnnx&KZ-zj3w90v{h)eRch5aT|7uU-(G!5{{8Z_<~8-S z=`_W6xaM?8k^S_RAP4f5gojEn0Mv@iJWjs=v;x^Wc?%uNHc3AM)Gls|9cqQ_C^lEg zpB}1}Y>B#u9jYDKI%Ufh%9HdcDOb+l7YdxT8Q_nH3@gb<+OtaP-Ug}{yA^@VOWad{ z>@DHXAazxO{F(;pN8h6-ZZGIxf<@~roTx5+$FpNF6y3uPE`$Ww<8m5MwSs+94oPCwXUMqHH7k0k*4UFKMRc zwmO+jq`Wl$-F%~{?4(B%A^`eQ|D!l6LlYYtVuhQh!$%8gc6B*2;?DM5lr6dQy^|h% z-{%d>!$Z&g>-9^3=BI%-8=Wt(2TBPbOBT*0Zss`DmZztrB3K$On(WOL6?sg0nnua& zY&NMH8*9u3-ft5uQ+Br2qbUq5BQTL#w#eu;bYj}(=^EPo%yrG72EV({@dC(sn8a}L zdWKW6UCg(e1A1|lg#^cGVJo-WovT^~j<#z>5!AZRrs3v!gj9{x11B1Rhy#vmB$!=i5?3(B0sx-J?G?iW7%P+avGrBj0 zYh)N~RLUOx9EF9ch$7v2(!Rk~%{mpS%Coxr9&5HppuF4BTt2QCP}n2xX*4()O2F}b zRq;}iG7nQwWC&-vSD^tAmiLo8*U}Qz;LFSwk@fUiBoXFdBr6j#^s{4-;@2p*z-rCh z)0$N**dI)+i^<1kYeTuHX}YlUhL&t=9V2QHu^}zSLTX2uxG{)QQ3HwJEMa@!g(<%y zM+fltAJd$6vRP1^b?b8?-IccPL@xA%p3J$`NI{Ve%Nbcx3i0d;eso@UQ>vuo;(xYm zE!cMOk(~hf8JexXG{^s40y&BrMO1t@mEF8cX&4ZWeg#>oc2h2fI4iJ%FKhm;zKE2A z9R|^dZOaeC=B<&opK4E2r)@`B2%adf#TtvL*3b;)3;;1_1l|}EsTw2sgvpx|;{KXO zA^$3ZJ}uz*^=|th#YBS#S(BHu5`Ad*LgZd2XUb9z6yW>&)J2H7vVVy8yyqK63Or() zYPC@r!*`%=7?scE)R9T|98nd;kLZ`Nrp*jhY9INyj0n>}eZ`2#eGmjnXU+IC`Bts= z7NN^8yzm2r7z}fy4FVN!%kcm(7B5h&pV>&M{86wcjt)%YQ^fGU=3I4QHmylu@xRJtkOXXihsYW04zzqw{4l>ifaU6UCMwzlP5vaC)v>dCH4#cEV zu=3)h3hdnFo*69q#EmZ2#E05H*1bu_$#N#bD{UVn4b_fPkX}ig0d0zRMFrtqMu7}R0Bu-0 zAYSx#9yW*?b1~E-9@}$omEA_YJ3kI6*j-6V+c?r$tP~Nr3C{i)S`a2hV7suIq+Go_ zpjtKi72!)4h-Pq@QL2uLt#dh8J|D5%%!1#Kah6=3mex(BzHL-SRRUedsrNm#s0+Fc zt<2Kg{>{1WmW;dcCGni!CF7dBJOe2!qJpX$I`$nq@34$h=NYYrF`nw6mB54*`*Jyz zQu%Q$x-g=Jo_+wkYNvb{8D(nh>DvAPDKuupo%0P^s7LmdKMZ^7%pEg=ZNnJeJDw)L zP)P-UW>GzE8s2id4_n1T%$qp>z%Q_E_L~El>$CyyXbmQ}s6$LX%Gic_#O#)R|Ko*5 z`hhXOTR*k4m~vhysWY31^kv0tpL^5~+>O5N4&05QZC&^W2X}!G1pDTkJ_s(}?ri`r z|M<2bJi+#r0zAR)l>>av)|CW&&d!wue9rcj20VhpBW_3mZnVQAFK}qNcTk@ZZs+K> z6>hZCBX@|M{UdpZodajj_9|{?-*y|WtfPBo9~Hb`|27nS2^T3>A!lY!lkHSw%+!|hP697bU^ z?o-d-{5r8(`)4B`zDwF6IVX$zxpyS-2pr9~bqWgnWf~W^=qF5_^z!Sox6~ebn5fb9 z=E>ITJL3V{Et}F^>TIZ#say&R2Q=wWvR1@re2{+UMa*`aJZkL_G z7FJnvQ?mx-AG3jM1BP0(T-XPoa_M-*{*(Ghqgq;O{#2KKzs|D9xd11Ns;xL~PJ5t2SJe~o1jhjOz5)2q<;iu(^65FduF zjgw-**E(Var>O)3tUF;H8s&rCYDAdZGgO8dd(crPMcYq}Ij71X+XLMf$EsuKiZ+C0J$B5&ndBwA;@7=7k5q4GICYE5Bt&jM*37zu8EzDCOf8$2j zS6b6osCn#6m3Y`IYw7W?2Z{GvKy303nY98|hC>B*||dbaQGAXY*Iz8K~Q^r9L)QG}RRzOIy7U5GGHs z1aK;r)yRMKGHi2v>h2Lej_L4lMi-7460LU+7LF*9te3;4!)LU{_)-uFHW z^Oj@LQeUOSbMj1w4A(0 z7gWDSkP^Q=-1c~50;w9gZOJ{%F7;?1yfCn)D`rJ7-a+;gSPr$8Z2c3BdlPU9Px5Vu zzD5%&^fV#PuUzWeRReoSjoqmWw(gBZ@4W5ysMdFfTS2-H8uyd|q#2yw*DzczBKqIr zC&`9Z7Gkvq-s!di$P=*0G*~+QO>bqbf(fiD_|M_{p0ym(FD)VmP{#d0u(g+>SN7`8 ztZuegZ{lJ}C0scMF`6Fw3~m#W4QHs3vxM(pdZ6yEe##T*$0H?uiXJZGyE9uN>9EaU z8!;UE>bfdfJ;La!((3YnkmR*8(W+yaliB=Uqx}XRvVb0 zdh{Z-V4L^~Z)AF-3_}9Wf&1bmv4OD1tkuS^-RRA-HBB%J<+iIX7J9U!34EuGDn%w} zrg!tf&nMb<2yHe}vyTIx^(uB#R!8M()`4?0Y})vv>eJ%b0@sX$Y@JqpOgAY-IFx%6>0&uWUI_1iH> z)gr8pCeZrAs)qJZH8PCw)3Zm-(ZjEvD4u0gA@jN8)0d=Ou-*XFwKZF^1mI{SVr3`i zo4tr+y?W%ola;E}N_i?+(lw-f)rgK;+80YG+z@i?WaD5C+1?mt(U$4N6H*>)Ba4g;E6E6ETK<%+d~w(i z1r}ETRWbNi4lBBWTsAi4-Xu~lh_trihVgcTknPhK=lT0uRIf!;k;TI@*E#xxGs<-V zTwFx4)}K#Ki{IYDu0YmrT|U z(b~rw-pn!%?4nS)3ar}$5Cb^dO`&fDdZl`|O#Ad(@kVR--a=SYVWd35vQCo?duH6e zHPj}-6toyPmm7zk%_>X4RPEf?mf(LUbCpuDK-;uqDBn2^x!65>#Hq^P0@XDEC!mta!-t7gl8=V^hkg_((y^M5q;C6y6o{=0xL0=i0l zVM67bIazWzd3h7IHxLPRDTnl-M9twOY{q4AkhWm~Fhj3D%C%DcWh=!rhmO%$$NW9P z%jvRZs_HUE?h}|bGVJA^9h7KHAnJ9E0s}P!I8JBJn>^SpzjyM_5njASuDg2L>7y_U zPajp+stc>k0hOFFbzaCyR>97gUS*bWz)8fnQ*|Yj&RHZV^K^z3+S?%5Rt;zhJ{Nhx zuE?+AmB&$9wDUo?Eq=34M3i?5mgD72vLtAokU2DSN_8_^HOP_F=QFl0m5_xP0yGz* z{#&;nf{ik}=%Tcdn$@(C8pE2^Q1_D%2rWmt=r20EAHEq>LE@oCnsNsZDWx{!wAV>HWll#kkL=4zene zm7^|lR+TkDR7NuJOm05{PDRK1n31bHU!sfHGuzOUSBKXdm<;;o(N#6oy-txhU{?-g zgy2a2p6o5~9s0rz*rWmfmva99F~C{>8Sok);ND%Ekn}$xYj$LjR>}zZ9lqLgP4qK0 zOu&vP9}W7=%JldXY>9=XH8xjgB|&AbWq3{b`1<&He;zgpAgs%3qrl`xR_q@V?cnBO zRKJ0{2%^s2ucp@s@Zhd=Jh4bCnPHi`z0cpMaYxm*@YhBNDiuWy`Go

|H4>7o{0BB*|D-FUB+9LL95Bt+o~g+Ozx-V4XHd2djbEsIP%p6WgGVa;AGv;MmhK z`H^)=)bs9I<>v+-w22%(AIp~_d}~ZO;;8o$JDX5Qe#Dw&D@W7aLs*Op`;C+_t6Lhq zAhlsze{vA>z$TJn78D&4Tq@5F{V-E%M5Xk^VuFpG$>Qe-(E)tD!-P4Py6EQx*NvJb z|C{N4MHnLlx=0*{qOg5()y>v^mw-l(1bHmuzg0!TUzB3q|Mw7Q`_B>grx7tP_kZjM z>DgyR8T!S}LaLO9^C7_j2IKpUfXsAdr`J`L+}_ddg74w!?(G_iFb2+l-1Q<`|502V zi2&#BWUpI)f}|1hQt1;Zcar0l7W`$Z zy_Wrk!5+9j+&V)*UsgNb*RfE2r6^Sa_u9xa33;SrKIZ^Qx%l+lIptQqicb&$sg8`F z;=7$cvuH#bE(8Z~;TWYhF=dORs1st+26bv=I?m^q0#KyrBKhhWZTpkRlQYzPPLUVk{_Js+*tfr~r0fN*%>UnrEB-e+=>M0X zt|%cdA|uSi%=vG)%i;h-JNPK$-1gf^1aTpKt`Kt{G>DL-5IRy!zN~WC{+0to3Ch&4 zE49g-pT7(#@imAyYA*`0GFz6drPSh~?#tuaP~Yx4-?vYvpt~7bn~>xPL8u3z-ES++ zKXULO+Ppwt(j<>m7UF)65!)!rlF)szbRUg6F$ZLzv(Z`lwpcotVl$=ph?3Btns4khL_BCujxb*^d+!w`J>y-3{%B0pfXxnB3gBnSVH*>=3YiuceZ(6U^!SIl@&l848`uWKNu8F06&{{Ji?*ctzs5C?4I&h7xMTvQ?#5VZI-di76biGj5F{9m(vC?*FC;bqG5 zlB^1j7Jqq6^In{B0-4gQ>vdZ%bq!EhT?V%H8JQI>?TgY_JKeC(|g__!twdr&kk^&|o_ zISV{4L>;`g|C>X@HYWA<;?`v+0gCq$o}a*p`)>yECTQ;=6xg3~YK4dAIw_H{8){2SUap>}^W0_uU|4bOX+lSyv}!>2>dR5H$PMEk_cKjonrL-q96)-lHPi^#^>n7Q@Ou~ zf>%VFo2#eMhzVLD%?#E|F5QOWC@Y7v(fC#S<8HSeNC{DGYzOk@Sy1Q5ab*S;swm;{ zhM8NzBXi70hybZ%QK7+fe7{nN{lQ_fB|6joKa^0m3X4UG!3I*o21p45ASFs~6@~u; zCB!f5V1#J_KuQdQ_AGvU81E|N=#VjQgweV(9&ZH&P(efoqyQ|4i0U5*K9p2OAXst_7~yTyZxq zIs9R?`Z;aU@+$I06db-DJB|a7hNhCt)c;%yENG;4Pqd8iJ^U@5qF06TqsY49YaC5xoW~B$lP8gW~O4U$kU()+A8%kgn_bB&0I@4I-oh$6pAe zsP`3mx4t-^0?FP)vP^*YN*zix>E42eM=o$Sh5+rs(tqpdLv|ryl$68Y0nAB7qIU;^DS$SgJv20Sz< z&0HK0*)Olp?~kCd1Jr_-g9mIq-JP+$xawO3hfXaz{*jP&cYx`Bo|^C@omX0oD6kb} zPPqDUMXLHdGqR79*UIrUsvzLbX8`W}RXo&UOBIwkd0}lF87&X^3~Ue?r^EPxyx6#6 z3}ix^OKOsaBPU!1cAR0MA5iE^KO0F4hE8=$!ZxNpF;s?fh0t| zN)`h#R;t;+TNxqco4~MVxf{eAJUA{VJUE^)ZnLX($+}q9!&I$bNxN9=>d~!T4AF;{ zNFH+CQ2q~ob;;V(Mf$>9(o!f*pQ6<{=&R`v2LwLCuvGDWV{kyK)d0HdjPB&j)S z9jMO$XMNj^q@ttBPf$&#D7HuqE630dKA9Hl1{qFtkTI>xRIBc`QlrlA+Zo`ZwAw$7 z@}i5H*c}EW7ds_>=o|9?mVf3*Pq1N^GfQN;Bs)s)oHkd?-N z?|bAR+gFNp)W5Y$77;M3f9?C0hqc4Shark@w8>Ddiwjjy&-cLdVfW_`&Zdq!saT}# z3SUTUcN$fsj))wx^4hN%%q8EGHK>EwZ+{-?Wo;&LvJAvZkz4?GzkXd*uX2N-A$EAE zRe=S|lmUPw*WyCEmJ^kE_I9Um%PdCIvLxLXD=t=hPD&t!0S4>$)sJgHtX)B(y1Zeg zs`4wbP^Gojd)y5z;R=Kb!TCKnFe`G;HoKau)@2z6=R=1w?*Xj6Scw z`Qh}gaetZk0NJ>>@}^}p{H7YmFmzT!NR5yjfA-w)g^EwY(%)3?_`d!#@2&nX0ERg6 zATm>S&nI$i_f%)5P$~=n6!svipd1nW`9*tvqBhzn(6Q7AjAS7l*U(N4K(A?o7cJ7g zGst6la%F3oT48im98CmsXq8%Suw5adT|3)ghg^n}_Scg_n4<;E|4sN=IR9<;Yf0e< zqP`CbFaA93*eEaB3J7N$ycd)YBn5{Jr_-T&R9;wi$Vwd#P78}oc`vyq)9)tOia|C@ zh=oY-aRi_AHk*8!yxYG!#`=n{2g%IS)&)f_8;E-F>+?tZ)%g*RplqPutC(0zfU+g!@Mn@bZ{!{SQ$gC1$Wg}cDacR;7zOq(5Ck1U6-@+_99HD73m{u+Z5mEo{${~_*&i0nDX-Z< z`i~9;SU-5WF<$8Re&5xf6`cHTHRQ_W`3vlW`onj02sDJJ@BNJl6O|YuU*-H}yzc%%O5j;LLNSOA3F-VS{m$oH!ur?wMbiy!*P%9kJ##2QM ztQR$N*%lwexvXU1YutX)a8xwH0P6#%O954$E87+IQ~l@S04x}e6?MDan=XEbvA?1K ztfSqZ9Iy{3ED-j;7zEgu{;dzFB}Kx7`kr5DG^DWDR>=WMa7NsZbExonJ!*$5B*z}O1_KBYzGPvnx5wsvg2-?Y5 z&|Y)t;Q`W-xOLvm0OFFIx;SZ1x0W2Hq0|A}@>uClBG}(LX;<7IPb8s_di+BH9v{@= zbhw0R@qS<;X!D5X!3LRdJd7uci>)cf@RR)RH>(6Oe>)QT=Nth3hXSEu6j{KQ0YTAd zFZFJHUOWVngUPDp!s!|%uw_7Wu8I+=9(08s#}2aJHqENz~~ zt^hF|$jR3#C4R!C)r*JAsJtr;k(%V{53>J{x3>)Hdt1`B6Wj^z65QS0-QC^YU4py2 zySuwvaDuxBg1ZNJ{>k3wyfb^=bEan3)O?@{@-20(UfsW5ec%19wIR`IDF#?1C|h6lGfB9?~gwVK)F8(Ky%9yoRgO`nNMXKgY8uiXUjqGLLB%` z>?ZxG9MZu?6t@jpDE~+VSZP72y={lVo-*fMIl32kAJWRFoDECH^L9g$NeY)8lg+R5r-tfR@*(N=uj4x9ifY1(bDs0Pv@CTR|VoMUY zSx@tS;~(t<4ATRLYU5jEIiE}yGb8gcsEz6^2!mSE zl&iV!m{?(8fe_0Exs)|olDFOO_M+QBWDZ%e2}~{;hb(KR?o?08$Th>TSxLzs$=0$9 zH}M8p9^HdzBAs?pD|w=7V=?Ae}(r4v?^7AQR@hb z&r&>By&ATKVec25Z(y<1kop0zpUpM4J`i`yjq^p#u~?c@FMg#oZgQZvPGFMGxZS+f z@hE5{@0wYh(c5EV7PmE@dyzHkxz%mtHgz=?Pd?>BescGkngHkr0TVbYY2Py5-Hk!{ zz~6R;);i5D4Jyz)JK45}>>;c9H0R?@iCTfJkpQFpZHJIjx6N4za^vY|>!A!9c7$W- zH50};6z8=!92jm>X-J+#fMO@5a-!2d06O`_7vQhc6B+SkSz5_{<^R>w-jGFm>k{~HKUJtcQyD9&yZ^>mn zxr{w$GLI{W`?0 zrVRL6%Ch5fe!?IFRN>V&j&xeXZ@H{x>E7hTl9DS@lRlJa^k;~mSMpmjh?636rm2~y zi_2QU8aA6B6I0ENRl>}U#GH(_4YVdxHPTJ6Yb(ixWkoz-1k)mpA@6p@rm)kFr4Mg~ znjt)NKORdJ)#;JkC3LYs#B2*g zqmwl$TK9(|&+OvepL;(g-`e$7eP^BYn(DQ9lXIYw^o7QRWcrG+FKb{9|}p zeW|pU-Y*0M7uBt#mk{Uz(XE9qhOdS%hp(siOE08f0+76)C@3xxIx;#UIx0E>8}TKs zpS)jcZ)&f(A0v<{=q4o{4WDe)%Xo{=6~fQhz`rn}s;7d)+<&4XHy5n4bNd!bkhQ1o0^+};El zgW)T2rcCDDg5>BKG~u-UI;7u)YH)t6x05$D=rmHfEUS_;23Y1WCi=aieEHtWFxJ_n z(9~~>(6PTE^jLQnKZ}HQUJHyuYy@0+=b}WSSkAol4XUxId^z9Qsc_w z6oV!Sl-391#)azv^)zVm!8exIImWzuWPQ}Ee~w`@+SG{aOU&4EjH$5`|5vj>)!{v= zP57Kh?^t7y+O&>41`@lR$gX9AJvtteJ&5dtD<0IS$JR(2FMrLPQWRNA`7GI$D~9|On{ zL=iV!>HW@lCU#LnFY;j?;z6A#%CLBIJ#BV0h#xrZs$LC>~CUL)RS?2=M&avKA2GmgOV}8wN^6 zvzx@(w?yZS)q`Q-i@}<52@W~mx&uYM^FXtV@Ma+#R|;bTawQO?wklFr7_YW!{j;4Z zxx=9nb5lfy$0fdcClhSzi)cDL&GsUY5Bo*sJHFRcW^;ncItg5@C8Teqx?o1*_8nYj znn&irBnsxZ}7U3wm9=LF8~I{y<40_6!I!1QAHte1rJyoYSbnM(tCNy2~(FNFY1 zo1b&n&NI}+e!?4eH+2MHR55$1(*~s5x&rtwHg#kVqG&AXxSX zO+nb~zwF5vG=@lzTXXJOv6kMiJmIKv1n*ahZK8zVQ|FXQ+ij=W8Ep{a6`L>3T08#iZ+RHgY4wB_bvqipc|kbHP&bOr3b8XGNXX}?27 zH~_P%xsw^75EQmCba1zGGPkw)XGtgn1b9ROHTrM`>1ntNw626!jgN`07HcMj9$?Sz zlAg!bn9!Vhsa`EcbOl&DWoXJ|lbF;s+SbxlId$Ni*3#KJ?4rwB$`ZK@oE!b0>0H zxsxG9YA$6YdW&CJO+5IxJRl8ad&SALoi~y?14_W<>OR4)UMU}rGF?c zs_DMz5&`PIU;cdmS}LRWzrgCxS3VZHe@RSQ5}5vzx4C6Y)m=k&XDC1d8-KrBlz)37 zCznX0blYq)z~Y=iHL9|l^S$hk&$xz)TLMo8zlZoV_koP3pC0cYX8I8L>sHbc6KR8x zuYQTqa;GiG)%&@SLNXb$gzECUAzH&=vm!4w|4oE6;8j( zqke9EBTQqo1?bTlJy3X-<{3u~`V6Vj7lsQAAEr?JZg-0gY=|JT-&S_47>5HwO&52> zOsa$8;lkl0;F_@$AxS1PI-h({XC@~fSm2)X3}}H7CR@*&ivi>m0Oa@q33 zDT^uE_xR*7Y$s@!X^UDSRs{I$LS^8p?LkUBg*MBq+2N|L?GPE71(37t`5uC5nLGyu z`)9@OEOGcm_3Lx%-;(<~BB#Gb*{@Ffzl1ja&oB$CjtYa;Q&bmZ0*)6mFz6SG9Iu;$ z8OqCQ915Iv5GDu%3}s+&7T6b5o=Q)3oq1=?{T8O-U?U)BR6+8$krvjXfmjzAK9{1# zQ>&X<^^?zy&r@KArD9o{*`2voU#D(+DboKDX4?-)p9yhcZ_xb5b*ULqr_f8vRHg}b z(}PXea~vxG@}@v1p=?r+P z>AOaSJ9<){_IRb>aa6MBz?$Vg|9(E5*$n3V6=q=n7S`V}-ueryKW{%}bHz0kWNx5< z-ct4D*>vJU>Ch-~~g#dh+6Nh^L`YOmV`|>}TFPLC(2!sWkKFHs12N z7oyK=YBIrnj6SLtn~u}koA(#K0JAN2{>ui3UD*_B1$xgsLr`D|(RASP`tv;%H8As!X>#%@mSyH&9RrOSdL`!7sIh8mR zTd*mQGgzl2feZqF8KHPe@K;vQMwOWcl1fbLv#PgR^N1P*t7s9D2wXho7hYP8TAGgJ ziau7cHi)_M2aUuoV^*#%6;aoD7dA|;$VddN@oJutavk3#0x{#?ypDyND{nqu{GKVV zNa+#Q-=b%-O0SPd9V>(uYH$Q(vKH0OFWjZVeDIZ1qId=Nqw6Llmu2LKmB#UFKXvBD z_F@j3pwV>g7A-{=GMWY)_7W>VRI3#eX9wD}E67o%;Q;hzS9Zi&HXyY~Bjm2}+KOL~jSpHW zwa?P*UR5cJ?;CRJM9ZB>qg*_6;e@B!eY<-$XfTe&S$QH@=L1?cyWyHDA93#w6m(Oy z`l-1R@$*Id={$(N{8Izhe(dSKBJvEEtUsp(B6v;p;7YazlOk5{9pRtvsAId<;*L;t zhZBy5Aa_R^;$rYrUh7A}tMhOH=C#?ns@QqFq-(yWtLG=6O*4#}q#yT~?{uBd5GFJJ z=&V#$8qsIMiRvCgyl4*^Ca^^)f5H6@1@U8tJGX|-KxrGwyt`mU`nDit|LZzr^MMR~ z4{J_zR_-M!ix2qw&{zGqOm?^QT!5(f4g84Jt%>~soW{Y+eX*(cs=3F)Prqz-l)9B6Uw<93@O75RN&h@17JwBu~Jj;6%QI+rQl^ z3jHm@b^)(0KLLAt{&nsa{2RF&;NT~sZ|G#};I3$A{>POvsrurJt&H*x2b*QgF&jIJ z+IVbW-jN|1La;n5AQ@jwJZYKG7=-+ZG$G@xFeA;`ghkqm(q9&N3vA0)eqPw9gjj;V z54<}mr2l<)#PR%;GGn7Cq9=8lbSv#8>w^0s6CjafbwB5o<$~0M*9p`2hQTtJF>Iv| z_5s!0ZARiHOx}&g8sye*GatDhiu895+s_?LfLcWy<$OV|>{)R+-Nu*Z*vYhCZ;Ot08A3QB>Y9-0<83q?lN&X|WbT9kp5hH#U929G=35-^DDRp*^;0LvP3BJg{TjbG; z0_JUpfy-jE)wOybij-RgdsOSk5eHK?RxC5RACG=VY6QoMJ%L zS!C^7z=D!?s?Q;I)6=hLNV94b<)xQ`a8e?OYy*qxVq z-|sd6O^R?=#nHE>i@RPe9;>(V1Xd@H6O!Kk$X}=Sm%)@qu~_8 zA(g%nx2s=!tSD;o!6E2Ep0QiE`R!dzRf^zy1cLd_wq=7{S*@l9Ghah=s>-%UV@0!n zSJhO>cUcgZ;vtv=v+!@G&-o@#O5-A6sKD(=gHi*Ajr5it-K8=PRCWbE`Fff%_w{bu z!{(qIwcVY=t-B8+%BMb&bSW2DJLpmrg zO6!FNJ>kFawb20UaHRc~iZEl!}WL1-QU6^y|pMhy_(FKdZChoT8eItPNG#hPM z_59hp%0aWa2X1j&>E;es^vKTv|k0aC9-Tqyrx;{Nd zSu=mzOp*elMGK7bf8AxHzSo($#sjCN22{nqp7xi=IE`g#nn>NvLTS%t+FWo z$yYCd)Y&SeTu@MIM7dRJ#H3Suq^VVO1nUwG#~TJy3P+Q!%8+v41f!Y0Gj2y3#?~a1 zu``H2V2Ex2AK;5S3sd5J+rMZ}eBgB2i*djJb2GutQLR6-ee8x)4;a$U8`(bj(d!=_ z#a6LrK}FvwDayGysk>FML&sC8{{djv8yig6syZO=#W!H>hBwd!qig(_9?ajVIzXRI zKSme)U@5lai8*`)3yTDk@W=(&ud}sihy6hBB{~4<#XlfUW!Z`YFzJOENI~ze+=25- z2Uz(sW%dWaT809(fZ374(pHxy97(pAE%Ldj@kAB3hIi zg%l>ae>ft(Dl#3?!K$DC1&_+mb7>A;eYm;0gpQ%zKddbK#w{%U(*36-f9S|fAvP^# z2;p}+@)7kXf2HoPW4g5r#7Uy!?2VC{;_O0W$dvB{Nz;-)O9p!+e})Y9Nc_wg?4GeOk<^B{2_`Wpmp6`Vs=XK2ghR{( z$6=pjzmp$yl&ILPDTU&>YH9S!c0jwO;(~Gs(7zr5VMr)vN(Q;bXJOT_vEuG7?XR1y zd?jY;sQ7}1ayjr-CRCI*)|Ue3l-dcmnZS>TTeT#73a}U%XGlp~`b0`eff->}UBW5! z(Bh`@GK@;5yCn6C_%%M2o^jy|wogx_HWQWHU;#I1ChfKZ_vM9G{>~bzn%iD zpsEo6U2^?9mP3H#DyMJmAZl!5?4S?GvHwi5St^!_Ya+G`N7NF1yNg9r6P6|s%)94fTxSb2`&mHDG!#SY*0YSwQ1moSF4rDNqD zxvh%y=L5l!=G5=du>*IW6F1xf4C8dvB-{RdR0kG39g~=#lTM&wU^nKwX+8D#h1=;N zM)-QEvOqc?3$m`tVm{)+>OYRmmw)VY6Xu+sPd~sb#VU?#@G_xuU_hhtl&a|{-jZ`% z{JfH~R1qwF6QIHG*o1kL*6}1~8g09ZYV3kK8|M1Fey4fXXvNU#wV3-A+)A`z%te}S zw{q4owOZkGSP(jgKC-#`7mJSIcGD&5t~|?ZUE}g|7VIsRr7n@EQ!T~m^r?@IoORS9 zpCc14J7+XiCn)9lLPGYlg1>%L%9bhAiJ_a;(-rFUZ@K(rq}>DEafR5NZ;6ss7Hx@_ zZhTO#QNmGvVty>roFUV@ngQ6%MvMQon}*+YG$NW@kM65#Z=_?q-uh+*-A0UNGv3m! zJh))toTjPk!%LZE7XKyQU16xJP-H~vCwlT-Z9u(F6V^(#8y;Fgu!%%Zz3Yu&|1sg| z=9!34kNw?5G&DC&?8iGUfq*R8S!{W_aj9^5hOyD(9b*wuzCl-^)!j@``MC(Ow$|wP z0#Bw(4%y44Qyu~xIRbw9Fh^5L?#!Sf&bucA&RZ9ZZ$5tGO{#vvw|acFrA|q;bJ%G% z!Wlu9YBr&68Rg+p6IR9a84!{J0cxPt9+Q16g}UlUtw=F)BWslEAf zd+eM|5u>1nkJkI4*v)_`-5(^5CI}ewVaG5&(Zo((Zi*;GOf)T?$&5vW#oLQH&0_au zYXCZE4B@!pBU)`DHqux8m42%-$TM;m^U`G8Js)UtjVFDk;0PI{?{JU*sn|X!_K&}-@zP-qMP%RN8K^YKa)B~-n#U%I0oj- z68S_LF$E|ZqE@Gv zr0Yq0J!tk~4Cs|;CGgXKG{?^Q8D{(5``WDg6a3eG0uCxKu>vU8&Hrt&uJ|{Kb-?bg z|I`$fakjFOb9DUU-Sy9YfZ~}95&h6378A--6DvmzjIl>DC> ztK#aj=PVtH(%wkkAKxAYkv@J41i#FSbX}#Er$-lL<#xU3GCf~+G(CKYsS*7^Qo9~Z z7l0^hblf`iDUy_BZnh9hM1h2VqM&PB#FN4|d+IuE9s2Riya0it^lfz;v>}%PTdE0l zTXMV&dfklR@96PNw5<8C6v}Z(G_2!F_1Uy(F5lEPR(IU5G|5zNKuD91k)fuk+qP== zP@||zEDkN*=a7hP_BS+y*+d%F+K>XXI@=NsMTVSpG(pcXi&ZI8+U%-2cRY&glE=SS z=39rCk2|77?5to=4yu$F&88nRb6VK9jf^&jTaQOXF*ZUUx?v($t3Vawn^W7GRcj5g zqj*z1E5nqt)$9Tdh~3YV%P>Zo$mT%HAIK`a$)YX%h#;-+$%LanBM7>4yPr19occ+u z^bP`j#mIV1TNmaG3v9MD<5z*nVJ|)KsoL^~FrOeqcyI(F0fYs*NJTJBDQ3P|0*zm= z5ClCDaiqAIcq_s%#4xdxSS$HXa$tvkFyw}MN?qxef81QMO2QA@m`50M`ht2M{D0O6hqXE z9=9Fy&92yA2jOC25f0yGcn)}Q6j!~*@JAuzty2<>h}vU9q!FVwNv-9C#Wj)(y(g+; zv%Es86XPQbqr36DB0{YQiwdLRuGk=shzLW}6l(J>4Ea-_Hw9tO2})zP=j9vJIc$6r zN@+_=>P7>Ct3_cZeLSL@T%YH^%u*%9CE#NXpl}Iqlm3dc1MoilLqL};7T|*XuRn_a z&J@aD;|%b(>mQE~|9o=z!%S^{czAJSwrD%wnX$c^%-Sx`NghT?D>^}vgE=cO&73&r zdwK3Q_@n%8VJOXD62QU^e#*Psx3lvj+rUS`nG;zIjYA1a*FHOq)JR@rNoq>+%JDEs z#iZ)(LdK%e>op^`u_PJtu2my+8sDUeqEyMhgahuBR1R`;z;vh{- z35g-Qn`yWa9v=mp16OE-K(pXwgVvL%cMg-s4Vy%?YkHOMkrR4cXq0`_qeb%7yUj%E zvgr_nTxn9fNC9t+0bpvdXAsmv2m+^cOnU@((?7HDV}b-uOh77Q%@;PFLx;1bzfEP65X{q5^iAbih?255h_1AhKBl)tkN_^(iY z^{W3uA5v~hrbICi}4UtJ~^m))cSS6ISzPK@7pj?GWIeVyIrl6oSBgJP0+b8 zI@AJ0>Y@M=vhQObT(}8~=b(^H_(}09%lzQ}Y#-%m2c$|)9Yf#h+|rL={*iqvcclB@ z@st`YxeJ)KhPec8Fxp4?jg_tUvDy_>SAS084wVw_b3|hIWJj9HAEinw zUkG5ZXbZEz`+U_q>R_L&*O}`{gCq%uiq445Cz2qWQk~OZ&dmjG_t=eJPy^ zMhT4?TWyrM0XHy4j6}xA{en<+JmQI$)P7SuJbF>xLR8ix{cvZ)#46!__V4HtgcSNX zbBS5hA{nKSDWiL2Gmy*6xO&IMF|@#mHe-gyEPQcRc+hj>Z9J$iYR|7~-2y)nCLvVi zAAi>{bETh#A^>M$;Q!<-FthySEXV`S!l$=IA=)+)6~n5k)$$*LR9{v4y2+B!%fSf5 zWRdY&GQQUz8DA`S30*gMK{3tX&EP3#LKl6ikh4SUUcoTwUU_oyeSNz^>ZMtPN~O^Y z{;ayuZIH@7FH#~3^K>(ppbbXLR&jO;(6=uihjwqvjAkz!ed!Pq&;G6jLD^2B%#sT+ za6o8|#(#-_VrV7!MtzRK9@}3Ow>t|L&vY;rxJowC1J<-BmXU1XjUkH8^R74>mrsZy zYqh>aZQN!TKyz2C;cz0f$UKvWU_M=r{|)AF+Gv@8S}a^MtNF+SmkS;gUKqYR1Pvx) z;lS-)EHxHf$e=$!YWBq9rp(;Z_XS6^?x)U@xaLa0fv*^wNw*hZOejvgT?2V|zo{dk zFlzW-8Pa{9A$2-8zRy1f5!E}fZr>2K#;bGC@|obSRTy5;0=>YB8*z$!L@rwn60q&< z)QWypNV-)5S2Rwh_aFqp#5PzBH_uBkt-KaN!YIUzu_YUC_v{m;tMAwr!m|-${{z|P zZ&O}~F*U)Z{69#MVRcN6;{ce(B9Hch8%4r3Y<2=0cUD8|6P<4K-PSt3mDe)sT88KiCEM(HG@_*B<+!Euz_xD8D}TM9y}W=p*GB9Y#Q;6#G-$C-yZn~NM$8Fo%`m< z?1!S8>kbC2T(Rbup`%GHJiM1jryHfWpc&E(1RvoYgkNRXkibZ1tfS`xqa-*wCnSd3O7sW0(`h!k>H_zN*&zmg7Mn)54Y9W_cX z-E6ym^(1q<BpKdk`Xg;xU>fT1sa>4siTWr(5}#N&k~8_6Uj#jDY6-dA>%u%xpiW+FccE$h4eh<<+_-7Z<8W4v}Qyhf{k zz0#rrbtRIl2oLYbG~zZPsJt|&4Z zN6$agVe6}2S{UwRWm&$eF$CcO<}kg0z*{nF(2IIqP;uX;zptz27CQMY(F^)e?fR?! zZU+4P>-ziej34}k$R8w{)Xen&dtu&iQFYXH0ua#qldQgcp~gZ+`YKGb2J#8r?vp5t z^{lYQxaByda0dfD6Qp(ZrnN_ij=9H7Ky#o$*q}KKH(>F^=0noUu{Ud1{8Xh%h_fEq z5&UH5!+|H`&E`bLg9?1lW3S)`jUg>olXm*?s1=(D`+)YFb+zr_=_t$fANGd5ume%4 ze9DH3y~UcKT2a!Rt7%Q99)2Xp(pKx=HXF712yh{4bDtSDW~wMbK*EZWRBJ5OX4}#{ z3P+lJ?#fmC99b~GeJ-LzKUF|F{$gStrl$o>Zo+^YLrg_21tv~5gIE|>S{;<+V=eYg zdMH#qyxa<^*_rs3e_?jEP^nUQL;R^=FB zvJu227!mWxHbTSza^o21E4u|$V~BNZzDbaTELGmj7;*z^a%6B)R=UBRMYuR4@ZAO(FX@J1rsK|4%~UdU_Ngjy^7=+&tQ=K ziCFH*i8T0RM!ZV1&Aks+gwey)S9I1&)fr8yRU5HN1tc#9tUw5a$uk^E3Aqh~>3PIv zDm>w!Ium2!4g8d!WJaM@z!xM)#I&V_#)l>|EDr@l$t40lI`}f!Ln-Kda_D@18$JEm%++-=YqY?uzbZIb65s1U<@_stXQ*ymh$47H= zOlXgA5oZlBqBuF9=W&+16ICYM?Rg%KMQyo7KRfOGX@-xvKw!~GjUWyu=Yjgg>_-fB*-<3J} zKuGie3nh3(WawKeiilBjay|;fxVF+1DSU@BS{WRB#b^<{L^q2$2jD96eM!P-*c6%$3_UucsXdM_U%_{aJ=c$^$o^EwGtC4&@N7c{kF=uAo{A^iPgvA=WJR|)mmJ| zTyhqfBC(oGqkVsUtm(5eUVh;pp{w(r+(I*Xr0HG!9Eq-7{nMoFhZA$$D|Iq1wQFIx zDG4N?Jl&&UHX1@yicP1StnWL+u@pRBjcp!oOO=4v`|LrbQrs@6+K%ZQp5$H6c-G)x zi(!l}E*!4IC7y7OOd+pqpI|HBu)TPjo}Lux8tJXCoH51js#$l6L#)2iv5>;_9JNdn zAd$aP!f?E`#)qdh7pZ}#P9=b4) z1@a7$gQzmmt|?F%QAJXX@H4)CRiHB>2XSReEq}iVWCjrku~l-daK8%V8j%)do@T!b zBqvd)KtCn17U_-$WKDdo#4@>GP4JYx?Kc!BJm>6wSb^5$Da9T{h;!N?PLx*al%%t7 zYNb7bF%PSZiQ$Y4aYSN{!eZj;v@z9*0f9DVrxU!g4A2^VIaqU;85|M1Ohb02i9OxefSG$OeE?knYW6*?*|Ya`U)I}Es4o7U|HT!g0^(YrG$9_u-SriXPB zm;KXHGMQ(4X47~V@BD4ftMpi=yu%6Ls~OE>p$6@dI+?_K5}DKm2p6&Rz!!-KCi(Pj z*cb8NLR`n?E^#rmr3l<=BFF7oA|>g>hoMMdQ>g?^>yhsmc2f!V6x@v0zm%8vA^Gx#+8de5O%sbZV4!1pm?C}ike~E;? z#IW&J8Gd@qj0E_OpL;VeM<~JSM7&tqfy2>1aU~2$1*a9JVe4OiNI)QgXLtfi2;maj zMu3;{ngfmyN7OaGriKTzj~peG>b~fsN!|>-aHAWn+K{@Zb7$VO>09F3A16yFkUBkI zO7mI^SlZTyw;5vPYK7&!-FEQ`8%;^WHg)hHbxr%ZE~w)jH>#TY^J@U-6%zbrcn-r; z8o2GiL+a1vfDXG#RNE1F5G|ZKI&L#A$|g4f=(03lONSiG+k-e@Fzp^3`2{BC<3$wj zRW~SJX^Rmrjd>Jr%y|^04yC^_hSD zR#4Dmp`jt;%JxFdXDn7@>sFa>!ImH`&Iwr=(V?r!jeMY*coYrUb1mPO$t?>&6|u2k zjr^?VFEdxj>Gi4HVqmimzL?6z0BeqKAFw+r_A5i#igW?nIw;ip?T~+lbBWfIb#;WI zExKxv=L9AOc%TYHp&DASAEqnjAM=GZk*sHYoGXo(#T3ZjSoLJp$-TSKmPN|pivB)9 z)}nFxvwSTClyG^2+rRIe$>-v(@KO|5@+5wdMEi*P21&^%x0yQEeOp4jPcqc`G$@7si-=w8i}oCCJvKfdbSgdhdz>& zVZ^ZbWPik8X3%G30wkM*g{~tkI|QBs{1%gxE+rwHR7MZOk|TPk^2*(I;Wgg}X!%_K zMU>^O6Ymb0Gs5tpg2{(*EI**o1u?17q+MQ5bk|U3xj4athcFxA^!UDg?lD2zKX8e? z?&eBJ=+e zj`UCJ!Nc5xo?qX6Z-pMbhkz$75X^s9S#tl4XDz@`zp|6L)gKk*Wa5@8k|pNtQ*X* z@8EmC#|06-81mKVe&+OgThGBJXF{j@!wCn4&xQ`3~9@-BXCN7Wuh8bzo~IAmw}6B}h7 zG%L{7PD`K$H(8Y6sb_B;>w82-FmbuCPOacCXPZtTA%(6OP+LS8_nR=$-)d{#ZNdV z;0ioYVHjKNI+N%M!|Cb>ZM#!Y(RAf4O$Fj3#lAb?>-!|bS!;*-jJ)z0fPd)WaYEuD z6nb~}UT^OMmYB_!;$m>uMZ<(nYkbLsM1`mS%_~M znv#3wd26NM#J)-Nwo$<7(f#PEOkYz+29_IX&Z=q5kM(Dfr3d<-*9e@>yF41acEA6y%t z!WmBGV>(G9N>fb4__RFUlrYcFz|6O`)_C#_(R@zU{)zq(X+S2^Dh>RrGjtU=VSzWS zmWMlD$6Vum)*IU1!wiDAn`$WddruVCe4I8N-E#Qp68OiiY5PueabDmqz1UBYfRE_(XN{ponh&5v+M44AzF-FiD;`P2;G5``1%alpf0a8zP>;Le|0x(<%qX<jm|rk;1{hbx`q@ot)yWS+X1}fNnlXRnW<@%wqgB|_f&zC32L-o; z3kMl^mR=0xr8F}>Sfhl_lJlU|#+6RBU>;W9=R;Jh>E&oy9?stTf1{)J~e=+a<%0bq};Xm3Px=ib}+ z&55ZKYyDpHaMA}8-^}Dsc;`-n0C@1Tzu`?dn*IlP(`o;N$9w>QCs1eq2RtKg06fJL zd;EXG!ver7_!FM#0jDMO1^^y6u5_9OE6Fc-%a#9thk)$y8(xrJIodCHcB$5=BmaQc z&_nnOURL!s7foH4!07B0Vg~@;%YTA*;8{HP-^2Sm%cTBG*KmOSMlDljr4Ka2o0OiR) zqr#CNWARyi49L(>CQSyZ!i)+1r?gZKPaWdxtO|HhhFt;{Dyj zgwf;;A^`*&#J>$To&SxS@{f1Ve|b%6|62dWU2ssoQobsuVC>nXfLO`*EDw!G7Yn75N&$t_Zu#xy99dtw6C9AUlkedyXvORD)%Yj zQ}eU4WlJW=&J~NeIXXFP+qsal)5s5oGxZ*~P(>+GWY;69`m)8u9m%oxagebq*~t)Z zPh!-sRh~7|uI?{>$`HMZr;HF5Yeey*u*ZTdQrgK?{r!%J+beTU@qb1Q z@R0aFpk@FcgirG(*wir+b3R|g) zoJ4LUwZ8!E^%;Pgg2MtdcU2n++k{@Y;XkM~Y$E)kCZlSXowBTxXEgaMq46F8654;D zR)TUn_J2nW@Z$F`sr}RYr|M3 z-SvL{j;0-*SBJfgt*0)zx|Hrv5-nGa0uCsA z^2(*{TpdB;APN=;3GeS~ck>rT`|WtYM8mZ?1IQs_C$oa5)JCm_UBJIY!`Oftk{VD$ z4y9LtHgEaNx>7GzN@Fp}y@LI^Az{dvYyW#{|0^}5s+qZim7T4v)xQKMEeizDdxIK% zyh4)Ii3|h3RDdJ}6eA9FS0IpPTvZz;IIYw)mGBCmXwMX-5QMc?Ttun5j;a})q1N4pM;W` z)ThNIdnhKHlmZwqs?As_j;hl$13xH#ietuHnq_d+qrMOBo^heCw@ zVkD*9D_14IV6F&W-*08k&8S-z{G|g8NHPe4&O(jdeCz9p1b>{hsA0STiquG~RrolS z=Bf`{(nPD{NBHAj(QvOqy3xi+B<67{ae&R9lDVWZ(Ri|ZC9LQI2$#3+w8HY(;sa0O z?v#gzwYf1pJ9|eFM@Zso{Q3Dp)w8H!PTSHK@0)-XM%se}*w7YUu&e$3SIUCy>^6$y zvK7j44-R&B;+n6Ec^2ly`ev}pn%3`xmX47y@;}&TzrVh@z7C#w88aZX2s?%SKt({g zDhr(!8Wg$>{ekk0G+%e{kN`{wCj3!gFoobew3SlN>gnD0+!4rTL^PT5Y} znwS0A%e(DF2{YdEqN*X~Io2|p&9+&(SnNh)DtBSWzAemD?2Pji?A(-}89q(kFuoQ^w&uE^^0Q9U->(dN@N z7!IydJU&Ol(p->gPC1LR)dS-FSb~r3HAL_w84!Xrf>S=bKbrtTWNy&31|j;ep^Z0U zA9dm5sX7SjC6|AO+qY=)!U6Ol3v|fJAo{5gNH3&f&2N%CR5$uT@LShAoII5w^kFb~ z-6d;%{&7XJbe&(NBFO7qRmpRfShQtkIlO70)2-Gblj|a))0TxxgjD$wV!-ZynCV4C zfw_D&`+uyx1#DZ3wk_JE;iO^4hMAcgW@e7V%*+jQ8)jxs8giJK85?G1Zt}hNxq9dR zr}wsWkDe`Awq-3#Udt24oMQ~bpeV>kN(5zM$|DBq+z3I$^bnMMZN@mW9Q8jILaZZ` zGb(4%*~BfZ$y@_d{(xPiD}(SWg^{H`4)5iDLEt0q&FE3ivIQaS4kc2C>-Btw+|EY>76SNVx*b8c-8ce>6KpkI)M0MhL0{qOQbK0FDuP4gH5NHJ; ztJCfkiCYR<7h?{&( zgB+PZL!f_x0o_du|Nn>6`cDog3~)9TvN5-J0-;m3iU217=(|k+51g!+c%8rPmp_aT zitS8I)AR_vsOAInN(iHK$!Ow`F#`!pET@xPHO$OOyVQhGFz&!!6latQ;8#qy91d=H zKe!La`MUV{z?S=2`Xuu_dVemv`7WI??G>r_mg?1@SS+!vx#o%K;1r33KKHB)EyfYy zZp(;W%k8@+nk`#I!1sudlfqrzT=GDVYG|i^;{~nxpVRu`bH&+oLZ2H*FEHC}u~s5} zKIH*AOeMYdbAPwHs{eXpsu4Nu5!qa5AvM5jPlp9)mP@nHxETf#ZlZ1fbm}T@c~3a` zmZzMQPqVPCgA~~{o1+B}3!faq3@-&w4R6_6@o;&?(x;xcco|Lk2IXE#)1}0)`0f>4 zYh#Q)$6;j1A0l5wM>Jqg6!jEYLJQ0yGf#ty+g1CbF z>skU=jA(KLCA^A%Z01D&)06+dtkM6K?vgZ){m~9l{M3^hg!LJ4nCx~)!oZv8kR_=5 z3&}LGNtm`oi6g)pDmAP<&+n^$st-!f6`RLzJjP|;73NX9u6{LM|28#UJe1;R^%3TG zBsgtg?xs;O$Mq*SEi293Y{PxS(_F*;&*P%)C-19AtWMnO~>G)`CvZ-hXJsXAj zGc%3hA1!loj((a$wb^GbHO)n5GogA4b4j$sThE2uq?$N$Q@NBOSN1H8r2GH|F%CD6 zjHt;}t=Q=Tbk!B*AF3kJBaoirjq~81mCiPl3pdPKb>qTX-DVPMB1O^p!Ms|vBZY$3|4}SS8cLKFQ+bew*SWS&i zS)#2!LWLMX>SM9al0`OO-dn6Tx(l6f$5vD_W<=af?mpq+3o;TCak{qun=tSK=~QdL^sett97{CsKKGZ*!1T zl`w3*h(~ukP0;hy$TV@L%V!+NvmD#jFkCdbb=L)QSIo?wIMj*j#__b;<*jeIZk^k9 z8&f762VJ1F5Yn&MZq2>A3ob`TvDh)>p^tiw$s&wtHRqf-*;xgUHNF*UOCGYjGiMVQ zom$B+cEBrP0jxhySBc7GcS0qqglS#MbB+1tVz6@X{bD(~-rH#Yyt)aoItwRV!A3z> z3$&mE2huZ}V= zJcxu4otbRsXLy)syGB0%1u4oyv>yefk0hQXHWC}fQMTU^xGkvXPd4UR=O{N$7q<5f}HmvuE9mui_m10TtSq_`LINPF#eQS zt{DcEjZ&NEZ`j}|%h9Jt-*w)0Y`eMPBjSdCy-PFu zRdY83-0ycN0;!yh-LpnFZ>pgUQv#6s++IVy9@u5wcGfwK2h!X3{cGApy2S@s<%vmM zMux>vORE}oC$42(ckk5}=jwq*j@99Nj}I18J66a`g5&OwW|-HgfomV&d0odJQz;-( zJ*wN*uiz49N`T-fYHO`{uU+MS$vx@|a@-XeNE@L4x-z)qDImCBw)F}>0ZAH&L=^wC zTY|hDkI49XS5|;{JIh0;7qguVKq){CAQB)4UYLrzQfwMKkw?QnnPFcJA*H=>MMphBq0NrGu}zBhr1TB5C~0MGDRTRbGTX(E zAar7ce!paSmI84i(8RNeA$`cBNxT!U3gp|73{LvVeUe6&cmUh4vVPzCI4u1WLpz!k zXEr4!(e8%GV2Cu5vq^N7cl;QBO_WXc`*H=uaQGv6g}cXxoXCG@zDv(CLma_kN75To zQ*?fpEiQo9=GndMRpmiD>UH5kI}6P2{9aKs?Ba^~k3mDQ?Y%L?yUd->vp`flbKvo^}QKa~iMPMKepeAQL$nXHt$RyrGofmh8CKdBI|_ zpnQPqw~63+?lTl>wv+m`1qzPWk55HC)f3&8r2HH^s{{!aZU9BDIh2zgm4fUFPW#)N zuJP}IM9l3+CK&HR@sjHOLO z7}PK0wFk1xq>kJ@?ZN|DiGILfyq%fyE#d(KX9z#!-rT6B(SQ-0VS)TToI)nqpH<

5S_kU2UNm8@@t9$ih__hZFqPh#Ou?<+J&krI4nk^-z5)79VBj=`D<%sX( zk{Jn6p7*5975L@^d%JQCWR=ZcZW=)%Sp1|JU-59oS-rizrv#dt+uUCcH#a{%{p^{; zZorPl-U#0oMp!cP$oWo=9U5OYgwQuKuO15^Ye`a>t9K{Z9`-J*tl5`Y!n82mJ*ax- zHK{#uWuQTr(_PjN(LkN@phcN)$wJPSeOiAg?}g$w8zK z8aF<%+Jt#lA*zhh1xKG<@C3ibI7hZPa)v@Xx?7~8HPt!D;w2Y=#UOsAmyLD>PyBAt z7pymXe@0KZn5L@{Kd@vMk&tGW!w_zF_|yCvh#hO&h<1E|H2!d!6QAb*7rJX)_=+qS z0ax2KBR`t)U8x^Ix0k!<7;2-}_A{C$6H^E;l(Ka64%+9#y3&5V&j~>DEfPX(4>TF+ zJ(qDqu^~EvCFZcH#3$j1d{iXY)KQKf>{;*JkmSj(CP~R^t6`c;*C?H{j_?LF*B0oU zN{U8Fe!`w!@kivB9nL*hYQ3q3PpN)JeQdKRlIj*5@}vchCT2)@U0?*=*a8D-lQ+Hy zGth-|{-pImw5-QnKP`7h;NO-9r`nJnnY(a^Hu?^72y8_y`%7jl8Hwd$`PLn?_qb;6 z=gdS_ZSXd`x)p3SOA2F1iDuuWS;cg6vJ{p4I)aYxWTxx!1?R*qp?6=0ZQ_f@Ys0Ga zgiU|shPIa4Al>&>M;a12XLvtR_%+2`&f4D_wW@8 zikSJ1B3=s#2^)$f)RGGc$Bb=3*J)>vn3G_4IOg(fpdwjGgMiR~=r=~_F=DWGosET@ zzw9AJb9mQfSjW~yr&Za|`ZlHr+npD)KhLYn#n}tRVTNxgF#uxdp=9H!xSL5?`LtYF zT~5zai_UQZka}BeQ@udf=a^Kfr7<>0T*k*c0r#o*~6gn zy4NGHDOqLNOh;2nMFv-+T)jv>!-l&2oDgk|g{|lS+f@24JvtZ#wg7dIOgGs`4Vfq;90@Pd`H))cBq~Xs5|CqPU#=xR0;E5KN06i zJDm+WuT8Ai%dMH->699XFB_$G7ea2Z(i_Fcs&*XckS~ zS?>R29o}v>H;%oK3a`MDtqi_G>4=FpHF;I}vi^L85_;76op36v#1U!b_dJqp$B_C7 zZ?RKJI99UYE?6J6S%3Jueoie8!o@GchMDdTs0)8Cu?D8ax$YNEg)L@&VL|B;=(=Sg zngf{uNh@`jLXk4ruSu{)Ec9jc29d5md;d1V@W(-!^Z<3NVgE=!7x+)QR#6q9zp~xG z`qd(}bB#4s?2jT?Im;jzQQ!^0Cu;^I}Fm zpd9jZ$1dh;tXPwo4^b#mZ^m?5N#rdJLn*d~qtZZdqzny1#c(+=e}^9yEvZ=+@Lk>W z#*+&=aQ!^w?bdDBpDv{a-=M0LlqF~KUV8wVo1t?d>&RwvYwAAUHi=-el4)7?Y@tQ# z`;e?}9iXL>-aOPbx|HSm_u!I3Q`j10B3k_I z+unI%nvfl0b@;ik(s!6(KVwN$>D(z)1>`AoKVj4Mm>39>=@eqc{9*_nrqCQpIS3-u ztFkCGTN`R$e0jiEHxJo#*|$yyi`}|l1C^v{EjweCLClc~6&*wW+9xlQ68tBjXuKrmEf6S`q6nAxX5?uqHlr(x8BL@HAxhaR(3=V@doNRN`aF; z_MG((yF1pyuP|x{_vieDY3(O|djADVfcXEI0EPa;=m65dwg*9{{|XScv2}L6-;hPk zd+J~dzvYi3eQQ)y83+WYMirCR81mfDG~LX*{l2wC_4G-ACepYtJkZwdpo*=&IcE%` z8{9sa3+vp;GGw_eHSwf$nQOyliIV=+Fq1r*SDRYr%1t8@F}Ua!@^ZcBq+VUFG+3re zn!f$mk(04VP*2W+8Dg7Q6s9{Hj4^F%O3;QS z&XU}Gz_t`0kCq)z#-uW3RtEEvwS-Xu+t!AvSU|obG#E zX?HZK#?~}tAME9}N5*!yN8V5<*Ei$RCqPw9UOJzFnw&tTsUqCV)0HvLO4>WRg3+5> zh8NqM-qznl4;%6TVX3>QldfS->8vQ1vqRorB%5bNP{@k>&Vz>Y>}5aR_&>G#+mrjMK5^O?>GUO=TNJKWi{uTkxB8K65# z``=NV2xjI+x9x_z zk;ts+t0(cbdXL~x%bnAvT3Yj5raJP-^mZU&IObn!3+2dKCs?9P=^P}=Hwxj&9ZIgx z&b`;6r4W(OZbyC?l{NojH7wE`7aQm>Ez`lN?N%dfX~gtQyIRE1ZD!Luc|QY64KVd6 zOda5YrU*@y;wwAqH{=y_H$qZ1wd>{nwaHeV2TN`kbMBqad1G)>Rq*p69acMvtUubpyxT*kywAa@qt9ag9Z@Z#IFOPTGR# zRmzGoM713f;A9mYZe*)ybYAJFt{5xT0pkm4V;8KW()YUL6%fO;)vQVd(eWD=1a)Pu zLqUzdKf=zv3Qwnu8%xZze%0_7e1le-9et%gDIe7al-uXH5MW*VZx$&|F;tvndX{Cu zdEmVh4QQO-lyX70M#}wE)g5<$?ZXVMLRiB|pUE}C6Q&{TnU1ZEl$jYulcSjotTZB` zP%HIlkEHrVGbtuN02O+RO@e^M#Fx3v5{fN?Cla4W1a+E5!yv3bV8$mj5K^n!(0h8#{p1eZ9ICV^j zbOolhO__Pfv&L?>z(HLZK`!lpw)54Pf_1Re{#!mr(eI7V{*4X+}4tRZfaN?c?q*OFqk?zzUbQ>ezej8IU`zZG8UP(g^U0Xpe z?TWy${Vmhk%(`B%1+h`}HRh3NoMpYop*avCd+G{26pLlO_eweRkrp{sgDF%8BYL+3 z;nKRt)dRM#Li=YgLSGhwGkt0|-q9nVcYM05*{ViJPzgHtqJtT95xkVnWH&T)l;G>RDAC_nQS&9SdT~D7O4Smy9%)+5AO>2y1w5ZP0XY+k@_ zeh-oKAoREEMp%5!>S8klJ6@6WNCt{{_r`%f^Lu6Zz}WfeA-kA`rR+;gT=DdSq)Mtl z%$n9YXVgVzjQPt2`fwK1FP?LMA1K~2VD_V+e!n|aZJ4sH*jsM+=A2{uB2lSY@8|hv z0pCuIUU%~`Y^jAl`kg*a~IUg)H6+U5;W+i+9{xExrv1#S=^ZD0#NarWamDl6j zk&J^Y6f^YeXH-8RRXyU=jVTFPFN?KrT9aG@P`GWS#I|r1u&Tv;b6kJ-yk1P=cW}K3 z?78yz)2XY0Q&5K5=|qWnaCIM4=lQ0TFKbgUm_s(&YiO{B-T1j z+K_<=$h^Q`a7(Q=*dIAt43>a`?%X;C#-zTod`PR2lfQnAzh$MZ&@Sh+yDc_4PG^C0?alwfxgj| z6Tj1|(;ne8(IOEE;U0;2S6R_x5#g>R?p1quO)R`9s;J8{HD=H@D$6q>jfeN^SE2#s zu#x#Dmf?xXjuX+PUbB4khR(V(mrNbnftd{vfz6D26S%7lM&%pSjkPKPDWANG8FuVy z2nwL$i4-iajiPl@ARWRRucHO3a1R2Kv6W+7c!~OeZ!ou1Z{}NN6*+n+9<^2J~z53_vZWs64cw+!?@bFd*SnpKi)euBFJw zXN#<@9<@kIA2HbuRd#;-efhcVJ7EVMIZ& zXkxD~L+#zx(r}&1WI}dvc-rO9%<^=WH;;P~64ZJ1=5K{1Co=~oe7th-=C+`E zm1|u{TYxVKY4>3)IYnSyr=r?2|AnH8Tv>5kiD;-K9!V8XMsC|$T1Q)JU|qYbku(Bh z##~zURz$ULTScJz{5M;gphW+0r_sWSt*rYkty4^tS7=sCu{l~st@C91d&e@7YL|tl z1yw4i(`v_zXxaovcF7XsbhvUM6ZF|&js~upU!1D0!k5}H-W&7Ei9;L4^Ki@lU#go9 z`DwkB*>k4jU0%-ohEER4WOX#!+^|+!E=<4Zf_#sL?KE7d>-DY4Ok%i>Tl9$CMrX#t zgLv0WyE6IA2CJP&+@gRg{e&pqVrOV|2K{;@t)lDnI|1R|V(XMUeklATUSh$b_~)YfNJci;24BC)h_&KIkyw=k1}&j!k6 zBc^Svsx--VmBo+ee#I#I{DLIxcyM}uo zHnCzB&qp^9IUlTK2i%Fag9O}_e^++E4PmIvAGxO7q+?rIkH);>JNY2 zsUb^;wXy{B>vIOLIYHi4kqG}Wg~Qh0SJFJVS9P>td;bbLtJ5D@wV-6Sdb52JX=Lk=jsqM|wHt%6n z0N#u?z8_8uFm@FyBPW66Jt{^)7?JG>&rN)4C-B4Q7EQB0d|5JsDXfGsZe}-6CoNvFhG{{@j%$%m_>2c4jkU(C$M7;ekVK&cci@id|0ZXojUa%q`_&VpW=MOm zIvZ`nXI@nuGKEwXp-yQN77S&z_Qv>?Jt+EvMLDh;{GGxucNgwKue%xZ%KU`R$cW4V zXGBX^OVp^)7_%$yu=%cCcB!NPvrl1CYZ&rPuN&@Lx|0o5n8he__6-Kum)ob~ zZ!1K`$Oi}hKtWlSBDf^qlxaS|YPgw7A8n92${4pjt6c0ymt7qGS9Nr#D$t>(a z0@|bKjQcel-cFF-G&RSJv<^4M2PQ61ztJrcKmV!gkJ$eROZtO#)h11m9wj?IwTm_0 zUpmn*!!FAPWOdYwix_esoSJ8viET!=m-?w~W>oP3$B~pQhwnjk^jyNNV)utGGVBVG zPuFEbf!?4lz@L!O;X+5sGZ_Pkx<2-%z2NPuGSA4`b*aoxB5onSBOo2mXl8*f9rQ{t zD}xXNuMj4FiaGv1x5RTN8pOxnlYpFBnvii&*--P37GdiD2@oRY;bLlMVrn8~=LWE` zGyx3#XO8n|C>FStKxsDLUR0xULY(qx3@*doWfu%f}ROdJoatF*$H()ip*Et97|8*W*X*gdNrBisI21gw0XGo5>K)vOH0=xwQbb+I`uk=wEg47;6xcU)r>DK z>lRu(3Bv=EabKwUkXM8%J}Ye9RSS?Ral|A2@O&v;gq`pZcy88os*Ew4OX~Ju;opLJ z;ChfQp(Xm_;tO-njN`m>+hmwzU=x1!V>H>$Ytwn{mNgATe{Ir*9hqh6-pd!^$?j<7gL()9NyD=E^6Y zni1=mdPi3c-7GN_8ph{1#x;X~@jRRm#MwfQm>1EY?oi`FCXlq50-ZyrymTq< z#+yz}wWn@Zw=0iC=mKIS=pq+wjIcA<3-${tE;*Z&Me;Psc3!YLtSu^`ln325tVqXF zv(vtv91EN7FSFgamKhxz490r$OTS8PqIpl!U!r)?4pCI34KB^nXqFE=v*(fDP@tqu zwM|AlkZzC;-ryDX-jFF}_MD!xCovdS2TZ6=)RpFaMn6zo26S2%Kj1Xq{8-JK9rS>_ zn!astx>PEP5q^+xQ0ROZTfMp9IOTyfVC>*lkn^w}0mP6C*y@V0C?IO=RvH45{;0)} zGZ>?ZOSlp=1q6hNi;=Q87N&{IZeuhdm~Sd76TM+Es{Xh}ZO-+0<8BZsx%7qg~bz1AfYj?c?2W+yKwu(@*mDaXRzp@5ytvJ;g-q&@r zaFtF|juzWH7ZtqHIqei)dA+&__mB6lcQ{qLZWbOtU~NRY#lW1w8DN2QTaf`3;ML6I z6iW(>Wr<#WObN18Ir?f5fb6{wO{}<^uHo$@r6D&blfLOiY4g+{_#NnC5P?{tjKKxr z+ji)4K&%0T3kj4VABd&6$So*BQ3rS=Qs5WvK!{oWVcBg8Ol%4o^#qlD#GVa%gmLF$ zpzMc{3kwhBoG;(Y-evR z6ot>Lz#3EV)!>>5$Ofrdfv;{h3{{e}zUYA$d7qS0PDJ`s75WtzhQIw7dh4k5KkUsD zB!2&UnLC6n@QxNV%47m9bpJm_-9btD-~{U*h!2O~38vA?X`wR*}xZ7vjQj zzYG>qA;qZTNyU6o7-JdeF-@WSO#K08P`KJpwDp5!k`5+9k1ZXD^f=k!JjwsKG4A*J zzE2x~PdH90%w%1>i7J}oloDmm;-lmvlDm{f)!L+C%pTY%<*;{KO};F%$m^iMA2`2P zzFx+WN*~Lk7Pe;mEg#@Yf1+uZg*j!jh`R0!Ym{(y8X#7?|Lm%L&r|)ozN*OqyK&Vn z_9De#9~`XWgelO4tNgylZqC5FV0*c~BTT`;N~909r(7$2TrXK{-Ah1^8u={sc=qmk zi2c@y!WoXq+rVMxXI6lSnUSIax~Qe3w}CkAEZXrQ%V!&Zgir9w#|KAVcqp(?Mp%-W zCci!xPQ{%Q#ru6@sSVyo*?nOP<&LQnFe)@*Wt}}u<9ZIx^0N$%kse3JBX~?8P*c$V z%244y$k6lY5z&1r4kwCiuTn5#L@}-{MfB?Lx-bLnW9%==^}s(~bE^MI9ik{BqQcA~ z3@{gR0kH~08UPprcP3}4*#Vxlcc7nfv1N4`!lRam}MTM%^YL7?eR|t<62Dk zMz~aMG6gaVkV7=YHCn<7+1jSZ=sn7g-Cf8W8CK+% z%tcfV!;U3P8!so9WF+%aMxwTg4P3-4ivN6N+fF>>KJe;6GdVB1Z^$l7BfD$XlnnFW zH_>yL?Pab)IA5Lr?YV{$k^YiI@2m48&CRCuD1v%uCJG*s(cmhXPvVGMx$4Cn3zau? z*t^(P3P!C8{#2*;%B(7s04u|H!f9!AveM4fh*j&it4h;jH-qLe)OjaQQT|sztqqNb z8Aoz09QXDShL!*CcSUzjeqVmta&XgA7Tacm@<4L8cI~p7HF=6Ac|c5lUYovpzspkO zP;s*Ib+GC3apd^Ku9n>47ow@#iiG0QgHUR!xNWpyxe#drVmq9dWMU)Fp$(2>0ZU`% z6f~C=@%_puXI7c(xkV<%oGN8hqA z48x27$##E5)3Q{LV#hnic#*CY!%~oE$}}~B;nY}-81uTv8%*b^3-4AX;^aYzSJ;2U zlWKBf6eF0A)lS=3>>MQ)j|Z)uHcWCp<0A1*@0Af~&BfbKU+nwX#r0mViw%vZWw%V! zg|3-yTpR(aY?~y|_Mc=Zi&kG4R5Lq0JEArO@T!(VCam|S*^F>w2+ee#8SKyq{lxB{lq!eU5-S4~r@>;09H zr%!L_gUmxeRguLb0ZKyXKQN+=w1lEd`6lo4$uZn zl{AIzy;tmgoctb0@CY(@=~K&=UK2^HHLWt{ge3v094;UU?SOZ4HwP38)uX)ekv5Tf z8I#MxI?nbVF%Eke*&zirxgQAclDhOcT*03v0^YB{c4%LR@eQLx&ji|O(xkT&hNKeI zNVg5H=#+a87+yx_EMRpM9+)%@re!I`t7)8Yk$mIe_xHdSu$Ymq-xUO+s{72pOb>gy z)+@rQhk$jSJwzW0z93-C3G7x*!8jF`e`7RT1>Rdh;a(`YoxNwru8I}xo_++3p>&Cp zhld+breAE&fb}+L<_LCYB^?QL%7n-`P=e=m*DNR3!pE31lHu6N?k`! zDV%mJ`8)3;pjOUTN+NB_1!v=>-qm|aYe8DdD(}zU&IlrJic#V7i)LP?#)M%PWNe7s zeQMSiW)|M`T`rqJy+QXkCAp&ftxeT^iVEjl^HDam+Zn#4xAk{x6)f~cL+A_^ zeH%J^#Cmwt^Wm|S9a&Y8*QpsGu$TuerL*E>%g+s{sUWfbQe57!z|vdRL*sg+;C{?( z@9Y#50K+#-AXZyzF&ZX3m0Uv$jYj`1%Dg9H8r0>|MxPC#ka&h``>IQ0?D;MCvJqXK z-CLPon?M3V$VS)?&z*E7g`|#PVC^rx{T~z{uJfov+#L~NBD?m@#`gP6>15eY4i4YY zQ`l0~jE;}y)JFO&)ko*yy`K}rLy7_){00)D#9cONPg?74szG_40^faq%C~SBISB1h z*#Kz`s?VbxJImzyUkqFi@fCFaJt~=F36-z-_LxrraN|9?V62)BwOlbEtA#|ISs@<@ z!D^O^`}TS&Ws0M4G9}oi()Mp39+5oUpNisH^U~06EE?Y15YhkqcBgy&T={hG zuByMCPCAJcftOf9o%|kt52pU71H}w?fOt-gDH7-7OH#`A4b(Q<0FLm@+uy<@75e(h zPM|K`4Ae0E->b6!sV~|8<^2C^m841o*5fZZUn~e(#;6{sjIG42)K9|kr0Znl+cdGY zDv&t3Yxqtg0DAkg#{Hy%B(Rb@y95e){<+UyKMSRf^@d)@yI7XsoO1D3klvGGYlY z&(y!@SEUy57@t1-TaF{CM@Wq_pQLhdr+v0Ctl)S0hA|8khYW*@W+|@A(QPCIOYMPMYA=41acl-kCg>;_x;Uw zT=f!LnMC$(nn!|M8=`L1n=T2K)A<(;8A}uw*za&!FU>|Xoz|CmhjwQ9P%jMQ`qm#* zC76f6d}grQmqh+Zg{T*Bo%Dy0g&rX00;F!*P7@+dhn_T0Fc%3?Zf|lng39X$qlmd( zy7e=9?bitsz16J=5$!@9^5&=s43VO8i)#SU(ws!bI8$@`Pf@QLocQY5_zCG$H=cEY zQdnS9gGB`@E7d5%nkyu_+j{LyaV3l9Gj^mkih(g*F#!&tx-Q| zxdQVYl!5WpMY3ok!`Fwf#ig}bYtdhxCWQ{u&KfjfGIY1o~ z6aNeeuX9oE{bBtnI=_uWZMBh5?|h@QKPjL2tia^;SGg7$e@meH^P6X{FQACA@&(Fx zh99?)hZ+e9p>+PwHXoXsIo#2kpk_<4rNQ>D<8ETi9DjQfk7{>oS%n?k8K^5dEvdAB z@Y7*hK$`f-`0hfe9Ev~xa_1n)XJcbkU;R2yR{v5gDm|8|$T7RaH-esH%c_DaAGCpA zv3*b^X+5FP_VqhXXd}|+&JS%)N`4p-9$vIM*?uP!1{7LRpqPiK zhuC}+P(4_oUmE2LNjBpS6bd79opgT;i5+U4c0VqPwOA!uoqj*Om<{p_)s7j8ADCKC zg!@-twaPrEpcO34y7r!tO(L>RU@(^+B3T`efl)kx^r!|9PJGgU6ds<@^=8#)Dbn!5 zTWqmh_gVM7a|E-QCZ5*LdBsakn(y*EX;CXl)NvC@-bte3;;Rt+t!@hjAdKPVohHuw z_Eq>evUY#JS~pZ@3aK9)Az7O>XN5G zgfXwqDl&F0SlZn=eq@&um(7P1zA^d>RVA)s-(9}*)XeMmriXxqgP5Wq zBo99{ni~O+Swx&RC^(I!`a4y@7y0Z#oKO?pAN(vdwHkvYp;*R5j0j^uIQP-gfiV-h z0l$L|-9glL;X!(jqUZt8wn+sJS$q06J3>v8Qp6JTy%!F=LrOFjGuyTu&h0f64!cJ| z^d}M44YFPJb}ey&jovHu&}Qa#y+Psj0t6bwWT8G^gi8|-tiCoJMCSICZO|)55s1sU z>F-EPe8X2lusYWO*fodX@1^I!oSwp1>E-V~Bw?6cZhGZIe^)l)Au;<%3u7U&`owPs z2Qw-3@pTZ8BK%;=Oq>oKnq2M;OA6W#yY>8oaU$onrEl7bZeQec_Jw z<0GCC09lWw27~d@2n`+4wWEW+mk++}ia7MgoO`0+s@$g1!a!$i5p24j%rID%U+pVt zB%l;3Nv?qYvpfy-J)9EzIs=>hE)_&-X#{ z3$o5#%-Eew?-!+LR@dZhsqAdClX21j%h1+n0UjJ#SU zKUhapc=d%P^=!Sr7(pp@Lp>UEamFsNMYE=LD-Z^!P`ig~X2t$)h=cIMy~`9{5*i0U z6R!2dMIDATU_loJ_$nr>2_&!ZR^SY%G_-Uzcnr~hE`teq!zS?2wfRFcdw@MQ$b@`D zcHL}a&TA1TpGMyvEbi81h<>OtX~OCGq6XeI_1Hh^!ehJtlfZJ!bbiZR_mGSsT9%7` zEB*p=ZJ(#!I{<3*K4G^scbhFiH2|7P1l#d8*xF&Wvd6Mqs9K8_7JQSwX{Ns4dD?@B zI)^`qrg`Y%TLm$QCxOL>RKQ|Ba1z)W&A^3FvZ7>(^S!kq==91|ehO=eG2KlN`b00W zI|Xw>&lB6!&K`9t8aPzTD?0xe|I{ZrhW#Qu{xJu80!*4Gc$_|Wq5X3Uj9~yHd@W=2 zTvup3WbWuf{$mjF`Qe?9?dBcx2f&;v;?mAdr6(J)F}k3A!yEr2J@j0HK|n7ji-e=j zFkd0Nh-tZ>c=Zs6SIm4iY+iaMO*N85y^?3abbds7CM2$5d{6mKhgU3?tTU(oQe3;8 zl1h$OxbP;4tkX5n4pV-3 zIX;2NS!@zwB-7Is;n~O4S)KDxBoEmodh}aC2>gCm(KnUugO}^5srj5<+b{-wY!NE9 z(DR0|8jabNKW4t*1_i|5?a8js(TbbN-qTOVBYs6#`<3Bf*E%5l$&)6I5EP6ok@ZTK z%4ueB|6VV|j$Vq1o88y&@wZtSEJ%^?6ttl0hV@Ss*8fy#bxsdqRsMRF*CfFHuZ?|C9P z7pLpalSvm#k3*CJw0E%Ub>oFCArXFSbHP8uZp%&T}xw49r>L>W)G$a0B z^^>cXP6E0xC$RzkcRKEPS%(Ze`#FR#9w>oX9~X=&!E$B}{0<$$fQLyXit;f;o6N zlUX&)%|zK;Zer9S-!VIydu+0dK?M4kdd^Wzg_HzUYs@OP0Uk7@1x!U=i>Qr@)HFLC$COEUuLIQm$e)QV~Yi&Etsr@h6 zyTxOy+a&HI1dV4lHc{Q$N-6|PTg(g0Lq^Yf6A?)|sVvR(p)-TazWJ!UwoWu6$M?2+ z=-h7N-&(gC&s}ieNOwT$C+V#P*P0tm4=yM8rc?(`ndxQEo}&bY*!IYJDCu`@X6;!E z-BLl9+V3`!Knh|yz_;Et)M^eJdBsvmQ z9_d!slr~e{65u}jK`y9@`^Kr2Azrsc2)=r#WYKEGcT7sDo$7GH ziWPd&jtSXp#{Ij<`_5=hEGFZKS4uOVdBZGI(8vtYFd}C5LmlT^G%( znc|3LNz4)QBn_iB2qBQ*s9+-tOCQTlOgJJ5Lr>iBcwK~ygY$UZ5)J(%48vfIt0Qbd zklLS)jCV)RBw}y=0s;y5d9k~pT>_sPgCfQf-m)thw9~E-2}wTcp)EuxF=uvcKSb5> zss^WX!ifz1j*$9gYJXh$SU$mQ(*1Y~d5B9HN?qj|{2e25=GL5Ih?r8V(d!4>f*LKt z_v$P4b@){kJLyPW`2XYVEt~2JyDjZN@F2lGxVyW%ySux)2iv$iY~0=5*|@tyaCZ+7 zczNE_Ro!3uRQ34>t5&W1USp1V%`uTu^3vkT=mZzmP?lc!Q?96`>cIs(C$ZGZVk8+j zcG7PCl1V$p-8An!7jX6NeU8=Q=0d#d$1h3S__s-**}r{T0r>ZOJcKSP4@`q~#3KJ8 zoN0v*bJRznRtmM|5h9aU3avN?-oqYsWCYYE;d*6P9V`Zi{$8MK(6+o37#7w0#jsg{ znEUMm@;?o|o3TlHoiED=@a6UV-)r>$*M{DISw3QN|GRS%qblRFppN!ozo!|g*vAyt z)UTMvKIBvdr}8WCr#7DM8M~9E3Jd^)`T$n~TgTZhV!Y$EsTievL@;S z4B+<019MCnD^-`VhwXRV`RB{94y$>esXPtgI#1e3cDF+am-5*C>+uoF}cLQXyWzH_+HE1$8tnB_YS9chsmZ*6w9JROmddq*T#|xG2 z<7cJX+Ki=|Hy>>|Q<6Y#RjZPs8)bP|9*~oD9`Kk2CdAG{oszEzI=Qi!EFDIefD>h+ zrW7`0xa&%D_a#rS0i(rTYX3fZg}o{JITV^fzM;WWy$JS)!2!@OG=8ewBm}hu#X%M< zI3QUG8!8w#Wp#1PmEYlCR2URvF39z!BCqDApUKwUE>lif(%8P?XPjs&SLj4~5ZHAc zKka1Benfbr+LPFkOr}^RSoDks ztXNgpRoE};pyL<$LY1C5M+k$3OCVfNK=r@NWn>DE#1D|LD(|Bp?YJF;yT*h#_=XJ9 zBUm8r;MH75m@P?rBtfDLBU~k=s841aySRetPgbW#syjOahcJhh%O7qpB^y0Gh<_%p zcMOo?;^QaA5)cxybwwfz=ntv(-UdufcVGd=$d|BCCUH!LgTGjr1bVwZ2&!2NBM1m; zdZYgV`0ItECTRNWdm$EnvU=>O0PV@z6#hLWba!VEa z9yXDM&UbX0OJOyWM$f0pTgu2h7ZoSXbT6t-arq;ql?-u69qXnUkwD3mtH& z#&Tn#L!)ZSjK^DQ=f?@v=@4K=ffH>O^zk+nl&eS}47+A2_(4k}DdFZO!;FnXhssd< z(?Q{!>@L*H3l<(S^`O0YyfYD~vQ3H+i3BArdxY6uByS)smOE~(AYp>+UOygRwCI@W z8w=&#)Z^+|wz8f{CZCpi&V=%P2nW(UUb}BBxMH)?Gcf!$5 zowi!S1gsEJZw@VgLhZoavK~t)iMVw9CHwY)5!5F+rgZ@QV<%n1G*cgU99wK^iI!7S zmMwWX3>?~u1)}5vhD_buA}Y%#kYJe{nNv;%5$Xv$n9UY`S&$Ol0Ml>>*9_@0YR-dW zO30=Zhkc+bQ>ztzmd1QxVMz$ELc2ESfhh5K0%O+dY+lWuso5m7gbkY8VK}4B5(~3# z_V#w#yK{`hQQ#VRH1rij)#QmHR`7Mngd{N)oK;RL$F4L_e-MM-w?6PS!N}FgZxz5> zCs6AW?5h9%AF zgL3AWr-9Gj>x~%s_phk}nt02k3deOGdpV-brYD!0GPVx2H`(o(vi3Zu+sohr8f`;TE^6Uz+{R z$*XktI^*omh1~|4Ta?Z&`OF`XQ|a!#n)@6p_&s-4?NBnyK!u9RN)vSGZA5XyJ0(S6 zqpYEucfJR8+&>1oT3crM}q}x%ja6?+zOaL$3mL!-2nq z2f3s_?3lnU@9o1)8#aLFD%KI?njR`pt%fPkU>T!~SfEu6LL|MRy*Tv-iSyV&YNAI!k`Hz(TWRtMW* zq>;JCq~Gl&A{qqjH<~_V^rzqV<|W&Q;-%OZ=VjO@f0rGes`6#2weP<+-Ha3%eSn=| z`pch`%j}gfc5SvfJ?^p7$$T})M6ST{xA?omuoJm~+YX&)^q2;oCk_A1!MSWt|3Q{) zj?vwBask&JJ5S))3La;O0q2eUJHTEU-xaK2Lv6RW49)F=of<|Ffg(6YJqkPgp~{$c zUZn)x4OSQk7Je?Jl7FoBAvH&-=z?VZj{0#XwOc*lq??V*w$(D#^2nYxrOFu@+v6L}ckC$FdrC=jQO&;3MsucZQ?atr zVJ$bt7yehTIrOLUqj#rH0b#Y<(z#h0aHeqVI`M}zVr#H)$9c5qneF){o<>RAOvi=9 z>`qI2vD9wu06oYBl@4(!@qxW{>c+eiv-v6$mIOA+4K1zRZiw|IxMD?yo+@{r%RfyO z#=*gT&$l&|%RLShG>U?rA8b5h1nJ`_% z)@O?$Dx_WXTn2-ND$S>#`aQLVZ(6F@2y*!tZV#JkMjIDZ6Fa#kZA4+9i-Mj~GLoa# z_05(M$9-gAGAQMrJQ+eS=rRj}xb0>S4XzxbOP%cZ5;bGhJe?JLo**FMduN}Q^JTs7iX*r=U+VW*T$E$`y%*{4cT7!k0}F| zSUSGqJ#Ca`)0@@;@eIxMJyfy!nUUK&$l3vLB?`1mrT2#g_#n#v!d@)frE^Wo1{_jerLk0E|E(&Z&fS~h2&gLOXH7CTc zkwMrSU&L1BgxYHgP5RMYbLSoFBMTXIR+y*+^e7!WewM}DP4-B$BST?R$}pNTiGchU zkHktevWQ-bp~y&H93AJj!arJSIkMvMAQcwl;)EHN5dRs@GcUN9Cmwt)qF7|>5AOcj zV#T}T1j1OQeuH9hs1r?U2azBA)@*)Mk4ahjGlc9;D$jNCQ_C8+ftJlZ+0pHfHqn=s z2kdcA`=TCJ?>MOApOi9S>0z%_RI0a3c3#`2UQe%48}*yjQ?75h%DIS)B{F{Nu>FtA z7It|sRfnxlN9?(c)0+YOrO5`GCNmO$-oEKKm@oWS9+*!S`S;_m+BgL3zth$KqaL>A z7Z>p#i`CxM*-OFL+RViDztnY#hLxb|3i=2A#6#ECTk5=JxC5ie?sy;OW+KHpViC zQvXRxOv=W(!e?nu=Glo$<~12f#uPOH5Jai%ZO@t<(?b2gYlchs?7**v`Rr(Et%*}N zW&*&;IL?^1x}@@`udAT=&dqO2VlTmiXyF=EtDc@0ez7IY8nYrB1&(94qAI?s%ngbc zj>w+XgYDUP6fK4mDb|oB-I@kt{1|zY5;>}bVr}#*3Dm~m37ph-wK*nlAWDcNAtPL< z3YN1vh#ZK5SIHv|uyUxH#Jt>dgryx#!`7m~Zq7>0HtmWYNjIvfuQT_VtroXBax!mf z%qhKHrIk-hbhlYul+9!)`peE{W%+NK%GOVZIVX=Xdez=OHx(6)Bk|EvN-xH>w7`c; z(Dx3}EsuwOr}%XGwB7ie#bdJ;=dTBC>0_#=@_D$W65a4GIv*TqkH| ziRgcqXjUC?3it~R_NJp~7+WXd)Mt3y>b3xV?p;W%4I|M%0vb&7PuP7m|E_laS5Ot zKp?g_T#xgV{@ibAwpnJ1ic-j1H!hOpL%9eqF3?tP_E0}M!25pw`oo#oraN*4#C2~y zzDa~4v(6(-nr$27IUU$k%x#XjJU236+ ztbhpdJgicGBdN(Y8IGYEqiN%4qTpdOY*qtIXF^2cq03%bp6}wF&LckSsD+ z={B)}YLpIA+k{y#QNtKT?6?gd}=XrdhJkV1oC@l!x_pSi3+6~OdY^0$-gqaZSlYW zxJ8bqDOS^GWoC^mF0u+`6YB+N;466wM`1%nT(3OogBMXS4qL z(p%kkRId7ZMXk=SaxfhEUOwviVN5Or>San*^Vm$n-mj`HAI(lg#AjGYio41rNl5-9xtj zjRvu9?^_QYNsz;6_+2a(|CFNus4W^|CXtgK)aPNE&dYMEhD`-bWg1K-l4YFT#@xpO zS(w4^8)1`l;q`l%bwT_|8#`tKPyuR3J+Xh8dWsHDI3@2+FzW}_GQA593$^(EOoBhg z`eppm5v{QoEvxa57o-JXVDwGcm4W|b;#mam}y`AO^R3XDk^EC=}ziPBY{N$HE4v60sSU!}1eGPn6>RbNNL7#i6p zr9|flk!XWfvsbtrODvCVF#@KYGTYYt0kdg582}#_`@_Lwf~zfSM0>uClW5aw7p^_h z!BL~ruV&%dIAccbvWK27vdBmAYBGxACbzzG)A(WDiwVOyf{9s2EYy{zSc}KLUfey! z`41Ooxbei2_ooxDSL{rVXhRyN)w>T~0MR3xhBzyoS*1zAcgZu@~I>FyEhvx zDyq)sVID+h;#z^PMy+|w%8*TNNqgHlEaoNt84dorSJe|9#qDB@<<~3JH3%UbY{W)X* z0P8oYAfHKLa#P-eyrXx-&pZ`HXv|aAcJGUB(_|ORx-rP-gv_w#W7h68_u{F6Vdz+LxA;kt9pG|MZB&N&X=Cj~_}( z?Fu3Eg|Vig|984g^ncQ!{a?E6|CDUmT0VvGGDTvwAr`y+QG#knJ%5JtIAsfc{CyN!f_DKlYSuSnmE-o%T zvv&3kE>|SAjSCoVk?Sf|6ciqDH5Tuu+N{73~*w?x5ca*t09E!;}v`M+FRr2vPH}I;o_DQPD}Wa zvlaP-sAm~Jqp2%+P+~fLQZy}Xa^I+#XR67)y$6WMPOhYEVZ*?$E~WqYhK$KMhj95A z&;2f_xcZF}71lD3J&4}W(Qd{TRB9$6cp8xe+GG+#1Q2I;ER@?Jmfvbx$^=_!7V!BEq6(J5SJ~s6HA(xj{z*OAE*Knb z2IFGpxKbw$v{ZBod$@7tXeE-BypKV4W5rY*aLS0jmk5##p9iAJx<1pYY*?j8Qec}{ z?oFq_a>-W4Xc*U9PHvH?NG7o$OScZAHOnaN7lj}2qy6U9%XGlZ|Bu_8Rt6JIfF*l7t}?ZXDPTt&%>gnmA1lHhXsv$?iI_CR+UI zIvW?%jmS!@JiscCP-!LdYYY6j#izwY@Wy6s)5Lw zNA1sc=^;xzQ8#wh^|%}a(wd54Bd=2-9oC^6*-{k4WY^bwQE`>?r8PrL>^w_c zddQO|Kl@$f)* zI6P^S84U;$&BBgxduKw`{DLErZdoVzV^5MJt0RFxTl^# z#a)WI$0D+nlxuOAYImR*5D!lp#^Mqf`uGNtt^wa5)NniZfX;Tbr}t)H18mEr_%m14 zW^BWHwI@QGqTT)VYRCASn32}=ryUX^Gg>2FYsDP>sOjttC~SKgn0>6-fF1KzHoIrF zB9yZ*VXE>2*Q*>Q9}O1wgZ3bYRb1K29&GykdPn#RzZ~tUXPRbSh`(yd6h@#@fRGIi_PwSFBxQ zYKAbGuKq60a_VKxyKPc&&1?qENAmK0w4s`_#8sjlE8P0kM1IP%BW0*is~Ggf4QN*w2A!YfozlcO#oA;@S6bch6K!?w$C5z3S;N@w`Ukf#or>}mf-MkjHG==U{}Ss zWo&O#^;r2eZWk%--+XE!g)Y#W@8>bt9_C!lE>E;RI;Kq(*3k$Sn?u`7Mnm6m4G^Ri?C|5eO& zt0W~&ObTa%%&_y1zXzC{sh290bgN)ALN8b?cZR^AGQ*%vmorkZgZPB^{3&cx*W0#uQ- zn&yB$eMX-Z;7;+%c(0l0*pTXMb>A)#p0s*y!4@^?)WLLVKr=_opq5C(3W%i=xVDwA z@lLKpnHp1ba%P&I$-QZ}(Q@hEA9V}iTB*iekWU<{v6p?5YFLR=>ii(fnlcdV9=aau z&t?DmD`Ip@GyJ@$2OpOR2u{2c`&;1=SW(d%FS)FjrS>9@Iq<{f)tr{i_7+>(9HU&! zf-qapgdGFELswya2zNv`B^8)ql#$DAx+!Kso9k{sTs79(3d97hQg7@%*H=C;pd~)% zmizWxW6Uo(mvlJiP!0@*E?n`s$OKjH_`{e_!wn^Xt2Gp&x~3in9@lC$A4O!n7m+t*x(6*+EJXi_$kL z0BEBe2)dnwoz5Er*q)I(tPhHQXzVK!%Pd-H=HuR328lUNk5M-UvWPDecGta?_;lcTOgSVe}0%B8yEjC;*VZJaosV!1CuxU zF>U?>CUr*@Hq$8+f?x>88McFL6|mqX!GdMZJZYRhB|TPe6Ayg(Hocz{)<2;*vgmy^ zWpN`l3;5C28o!GNaKWCY2~4XGG-3jY!OLK!GVAJsm)`gSeqhm?zI+1_17t)!VHhxX zjR45+;V^NGypfey%TYI2>@2#|H%d?$yZ7)0KX{J&~5;&*s~p&M*u|7ke? zPy%z!soAj`bij4w4FrQLaCc>OyiO_vb#-udvM$G{5k|rIw-EX+)q4eu0?Q+IswW`E zclmc*#Erz}z)#bcOc)BSeyIz?JhmK@h+{`c(2Cd#sy@*`u2VbA%zmkuXJ9!)-QbV5 zq+ML%u2B#sQ-7UENbgRos3$Bs@<-$f<0k3ApSlDiJ`noXd#}W#SD3S&>_;bVghR&OP$%)bai}os4nK~TS?9j+m!}vd`1<2@C20O}{s1?4TrA?^8|Y1`+^cc|ql@8B^1%ZI@^=TEfRJ%#6-{+D zF-Q(z5b8HYc=j5p#YU&U^Ewq~-ZG(b4j!3wDZJLDzmpmXY}q+twEN`Ieuw6KZ<7F_ z;_$DZ;RjM*|KzXUbqKq`NBCSo3iA7QA@-&nwi|=EqO~oQ^^cM;Vk&6uhVe8<-j8Pr zkD_Wss^qTHN>$V@&Els7uUOa(d))KS?cH1Jm+|<^DiO{;K7>zJa1~zj=Q=wazt(ov z_bsALo^SF<%ICN6Ytl%&m){i|jj>`q;6e4VLc9mm3yx*-AR&Ziq4(3d&at3d)v7d$ zwUGGVT)#Wy(q`SgK*wIJ8!zhDBs-Mr$81mjtL`lb%L|4c){d*}*hXp10pGR~RN>_8 zHmpb$J2RTldE7xzGeTV=paAQatH=)I8zj(z>B-E-=%@<9ll7a?hG>ZYjZ-aLc~Gvc z^J?jZOJ6B0k@uU(Lyn_dp?&s`HoQS9Mthy2YudQzKH{k_rm9X6m zv^N5%Tg;1<1VjyVg76wAaIpcA4o63-MXg>s_TOmmus<<)f4OeFC!L&dlwLvKG{t%g11LiC~b8lZu#LB6Exq$;M0)gG&t3Cw5pZg1rD+>PCx@ER(<(N(jvQI) zk`|99s(x0Lt}ZA`PhHTizoVIUOYd*KSZnBw{ZTW80A{Q2QkZh3$hkVj7PIQx)=L-^ zOY6DC&b~g(c1Kwwyle2f)4onkj+iBG8Ups$x5y$uR-9+LSRyMgfshVt zFiTBK91^pot*%BKoMF3bvDU|g9}W3~=M4#PfB$wJ+bct9Bh;jXFHA^v}x3 z)84IN0;+dWgI|IU>%g$ghqt)*+x06i;!2%!Wx^SDl5uOkX1O{nQ&vpH0MF8yiOk&^Vjz9%30%-Q{TJ+r zY3YdNU+4hrk)4XEEp2K&pMkyBcU*m*bEa?=Is+2#TWzUyU2eSQcf@8EtGwj{xm)Kq zt6LdK-iqX(Ck&pwPQdQM-DIA~ujkf|vH%m~cAa^fCdZg$-E;)}rj*QLwk$AW#(oI; z%}at~pZ`BZpQWZj#Dx6qTOjp+XVJ+1k1d-2JtF*nS~bnuu)eBGO9IE{i5y;Df>@}8 zRo`Jkv`{dFVDrquVo1NE2!40NHrG!K9Fqk?Mrfxkud7$PwJKI(R9n$eD`r5LfZ0WD zJ+H6({dx9F$#MCU#UW!3nEmtIANSe$yy-IY70u}~)9&%G;LzoX_boM2#jF*`@3)TV za>+P@cz@|wgO9Oll#h?GmcNY{b-B|Jyn*nRa+o3HQnFBaohlEK-=>Bcra7n(JWXnp!YO6LpG zspfKBfzet8pqQp%y^{Iz@R&rk3RX-w;)j*F42`f`l)#DXi%&MP&6JtlIXej2SLfy$x4>IJGOl+COqzJJ~5ZV_Bu5DtV+(M|p0!)<#$|b-T z-2kSeoEyF{_f~``a-83ly_w@3TMnr9-6pX>Vu5vRSJx>%R|qHdqGe$PEcraaN_hBm_wT6P`uAEK6R>&`sN)aE|+}_+3=7=)7kL{z7`tpwcG&!Q)k%h(gJVSK4;HiGY zXxbvr#4U)4Z1E{|mO#y82NNG$1S;0SFifH1W$x23!wytdam_7mm*&$Lj>YN;T2E*9 zmBlQPjbV#ayd=3O9piZrYPpXUYffFNl6;7JLs?{RlXd{9pl!-#l2NpxMe~Sv(>Tt) zWv=aGi@5L#+2d0SIO{yyP=Q{%@mQi98foC{Z{Bp)_}gzhs3r4_eO@ix`?%k}YH5$D5?ys-1V&$yr#X z@?Rup;D@Yg*MrUR8$$Q0rzY_gXi8%c(7COXP15DF*h@%>Cf5)D>^s1V;a2;$F=b#$ z-qD}?%L7htpJL9RpdJE4bb&$$ZzSC@T8muR);^q7ßZdkskLT*s~Tr`kYnY*Fn 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≶E<_qY=*X-O)amIvIv?ajA&7zZe=z!qukJ7IJ;Y9 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�E+E!(+ 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⩾D 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

w(OBx-Lnhc{w{jhk!OUp~j6LzIaU;NqbjZ7X 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≧tZ9h(IT-Hp6UT)WZ^%d4KKq0Rd557#Rf-2Ux) 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 TdVF#8jH+4=*u?j^1~_zAEejfaeS_o~U@eLj2T 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%0D1p>2R?I{awt7mGsB9 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%0AtIEplA2haVz`>Ia;!DtIT9eZ`lnVxD?1!aC{kIq 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 z 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 diff --git a/odpswriter/pom.xml b/odpswriter/pom.xml index 8073ec43..c253e3fc 100755 --- a/odpswriter/pom.xml +++ b/odpswriter/pom.xml @@ -31,17 +31,10 @@ logback-classic - org.bouncycastle - bcprov-jdk15on - 1.52 - system - ${basedir}/src/main/libs/bcprov-jdk15on-1.52.jar + com.aliyun.odps + odps-sdk-core + 0.38.4-public - - com.aliyun.odps - odps-sdk-core - 0.20.7-public - @@ -51,6 +44,14 @@ + + + + org.mockito mockito-core @@ -70,9 +71,30 @@ test + + + org.aspectj + aspectjweaver + 1.8.10 + + + + commons-codec + commons-codec + 1.8 + + + + + src/main/java + + **/*.properties + + + diff --git a/odpswriter/src/main/assembly/package.xml b/odpswriter/src/main/assembly/package.xml index 7d3c91b5..0ef0b43b 100755 --- a/odpswriter/src/main/assembly/package.xml +++ b/odpswriter/src/main/assembly/package.xml @@ -23,13 +23,6 @@ plugin/writer/odpswriter - - src/main/libs - - *.* - - plugin/writer/odpswriter/libs - diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Constant.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Constant.java index 22bcc16c..f4d9734b 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Constant.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Constant.java @@ -12,4 +12,34 @@ public class Constant { public static final String COLUMN_POSITION = "columnPosition"; + /* + * 每个task独立维护一个proxy列表,一共会生成 task并发量 * 分区数量 的proxy,每个proxy会创建 blocksizeInMB(一般是64M) 大小的数组 + * 因此极易OOM, + * 假设默认情况下768M的内存,实际最多只能创建 12 个proxy,8G内存最多只能创建126个proxy,所以最多只允许创建一定数量的proxy,对应到分区数量 1:1 + * + * blockSizeInMB 减小可以减少内存消耗,但是意味着更高频率的网络请求,会对odps服务器造成较大压力 + * + * 另外,可以考虑proxy不用常驻内存,但是需要增加复杂的控制逻辑 + * 但是一般情况下用户作为分区值得数据是有规律的,比如按照时间,2020-08的数据已经同步完成了,并且后面没有这个分区的数据了,对应的proxy还放在内存中, + * 会造成很大的内存浪费。所以有必要对某些proxy进行回收。 + * + * 这里采用是否回收某个proxy的标准是:在最近时间内是否有过数据传输。 + * + * + * 需要注意的问题! + * 多个任务公用一个proxy,写入时需要抢锁,多并发的性能会受到很大影响,相当于单个分区时串行写入 + * 这个对性能影响很大,需要避免这种方式,还是尽量各个task有独立的proxy,只是需要去控制内存的使用,只能是控制每个task保有的proxy数量了 + * + * 还可以考虑修改proxy的数组大小,但是设置太小不确定会不会影响性能。可以测试一下 + */ + + public static final Long PROXY_MAX_IDLE_TIME_MS =60 * 1000L; // 60s没有动作就回收 + + public static final Long MAX_PARTITION_CNT = 200L; + + public static final int UTF8_ENCODED_CHAR_MAX_SIZE = 6; + + public static final int DEFAULT_FIELD_MAX_SIZE = 8 * 1024 * 1024; + + } diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/DateTransForm.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/DateTransForm.java new file mode 100644 index 00000000..dedc9ecc --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/DateTransForm.java @@ -0,0 +1,57 @@ +package com.alibaba.datax.plugin.writer.odpswriter; + +public class DateTransForm { + /** + * 列名称 + */ + private String colName; + + /** + * 之前是什么格式 + */ + private String fromFormat; + + /** + * 要转换成什么格式 + */ + private String toFormat; + + public DateTransForm(String colName, String fromFormat, String toFormat) { + this.colName = colName; + this.fromFormat = fromFormat; + this.toFormat = toFormat; + } + + public String getColName() { + return colName; + } + + public void setColName(String colName) { + this.colName = colName; + } + + public String getFromFormat() { + return fromFormat; + } + + public void setFromFormat(String fromFormat) { + this.fromFormat = fromFormat; + } + + public String getToFormat() { + return toFormat; + } + + public void setToFormat(String toFormat) { + this.toFormat = toFormat; + } + + @Override + public String toString() { + return "DateTransForm{" + + "colName='" + colName + '\'' + + ", fromFormat='" + fromFormat + '\'' + + ", toFormat='" + toFormat + '\'' + + '}'; + } +} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Key.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Key.java index f578d72d..7ee11128 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Key.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/Key.java @@ -11,6 +11,8 @@ public final class Key { public final static String ACCESS_KEY = "accessKey"; + public final static String SECURITY_TOKEN = "securityToken"; + public final static String PROJECT = "project"; public final static String TABLE = "table"; @@ -31,4 +33,58 @@ public final class Key { public final static String ACCOUNT_TYPE = "accountType"; public final static String IS_COMPRESS = "isCompress"; + + // preSql + public final static String PRE_SQL="preSql"; + + // postSql + public final static String POST_SQL="postSql"; + + public final static String CONSISTENCY_COMMIT = "consistencyCommit"; + + public final static String UPLOAD_ID = "uploadId"; + + public final static String TASK_COUNT = "taskCount"; + + /** + * support dynamic partition,支持动态分区,即根据读取到的record的某一列或几列来确定该record应该存入哪个分区 + * 1. 如何确定根据哪些列:根据目的表哪几列是分区列,再根据对应的column来路由 + * 2. 何时创建upload session:由于是动态分区,因此无法在初始化时确定分区,也就无法在初始化时创建 upload session,只有再读取到具体record之后才能创建 + * 3. 缓存 upload sesseion:每当出现新的分区,则创建新的session,同时将该分区对应的session缓存下来,以备下次又有需要存入该分区的记录 + * 4. 参数检查:不必要检查分区是否配置 + */ + public final static String SUPPORT_DYNAMIC_PARTITION = "supportDynamicPartition"; + + /** + * 动态分区下,用户如果将源表的某一个时间列映射到分区列,存在如下需求场景:源表的该时间列精确到秒,当时同步到odps表时,只想保留到天,并存入对应的天分区 + * 格式: + * "partitionColumnMapping":[ + * { + * "name":"pt", // 必填 + * "srcDateFormat":"YYYY-MM-dd hh:mm:ss", // 可选,可能源表中的时间列是 String 类型,此时必须通过 fromDateFormat 来指定源表中该列的日期格式 + * "dateFormat":"YYYY-MM-dd" // 必填 + * }, + * { + * ... + * }, + * + * ... + * ] + */ + public final static String PARTITION_COL_MAPPING = "partitionColumnMapping"; + public final static String PARTITION_COL_MAPPING_NAME = "name"; + public final static String PARTITION_COL_MAPPING_SRC_COL_DATEFORMAT = "srcDateFormat"; + public final static String PARTITION_COL_MAPPING_DATEFORMAT = "dateFormat"; + public final static String WRITE_TIMEOUT_IN_MS = "writeTimeoutInMs"; + + public static final String OVER_LENGTH_RULE = "overLengthRule"; + //截断后保留的最大长度 + public static final String MAX_FIELD_LENGTH = "maxFieldLength"; + //odps本身支持的最大长度 + public static final String MAX_ODPS_FIELD_LENGTH = "maxOdpsFieldLength"; + public static final String ENABLE_OVER_LENGTH_OUTPUT = "enableOverLengthOutput"; + public static final String MAX_OVER_LENGTH_OUTPUT_COUNT = "maxOverLengthOutputCount"; + + //动态分区写入模式下,内存使用率达到80%则flush时间间隔,单位分钟 + public static final String DYNAMIC_PARTITION_MEM_USAGE_FLUSH_INTERVAL_IN_MINUTE = "dynamicPartitionMemUsageFlushIntervalInMinute"; } diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/LocalStrings.properties b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/LocalStrings.properties new file mode 100644 index 00000000..be7862af --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/LocalStrings.properties @@ -0,0 +1,34 @@ +errorcode.required_value=\u60a8\u7f3a\u5931\u4e86\u5fc5\u987b\u586b\u5199\u7684\u53c2\u6570\u503c. +errorcode.illegal_value=\u60a8\u914d\u7f6e\u7684\u503c\u4e0d\u5408\u6cd5. +errorcode.unsupported_column_type=DataX \u4e0d\u652f\u6301\u5199\u5165 ODPS \u7684\u76ee\u7684\u8868\u7684\u6b64\u79cd\u6570\u636e\u7c7b\u578b. +errorcode.table_truncate_error=\u6e05\u7a7a ODPS \u76ee\u7684\u8868\u65f6\u51fa\u9519. +errorcode.create_master_upload_fail=\u521b\u5efa ODPS \u7684 uploadSession \u5931\u8d25. +errorcode.get_slave_upload_fail=\u83b7\u53d6 ODPS \u7684 uploadSession \u5931\u8d25. +errorcode.get_id_key_fail=\u83b7\u53d6 accessId/accessKey \u5931\u8d25. +errorcode.get_partition_fail=\u83b7\u53d6 ODPS \u76ee\u7684\u8868\u7684\u6240\u6709\u5206\u533a\u5931\u8d25. +errorcode.add_partition_failed=\u6dfb\u52a0\u5206\u533a\u5230 ODPS \u76ee\u7684\u8868\u5931\u8d25. +errorcode.writer_record_fail=\u5199\u5165\u6570\u636e\u5230 ODPS \u76ee\u7684\u8868\u5931\u8d25. +errorcode.commit_block_fail=\u63d0\u4ea4 block \u5230 ODPS \u76ee\u7684\u8868\u5931\u8d25. +errorcode.run_sql_failed=\u6267\u884c ODPS Sql \u5931\u8d25. +errorcode.check_if_partitioned_table_failed=\u68c0\u67e5 ODPS \u76ee\u7684\u8868:%s \u662f\u5426\u4e3a\u5206\u533a\u8868\u5931\u8d25. +errorcode.run_sql_odps_exception=\u6267\u884c ODPS Sql \u65f6\u629b\u51fa\u5f02\u5e38, \u53ef\u91cd\u8bd5 +errorcode.account_type_error=\u8d26\u53f7\u7c7b\u578b\u9519\u8bef. +errorcode.partition_error=\u5206\u533a\u914d\u7f6e\u9519\u8bef. +errorcode.column_not_exist=\u7528\u6237\u914d\u7f6e\u7684\u5217\u4e0d\u5b58\u5728. +errorcode.odps_project_not_fount=\u60a8\u914d\u7f6e\u7684\u503c\u4e0d\u5408\u6cd5, odps project \u4e0d\u5b58\u5728. +errorcode.odps_table_not_fount=\u60a8\u914d\u7f6e\u7684\u503c\u4e0d\u5408\u6cd5, odps table \u4e0d\u5b58\u5728 +errorcode.odps_access_key_id_not_found=\u60a8\u914d\u7f6e\u7684\u503c\u4e0d\u5408\u6cd5, odps accessId,accessKey \u4e0d\u5b58\u5728 +errorcode.odps_access_key_invalid=\u60a8\u914d\u7f6e\u7684\u503c\u4e0d\u5408\u6cd5, odps accessKey \u9519\u8bef +errorcode.odps_access_deny=\u62d2\u7edd\u8bbf\u95ee, \u60a8\u4e0d\u5728 \u60a8\u914d\u7f6e\u7684 project \u4e2d + + +odpswriter.1=\u8d26\u53f7\u7c7b\u578b\u9519\u8bef\uff0c\u56e0\u4e3a\u4f60\u7684\u8d26\u53f7 [{0}] \u4e0d\u662fdatax\u76ee\u524d\u652f\u6301\u7684\u8d26\u53f7\u7c7b\u578b\uff0c\u76ee\u524d\u4ec5\u652f\u6301aliyun, taobao\u8d26\u53f7\uff0c\u8bf7\u4fee\u6539\u60a8\u7684\u8d26\u53f7\u4fe1\u606f. +odpswriter.2=\u8fd9\u662f\u4e00\u6761\u9700\u8981\u6ce8\u610f\u7684\u4fe1\u606f \u7531\u4e8e\u60a8\u7684\u4f5c\u4e1a\u914d\u7f6e\u4e86\u5199\u5165 ODPS \u7684\u76ee\u7684\u8868\u65f6emptyAsNull=true, \u6240\u4ee5 DataX\u5c06\u4f1a\u628a\u957f\u5ea6\u4e3a0\u7684\u7a7a\u5b57\u7b26\u4e32\u4f5c\u4e3a java \u7684 null \u5199\u5165 ODPS. +odpswriter.3=\u60a8\u914d\u7f6e\u7684blockSizeInMB:{0} \u53c2\u6570\u9519\u8bef. \u6b63\u786e\u7684\u914d\u7f6e\u662f[1-512]\u4e4b\u95f4\u7684\u6574\u6570. \u8bf7\u4fee\u6539\u6b64\u53c2\u6570\u7684\u503c\u4e3a\u8be5\u533a\u95f4\u5185\u7684\u6570\u503c +odpswriter.4=\u5199\u5165 ODPS \u76ee\u7684\u8868\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. + + +odpswriterproxy.1=\u4eb2\uff0c\u914d\u7f6e\u4e2d\u7684\u6e90\u8868\u7684\u5217\u4e2a\u6570\u548c\u76ee\u7684\u7aef\u8868\u4e0d\u4e00\u81f4\uff0c\u6e90\u8868\u4e2d\u60a8\u914d\u7f6e\u7684\u5217\u6570\u662f:{0} \u5927\u4e8e\u76ee\u7684\u7aef\u7684\u5217\u6570\u662f:{1} , \u8fd9\u6837\u4f1a\u5bfc\u81f4\u6e90\u5934\u6570\u636e\u65e0\u6cd5\u6b63\u786e\u5bfc\u5165\u76ee\u7684\u7aef, \u8bf7\u68c0\u67e5\u60a8\u7684\u914d\u7f6e\u5e76\u4fee\u6539. +odpswriterproxy.2=\u6e90\u8868\u7684\u5217\u4e2a\u6570\u5c0f\u4e8e\u76ee\u7684\u8868\u7684\u5217\u4e2a\u6570\uff0c\u6e90\u8868\u5217\u6570\u662f:{0} \u76ee\u7684\u8868\u5217\u6570\u662f:{1} , \u6570\u76ee\u4e0d\u5339\u914d. DataX \u4f1a\u628a\u76ee\u7684\u7aef\u591a\u51fa\u7684\u5217\u7684\u503c\u8bbe\u7f6e\u4e3a\u7a7a\u503c. \u5982\u679c\u8fd9\u4e2a\u9ed8\u8ba4\u914d\u7f6e\u4e0d\u7b26\u5408\u60a8\u7684\u671f\u671b\uff0c\u8bf7\u4fdd\u6301\u6e90\u8868\u548c\u76ee\u7684\u8868\u914d\u7f6e\u7684\u5217\u6570\u76ee\u4fdd\u6301\u4e00\u81f4. +odpswriterproxy.3=Odps decimal \u7c7b\u578b\u7684\u6574\u6570\u4f4d\u4e2a\u6570\u4e0d\u80fd\u8d85\u8fc735 +odpswriterproxy.4=\u5199\u5165 ODPS \u76ee\u7684\u8868\u65f6\u9047\u5230\u4e86\u810f\u6570\u636e: \u7b2c[{0}]\u4e2a\u5b57\u6bb5 {1} \u7684\u6570\u636e\u51fa\u73b0\u9519\u8bef\uff0c\u8bf7\u68c0\u67e5\u8be5\u6570\u636e\u5e76\u4f5c\u51fa\u4fee\u6539 \u6216\u8005\u60a8\u53ef\u4ee5\u589e\u5927\u9600\u503c\uff0c\u5ffd\u7565\u8fd9\u6761\u8bb0\u5f55. \ No newline at end of file diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriter.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriter.java index 60deb5dd..c82fcef4 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriter.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriter.java @@ -8,29 +8,49 @@ import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.statistics.PerfRecord; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.common.util.ListUtil; -import com.alibaba.datax.plugin.writer.odpswriter.util.IdAndKeyUtil; -import com.alibaba.datax.plugin.writer.odpswriter.util.OdpsUtil; - +import com.alibaba.datax.common.util.MessageSource; +import com.alibaba.datax.plugin.writer.odpswriter.model.PartitionInfo; +import com.alibaba.datax.plugin.writer.odpswriter.model.UserDefinedFunction; +import com.alibaba.datax.plugin.writer.odpswriter.util.*; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.aliyun.odps.Odps; import com.aliyun.odps.Table; import com.aliyun.odps.TableSchema; import com.aliyun.odps.tunnel.TableTunnel; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryUsage; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; + +import static com.alibaba.datax.plugin.writer.odpswriter.util.CustomPartitionUtils.getListWithJson; /** * 已修改为:每个 task 各自创建自己的 upload,拥有自己的 uploadId,并在 task 中完成对对应 block 的提交。 */ public class OdpsWriter extends Writer { + public static HashSet partitionsDealedTruncate = new HashSet<>(); + static final Object lockForPartitionDealedTruncate = new Object(); + public static AtomicInteger partitionCnt = new AtomicInteger(0); + public static Long maxPartitionCnt; + public static AtomicLong globalTotalTruncatedRecordNumber = new AtomicLong(0); + public static Long maxOutputOverLengthRecord; + public static int maxOdpsFieldLength = Constant.DEFAULT_FIELD_MAX_SIZE; + public static class Job extends Writer.Job { private static final Logger LOG = LoggerFactory .getLogger(Job.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsWriter.class); private static final boolean IS_DEBUG = LOG.isDebugEnabled(); @@ -47,6 +67,8 @@ public class OdpsWriter extends Writer { private String uploadId; private TableTunnel.UploadSession masterUpload; private int blockSizeInMB; + private boolean consistencyCommit; + private boolean supportDynamicPartition; public void preCheck() { this.init(); @@ -54,6 +76,94 @@ public class OdpsWriter extends Writer { } public void doPreCheck() { + + //检查列信息是否正确 + List allColumns = OdpsUtil.getAllColumns(this.table.getSchema()); + LOG.info("allColumnList: {} .", StringUtils.join(allColumns, ',')); + List allPartColumns = OdpsUtil.getAllPartColumns(this.table.getSchema()); + LOG.info("allPartColumnsList: {} .", StringUtils.join(allPartColumns, ',')); + dealColumn(this.originalConfig, allColumns, allPartColumns); + + //检查分区信息是否正确 + if (!supportDynamicPartition) { + OdpsUtil.preCheckPartition(this.odps, this.table, this.partition, this.truncate); + } + } + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + + + OdpsUtil.checkNecessaryConfig(this.originalConfig); + OdpsUtil.dealMaxRetryTime(this.originalConfig); + + + + this.projectName = this.originalConfig.getString(Key.PROJECT); + this.tableName = this.originalConfig.getString(Key.TABLE); + this.tunnelServer = this.originalConfig.getString(Key.TUNNEL_SERVER, null); + + this.dealAK(); + + // init odps config + this.odps = OdpsUtil.initOdpsProject(this.originalConfig); + + //检查表等配置是否正确 + this.table = OdpsUtil.getTable(odps, this.projectName, this.tableName); + + // 处理动态分区参数,以及动态分区相关配置是否合法,如果没有配置动态分区,则根据列映射配置决定是否启用 + this.dealDynamicPartition(); + + //check isCompress + this.originalConfig.getBool(Key.IS_COMPRESS, false); + + // 如果不是动态分区写入,则检查分区配置,动态分区写入不用检查 + if (!this.supportDynamicPartition) { + this.partition = OdpsUtil.formatPartition(this.originalConfig + .getString(Key.PARTITION, ""), true); + this.originalConfig.set(Key.PARTITION, this.partition); + } + + this.truncate = this.originalConfig.getBool(Key.TRUNCATE); + + this.consistencyCommit = this.originalConfig.getBool(Key.CONSISTENCY_COMMIT, false); + + boolean emptyAsNull = this.originalConfig.getBool(Key.EMPTY_AS_NULL, false); + this.originalConfig.set(Key.EMPTY_AS_NULL, emptyAsNull); + if (emptyAsNull) { + LOG.warn(MESSAGE_SOURCE.message("odpswriter.2")); + } + + this.blockSizeInMB = this.originalConfig.getInt(Key.BLOCK_SIZE_IN_MB, 64); + if (this.blockSizeInMB < 8) { + this.blockSizeInMB = 8; + } + this.originalConfig.set(Key.BLOCK_SIZE_IN_MB, this.blockSizeInMB); + LOG.info("blockSizeInMB={}.", this.blockSizeInMB); + maxPartitionCnt = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() / 1024 / 1024 / this.blockSizeInMB; + if (maxPartitionCnt < Constant.MAX_PARTITION_CNT) { + maxPartitionCnt = Constant.MAX_PARTITION_CNT; + } + LOG.info("maxPartitionCnt={}", maxPartitionCnt); + + if (IS_DEBUG) { + LOG.debug("After master init(), job config now is: [\n{}\n] .", + this.originalConfig.toJSON()); + } + } + + private void dealAK() { + this.accountType = this.originalConfig.getString(Key.ACCOUNT_TYPE, + Constant.DEFAULT_ACCOUNT_TYPE); + + if (!Constant.DEFAULT_ACCOUNT_TYPE.equalsIgnoreCase(this.accountType) && + !Constant.TAOBAO_ACCOUNT_TYPE.equalsIgnoreCase(this.accountType)) { + throw DataXException.asDataXException(OdpsWriterErrorCode.ACCOUNT_TYPE_ERROR, + MESSAGE_SOURCE.message("odpswriter.1", accountType)); + } + this.originalConfig.set(Key.ACCOUNT_TYPE, this.accountType); + //检查accessId,accessKey配置 if (Constant.DEFAULT_ACCOUNT_TYPE .equalsIgnoreCase(this.accountType)) { @@ -66,66 +176,66 @@ public class OdpsWriter extends Writer { } LOG.info("accessId:[{}] .", accessId); } - // init odps config - this.odps = OdpsUtil.initOdpsProject(this.originalConfig); - - //检查表等配置是否正确 - this.table = OdpsUtil.getTable(odps,this.projectName,this.tableName); - - //检查列信息是否正确 - List allColumns = OdpsUtil.getAllColumns(this.table.getSchema()); - LOG.info("allColumnList: {} .", StringUtils.join(allColumns, ',')); - dealColumn(this.originalConfig, allColumns); - - //检查分区信息是否正确 - OdpsUtil.preCheckPartition(this.odps, this.table, this.partition, this.truncate); } - @Override - public void init() { - this.originalConfig = super.getPluginJobConf(); - - OdpsUtil.checkNecessaryConfig(this.originalConfig); - OdpsUtil.dealMaxRetryTime(this.originalConfig); - - this.projectName = this.originalConfig.getString(Key.PROJECT); - this.tableName = this.originalConfig.getString(Key.TABLE); - this.tunnelServer = this.originalConfig.getString(Key.TUNNEL_SERVER, null); - - //check isCompress - this.originalConfig.getBool(Key.IS_COMPRESS, false); - - this.partition = OdpsUtil.formatPartition(this.originalConfig - .getString(Key.PARTITION, "")); - this.originalConfig.set(Key.PARTITION, this.partition); - - this.accountType = this.originalConfig.getString(Key.ACCOUNT_TYPE, - Constant.DEFAULT_ACCOUNT_TYPE); - if (!Constant.DEFAULT_ACCOUNT_TYPE.equalsIgnoreCase(this.accountType) && - !Constant.TAOBAO_ACCOUNT_TYPE.equalsIgnoreCase(this.accountType)) { - throw DataXException.asDataXException(OdpsWriterErrorCode.ACCOUNT_TYPE_ERROR, - String.format("账号类型错误,因为你的账号 [%s] 不是datax目前支持的账号类型,目前仅支持aliyun, taobao账号,请修改您的账号信息.", accountType)); - } - this.originalConfig.set(Key.ACCOUNT_TYPE, this.accountType); - - this.truncate = this.originalConfig.getBool(Key.TRUNCATE); - - boolean emptyAsNull = this.originalConfig.getBool(Key.EMPTY_AS_NULL, false); - this.originalConfig.set(Key.EMPTY_AS_NULL, emptyAsNull); - if (emptyAsNull) { - LOG.warn("这是一条需要注意的信息 由于您的作业配置了写入 ODPS 的目的表时emptyAsNull=true, 所以 DataX将会把长度为0的空字符串作为 java 的 null 写入 ODPS."); + private void dealDynamicPartition() { + /* + * 如果显示配置了 supportDynamicPartition,则以配置为准 + * 如果没有配置,表为分区表且 列映射中包所有含分区列 + */ + List partitionCols = OdpsUtil.getAllPartColumns(this.table.getSchema()); + List configCols = this.originalConfig.getList(Key.COLUMN, String.class); + LOG.info("partition columns:{}", partitionCols); + LOG.info("config columns:{}", configCols); + LOG.info("support dynamic partition:{}",this.originalConfig.getBool(Key.SUPPORT_DYNAMIC_PARTITION)); + LOG.info("partition format type:{}",this.originalConfig.getString("partitionFormatType")); + if (this.originalConfig.getKeys().contains(Key.SUPPORT_DYNAMIC_PARTITION)) { + this.supportDynamicPartition = this.originalConfig.getBool(Key.SUPPORT_DYNAMIC_PARTITION); + if (supportDynamicPartition) { + // 自定义分区 + if("custom".equalsIgnoreCase(originalConfig.getString("partitionFormatType"))){ + List partitions = getListWithJson(originalConfig,"customPartitionColumns",PartitionInfo.class); + // 自定义分区配置必须与实际分区列完全一致 + if (!ListUtil.checkIfAllSameValue(partitions.stream().map(item->item.getName()).collect(Collectors.toList()), partitionCols)) { + throw DataXException.asDataXException("custom partition config is not same as real partition info."); + } + } else { + // 设置动态分区写入为真--检查是否所有分区列都配置在了列映射中,不满足则抛出异常 + if (!ListUtil.checkIfBInA(configCols, partitionCols, false)) { + throw DataXException.asDataXException("You config supportDynamicPartition as true, but didn't config all partition columns"); + } + } + } else { + // 设置动态分区写入为假--确保列映射中没有配置分区列,配置则抛出异常 + if (ListUtil.checkIfHasSameValue(configCols, partitionCols)) { + throw DataXException.asDataXException("You should config all partition columns in column param, or you can specify a static partition param"); + } + } + } else { + if (OdpsUtil.isPartitionedTable(table)) { + // 分区表,列映射配置了分区,同时检查所有分区列要么都被配置,要么都没有配置 + if (ListUtil.checkIfBInA(configCols, partitionCols, false)) { + // 所有的partition 列都配置在了column中 + this.supportDynamicPartition = true; + } else { + // 并非所有partition列都配置在了column中,此时还需检查是否只配置了部分,如果只配置了部分,则报错 + if (ListUtil.checkIfHasSameValue(configCols, partitionCols)) { + throw DataXException.asDataXException("You should config all partition columns in column param, or you can specify a static partition param"); + } + // 分区列没有配置任何分区列,则设置为false + this.supportDynamicPartition = false; + } + } else { + LOG.info("{} is not a partition tale, set supportDynamicParition as false", this.tableName); + this.supportDynamicPartition = false; + } } - this.blockSizeInMB = this.originalConfig.getInt(Key.BLOCK_SIZE_IN_MB, 64); - if(this.blockSizeInMB < 8) { - this.blockSizeInMB = 8; - } - this.originalConfig.set(Key.BLOCK_SIZE_IN_MB, this.blockSizeInMB); - LOG.info("blockSizeInMB={}.", this.blockSizeInMB); - - if (IS_DEBUG) { - LOG.debug("After master init(), job config now is: [\n{}\n] .", - this.originalConfig.toJSON()); + // 分布式下不支持动态分区写入,如果是分布式模式则报错 + LOG.info("current run mode: {}", System.getProperty("datax.executeMode")); + if (supportDynamicPartition && StringUtils.equalsIgnoreCase("distribute", System.getProperty("datax.executeMode"))) { + LOG.error("Distribute mode don't support dynamic partition writing"); + System.exit(1); } } @@ -148,10 +258,29 @@ public class OdpsWriter extends Writer { // init odps config this.odps = OdpsUtil.initOdpsProject(this.originalConfig); - //检查表等配置是否正确 - this.table = OdpsUtil.getTable(odps,this.projectName,this.tableName); + List preSqls = this.originalConfig.getList(Key.PRE_SQL, String.class); + if (preSqls != null && !preSqls.isEmpty()) { + LOG.info(String.format("Beigin to exectue preSql : %s. \n Attention: these preSqls must be idempotent!!!", + JSON.toJSONString(preSqls))); + long beginTime = System.currentTimeMillis(); + for (String preSql : preSqls) { + preSql = preSql.trim(); + if (!preSql.endsWith(";")) { + preSql = String.format("%s;", preSql); + } + OdpsUtil.runSqlTaskWithRetry(this.odps, preSql, "preSql"); + } + long endTime = System.currentTimeMillis(); + LOG.info(String.format("Exectue odpswriter preSql successfully! cost time: %s ms.", (endTime - beginTime))); + } - OdpsUtil.dealTruncate(this.odps, this.table, this.partition, this.truncate); + //检查表等配置是否正确 + this.table = OdpsUtil.getTable(odps, this.projectName, this.tableName); + + // 如果是动态分区写入,因为无需配置分区信息,因此也无法在任务初始化时进行 truncate + if (!supportDynamicPartition) { + OdpsUtil.dealTruncate(this.odps, this.table, this.partition, this.truncate); + } } /** @@ -169,20 +298,34 @@ public class OdpsWriter extends Writer { tableTunnel.setEndpoint(tunnelServer); } - this.masterUpload = OdpsUtil.createMasterTunnelUpload( - tableTunnel, this.projectName, this.tableName, this.partition); - this.uploadId = this.masterUpload.getId(); - LOG.info("Master uploadId:[{}].", this.uploadId); - - TableSchema schema = this.masterUpload.getSchema(); + TableSchema schema = this.table.getSchema(); List allColumns = OdpsUtil.getAllColumns(schema); LOG.info("allColumnList: {} .", StringUtils.join(allColumns, ',')); + List allPartColumns = OdpsUtil.getAllPartColumns(this.table.getSchema()); + LOG.info("allPartColumnsList: {} .", StringUtils.join(allPartColumns, ',')); + dealColumn(this.originalConfig, allColumns, allPartColumns); + this.originalConfig.set("allColumns", allColumns); - dealColumn(this.originalConfig, allColumns); + // 动态分区模式下,无法事先根据分区创建好 session, + if (!supportDynamicPartition) { + this.masterUpload = OdpsUtil.createMasterTunnelUpload( + tableTunnel, this.projectName, this.tableName, this.partition); + this.uploadId = this.masterUpload.getId(); + LOG.info("Master uploadId:[{}].", this.uploadId); + } for (int i = 0; i < mandatoryNumber; i++) { Configuration tempConfig = this.originalConfig.clone(); + // 非动态分区模式下,设置了统一提交,则需要克隆主 upload session,否则各个 task "各自为战" + if (!supportDynamicPartition && this.consistencyCommit) { + tempConfig.set(Key.UPLOAD_ID, uploadId); + tempConfig.set(Key.TASK_COUNT, mandatoryNumber); + } + + // 设置task的supportDynamicPartition属性 + tempConfig.set(Key.SUPPORT_DYNAMIC_PARTITION, this.supportDynamicPartition); + configurations.add(tempConfig); } @@ -190,14 +333,18 @@ public class OdpsWriter extends Writer { LOG.debug("After master split, the job config now is:[\n{}\n].", this.originalConfig); } - this.masterUpload = null; - return configurations; } - private void dealColumn(Configuration originalConfig, List allColumns) { + private void dealColumn(Configuration originalConfig, List allColumns, List allPartColumns) { //之前已经检查了userConfiguredColumns 一定不为空 List userConfiguredColumns = originalConfig.getList(Key.COLUMN, String.class); + + // 动态分区下column不支持配置* + if (supportDynamicPartition && userConfiguredColumns.contains("*")) { + throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, + "In dynamic partition write mode you can't specify column with *."); + } if (1 == userConfiguredColumns.size() && "*".equals(userConfiguredColumns.get(0))) { userConfiguredColumns = allColumns; originalConfig.set(Key.COLUMN, allColumns); @@ -206,15 +353,51 @@ public class OdpsWriter extends Writer { ListUtil.makeSureNoValueDuplicate(userConfiguredColumns, false); //检查列是否存在,大小写不敏感 - ListUtil.makeSureBInA(allColumns, userConfiguredColumns, false); + if (supportDynamicPartition) { + List allColumnList = new ArrayList(); + allColumnList.addAll(allColumns); + allColumnList.addAll(allPartColumns); + ListUtil.makeSureBInA(allColumnList, userConfiguredColumns, false); + } else { + ListUtil.makeSureBInA(allColumns, userConfiguredColumns, false); + } } - List columnPositions = OdpsUtil.parsePosition(allColumns, userConfiguredColumns); + // 获取配置的所有数据列在目标表中所有数据列中的真正位置, -1 代表该列为分区列 + List columnPositions = OdpsUtil.parsePosition(allColumns, allPartColumns, userConfiguredColumns); originalConfig.set(Constant.COLUMN_POSITION, columnPositions); } @Override public void post() { + + if (supportDynamicPartition) { + LOG.info("Total create partition cnt:{}", partitionCnt); + } + + if (!supportDynamicPartition && this.consistencyCommit) { + LOG.info("Master which uploadId=[{}] begin to commit blocks.", this.uploadId); + OdpsUtil.masterComplete(this.masterUpload); + LOG.info("Master which uploadId=[{}] commit blocks ok.", this.uploadId); + } + + List postSqls = this.originalConfig.getList(Key.POST_SQL, String.class); + if (postSqls != null && !postSqls.isEmpty()) { + LOG.info(String.format("Beigin to exectue postSql : %s. \n Attention: these postSqls must be idempotent!!!", + JSON.toJSONString(postSqls))); + long beginTime = System.currentTimeMillis(); + for (String postSql : postSqls) { + postSql = postSql.trim(); + if (!postSql.endsWith(";")) { + postSql = String.format("%s;", postSql); + } + OdpsUtil.runSqlTaskWithRetry(this.odps, postSql, "postSql"); + } + long endTime = System.currentTimeMillis(); + LOG.info(String.format("Exectue odpswriter postSql successfully! cost time: %s ms.", (endTime - beginTime))); + } + + LOG.info("truncated record count: {}", globalTotalTruncatedRecordNumber.intValue() ); } @Override @@ -226,6 +409,7 @@ public class OdpsWriter extends Writer { public static class Task extends Writer.Task { private static final Logger LOG = LoggerFactory .getLogger(Task.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsWriter.class); private static final boolean IS_DEBUG = LOG.isDebugEnabled(); @@ -246,18 +430,54 @@ public class OdpsWriter extends Writer { private List blocks; private int blockSizeInMB; + private boolean consistencyCommit; + + private int taskId; + private int taskCount; + private Integer failoverState = 0; //0 未failover 1准备failover 2已提交,不能failover private byte[] lock = new byte[0]; + private List allColumns; + + /* + * Partition 和 session 的对应关系,处理 record 时,路由到哪个分区,则通过对应的 proxy 上传 + * Key 为 所有分区列的值按配置顺序拼接 + */ + private HashMap>> partitionUploadSessionHashMap; + private Boolean supportDynamicPartition; + private TableTunnel tableTunnel; + private Table table; + + /** + * 保存分区列格式转换规则,只支持源表是 Date 列,或者内容为日期的 String 列 + */ + private HashMap dateTransFormMap; + + private Long writeTimeOutInMs; + + private String overLengthRule; + private int maxFieldLength; + private Boolean enableOverLengthOutput; + + /** + * 动态分区写入模式下,内存使用率达到80%则flush时间间隔,单位分钟 + * 默认5分钟做flush, 避免出现频繁的flush导致小文件问题 + */ + private int dynamicPartitionMemUsageFlushIntervalInMinute = 1; + + private long latestFlushTime = 0; @Override public void init() { this.sliceConfig = super.getPluginJobConf(); + // 默认十分钟超时时间 + this.writeTimeOutInMs = this.sliceConfig.getLong(Key.WRITE_TIMEOUT_IN_MS, 10 * 60 * 1000); this.projectName = this.sliceConfig.getString(Key.PROJECT); this.tableName = this.sliceConfig.getString(Key.TABLE); this.tunnelServer = this.sliceConfig.getString(Key.TUNNEL_SERVER, null); this.partition = OdpsUtil.formatPartition(this.sliceConfig - .getString(Key.PARTITION, "")); + .getString(Key.PARTITION, ""), true); this.sliceConfig.set(Key.PARTITION, this.partition); this.emptyAsNull = this.sliceConfig.getBool(Key.EMPTY_AS_NULL); @@ -265,9 +485,49 @@ public class OdpsWriter extends Writer { this.isCompress = this.sliceConfig.getBool(Key.IS_COMPRESS, false); if (this.blockSizeInMB < 1 || this.blockSizeInMB > 512) { throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, - String.format("您配置的blockSizeInMB:%s 参数错误. 正确的配置是[1-512]之间的整数. 请修改此参数的值为该区间内的数值", this.blockSizeInMB)); + MESSAGE_SOURCE.message("odpswriter.3", this.blockSizeInMB)); } + this.taskId = this.getTaskId(); + this.taskCount = this.sliceConfig.getInt(Key.TASK_COUNT, 0); + + this.supportDynamicPartition = this.sliceConfig.getBool(Key.SUPPORT_DYNAMIC_PARTITION, false); + + if (!supportDynamicPartition) { + this.consistencyCommit = this.sliceConfig.getBool(Key.CONSISTENCY_COMMIT, false); + if (consistencyCommit) { + this.uploadId = this.sliceConfig.getString(Key.UPLOAD_ID); + if (this.uploadId == null || this.uploadId.isEmpty()) { + throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, + MESSAGE_SOURCE.message("odpswriter.3", this.uploadId)); + } + } + } else { + this.partitionUploadSessionHashMap = new HashMap<>(); + + // 根据 partColFormats 参数初始化 dateTransFormMap + String dateTransListStr = this.sliceConfig.getString(Key.PARTITION_COL_MAPPING); + if (StringUtils.isNotBlank(dateTransListStr)) { + this.dateTransFormMap = new HashMap<>(); + JSONArray dateTransFormJsonArray = JSONArray.parseArray(dateTransListStr); + for (Object dateTransFormJson : dateTransFormJsonArray) { + DateTransForm dateTransForm = new DateTransForm( + ((JSONObject)dateTransFormJson).getString(Key.PARTITION_COL_MAPPING_NAME), + ((JSONObject)dateTransFormJson).getString(Key.PARTITION_COL_MAPPING_SRC_COL_DATEFORMAT), + ((JSONObject)dateTransFormJson).getString(Key.PARTITION_COL_MAPPING_DATEFORMAT)); + this.dateTransFormMap.put(((JSONObject)dateTransFormJson).getString(Key.PARTITION_COL_MAPPING_NAME), dateTransForm); + } + } + } + this.allColumns = this.sliceConfig.getList("allColumns", String.class); + this.overLengthRule = this.sliceConfig.getString(Key.OVER_LENGTH_RULE, "keepOn").toUpperCase(); + this.maxFieldLength = this.sliceConfig.getInt(Key.MAX_FIELD_LENGTH, Constant.DEFAULT_FIELD_MAX_SIZE); + this.enableOverLengthOutput = this.sliceConfig.getBool(Key.ENABLE_OVER_LENGTH_OUTPUT, true); + maxOutputOverLengthRecord = this.sliceConfig.getLong(Key.MAX_OVER_LENGTH_OUTPUT_COUNT); + maxOdpsFieldLength = this.sliceConfig.getInt(Key.MAX_ODPS_FIELD_LENGTH, Constant.DEFAULT_FIELD_MAX_SIZE); + + this.dynamicPartitionMemUsageFlushIntervalInMinute = this.sliceConfig.getInt(Key.DYNAMIC_PARTITION_MEM_USAGE_FLUSH_INTERVAL_IN_MINUTE, + 1); if (IS_DEBUG) { LOG.debug("After init in task, sliceConfig now is:[\n{}\n].", this.sliceConfig); } @@ -277,24 +537,32 @@ public class OdpsWriter extends Writer { @Override public void prepare() { this.odps = OdpsUtil.initOdpsProject(this.sliceConfig); + this.tableTunnel = new TableTunnel(this.odps); - TableTunnel tableTunnel = new TableTunnel(this.odps); - if (StringUtils.isNoneBlank(tunnelServer)) { - tableTunnel.setEndpoint(tunnelServer); + if (! supportDynamicPartition ) { + if (StringUtils.isNoneBlank(tunnelServer)) { + tableTunnel.setEndpoint(tunnelServer); + } + if (this.consistencyCommit) { + this.managerUpload = OdpsUtil.getSlaveTunnelUpload(this.tableTunnel, this.projectName, this.tableName, + this.partition, this.uploadId); + } else { + this.managerUpload = OdpsUtil.createMasterTunnelUpload(this.tableTunnel, this.projectName, + this.tableName, this.partition); + this.uploadId = this.managerUpload.getId(); + } + LOG.info("task uploadId:[{}].", this.uploadId); + this.workerUpload = OdpsUtil.getSlaveTunnelUpload(this.tableTunnel, this.projectName, + this.tableName, this.partition, uploadId); + } else { + this.table = OdpsUtil.getTable(this.odps, this.projectName, this.tableName); } - - this.managerUpload = OdpsUtil.createMasterTunnelUpload(tableTunnel, this.projectName, - this.tableName, this.partition); - this.uploadId = this.managerUpload.getId(); - LOG.info("task uploadId:[{}].", this.uploadId); - - this.workerUpload = OdpsUtil.getSlaveTunnelUpload(tableTunnel, this.projectName, - this.tableName, this.partition, uploadId); } @Override public void startWrite(RecordReceiver recordReceiver) { blocks = new ArrayList(); + List currentWriteBlocks; AtomicLong blockId = new AtomicLong(0); @@ -304,35 +572,212 @@ public class OdpsWriter extends Writer { try { TaskPluginCollector taskPluginCollector = super.getTaskPluginCollector(); - OdpsWriterProxy proxy = new OdpsWriterProxy(this.workerUpload, this.blockSizeInMB, blockId, - columnPositions, taskPluginCollector, this.emptyAsNull, this.isCompress); + OdpsWriterProxy proxy; + // 可以配置化,保平安 + boolean checkWithGetSize = this.sliceConfig.getBool("checkWithGetSize", true); + if (!supportDynamicPartition) { + if (this.consistencyCommit) { + proxy = new OdpsWriterProxy(this.workerUpload, this.blockSizeInMB, blockId, taskId, taskCount, + columnPositions, taskPluginCollector, this.emptyAsNull, this.isCompress, checkWithGetSize, this.allColumns, this.writeTimeOutInMs, this.sliceConfig, this.overLengthRule, this.maxFieldLength, this.enableOverLengthOutput); + } else { + proxy = new OdpsWriterProxy(this.workerUpload, this.blockSizeInMB, blockId, + columnPositions, taskPluginCollector, this.emptyAsNull, this.isCompress, checkWithGetSize, this.allColumns, false, this.writeTimeOutInMs, this.sliceConfig, this.overLengthRule, this.maxFieldLength, this.enableOverLengthOutput); + } + currentWriteBlocks = blocks; + } else { + proxy = null; + currentWriteBlocks = null; + } com.alibaba.datax.common.element.Record dataXRecord = null; - PerfRecord blockClose = new PerfRecord(super.getTaskGroupId(),super.getTaskId(), PerfRecord.PHASE.ODPS_BLOCK_CLOSE); + PerfRecord blockClose = new PerfRecord(super.getTaskGroupId(), super.getTaskId(), PerfRecord.PHASE.ODPS_BLOCK_CLOSE); blockClose.start(); long blockCloseUsedTime = 0; + boolean columnCntChecked = false; while ((dataXRecord = recordReceiver.getFromReader()) != null) { - blockCloseUsedTime += proxy.writeOneRecord(dataXRecord, blocks); + if (supportDynamicPartition) { + if (!columnCntChecked) { + // 动态分区模式下,读写两端的column数量必须相同 + if (dataXRecord.getColumnNumber() != this.sliceConfig.getList(Key.COLUMN).size()) { + throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, + "In dynamic partition write mode you must make sure reader and writer has same column count."); + } + columnCntChecked = true; + } + + // 如果是动态分区模式,则需要根据record内容来选择proxy + + String partitionFormatType = sliceConfig.getString("partitionFormatType"); + String partition; + if("custom".equalsIgnoreCase(partitionFormatType)){ + List partitions = getListWithJson(sliceConfig,"customPartitionColumns",PartitionInfo.class); + List functions = getListWithJson(sliceConfig,"customPartitionFunctions",UserDefinedFunction.class); + + partition = CustomPartitionUtils.generate(dataXRecord,functions, + partitions,sliceConfig.getList(Key.COLUMN, String.class)); + }else{ + partition = OdpsUtil.getPartColValFromDataXRecord(dataXRecord, columnPositions, + this.sliceConfig.getList(Key.COLUMN, String.class), + this.dateTransFormMap); + partition = OdpsUtil.formatPartition(partition, false); + } + + Pair> proxyBlocksPair = this.partitionUploadSessionHashMap.get(partition); + if (null != proxyBlocksPair) { + proxy = proxyBlocksPair.getLeft(); + currentWriteBlocks = proxyBlocksPair.getRight(); + if (null == proxy || null == currentWriteBlocks) { + throw DataXException.asDataXException("Get OdpsWriterProxy failed."); + } + } else { + /* + * 第一次写入该目标分区:处理truncate + * truncate 为 true,且还没有被truncate过,则truncate,加互斥锁 + */ + Boolean truncate = this.sliceConfig.getBool(Key.TRUNCATE); + if (truncate && !partitionsDealedTruncate.contains(partition)) { + synchronized (lockForPartitionDealedTruncate) { + if (!partitionsDealedTruncate.contains(partition)) { + LOG.info("Start to truncate partition {}", partition); + OdpsUtil.dealTruncate(this.odps, this.table, partition, truncate); + partitionsDealedTruncate.add(partition); + } + /* + * 判断分区是否创建过多,如果创建过多,则报错 + */ + if (partitionCnt.addAndGet(1) > maxPartitionCnt) { + throw new DataXException("Create too many partitions. Please make sure you config the right partition column"); + } + } + } + TableTunnel.UploadSession uploadSession = OdpsUtil.createMasterTunnelUpload(tableTunnel, this.projectName, + this.tableName, partition); + proxy = new OdpsWriterProxy(uploadSession, this.blockSizeInMB, blockId, + columnPositions, taskPluginCollector, this.emptyAsNull, this.isCompress, checkWithGetSize, this.allColumns, true, this.writeTimeOutInMs, this.sliceConfig, this.overLengthRule, this.maxFieldLength, this.enableOverLengthOutput); + currentWriteBlocks = new ArrayList<>(); + partitionUploadSessionHashMap.put(partition, new MutablePair<>(proxy, currentWriteBlocks)); + } + } + blockCloseUsedTime += proxy.writeOneRecord(dataXRecord, currentWriteBlocks); + + // 动态分区写入模式下,如果内存使用达到一定程度 80%,清理较久没有活动且缓存较多数据的分区 + if (supportDynamicPartition) { + boolean isNeedFush = checkIfNeedFlush(); + if (isNeedFush) { + LOG.info("====The memory used exceed 80%, start to clear...==="); + int releaseCnt = 0; + int remainCnt = 0; + for (String onePartition : partitionUploadSessionHashMap.keySet()) { + OdpsWriterProxy oneIdleProxy = partitionUploadSessionHashMap.get(onePartition) == null ? null : partitionUploadSessionHashMap.get(onePartition).getLeft(); + if (oneIdleProxy == null) { + continue; + } + + Long idleTime = System.currentTimeMillis() - oneIdleProxy.getLastActiveTime(); + if (idleTime > Constant.PROXY_MAX_IDLE_TIME_MS || oneIdleProxy.getCurrentTotalBytes() > (this.blockSizeInMB*1014*1024 / 2)) { + // 如果空闲一定时间,先把数据写出 + LOG.info("{} partition has no data last {} seconds, so release its uploadSession", onePartition, Constant.PROXY_MAX_IDLE_TIME_MS / 1000); + currentWriteBlocks = partitionUploadSessionHashMap.get(onePartition).getRight(); + blockCloseUsedTime += oneIdleProxy.writeRemainingRecord(currentWriteBlocks); + // 再清除 + partitionUploadSessionHashMap.put(onePartition, null); + releaseCnt++; + } else { + remainCnt++; + } + } + + // 释放的不足够多,再释放一次,这次随机释放,直到释放数量达到一半 + for (String onePartition : partitionUploadSessionHashMap.keySet()) { + if (releaseCnt >= remainCnt) { + break; + } + + if (partitionUploadSessionHashMap.get(onePartition) != null) { + OdpsWriterProxy oneIdleProxy = partitionUploadSessionHashMap.get(onePartition).getLeft(); + currentWriteBlocks = partitionUploadSessionHashMap.get(onePartition).getRight(); + blockCloseUsedTime += oneIdleProxy.writeRemainingRecord(currentWriteBlocks); + partitionUploadSessionHashMap.put(onePartition, null); + + releaseCnt++; + remainCnt--; + } + + } + + this.latestFlushTime = System.currentTimeMillis(); + LOG.info("===complete==="); + } + + } } - blockCloseUsedTime += proxy.writeRemainingRecord(blocks); - blockClose.end(blockCloseUsedTime); + // 对所有分区进行剩余 records 写入 + if (supportDynamicPartition) { + for (String partition : partitionUploadSessionHashMap.keySet()) { + if (partitionUploadSessionHashMap.get(partition) == null) { + continue; + } + proxy = partitionUploadSessionHashMap.get(partition).getLeft(); + currentWriteBlocks = partitionUploadSessionHashMap.get(partition).getRight(); + blockCloseUsedTime += proxy.writeRemainingRecord(currentWriteBlocks); + blockClose.end(blockCloseUsedTime); + } + } + else { + blockCloseUsedTime += proxy.writeRemainingRecord(blocks); + blockClose.end(blockCloseUsedTime); + } } catch (Exception e) { - throw DataXException.asDataXException(OdpsWriterErrorCode.WRITER_RECORD_FAIL, "写入 ODPS 目的表失败. 请联系 ODPS 管理员处理.", e); + throw DataXException.asDataXException(OdpsWriterErrorCode.WRITER_RECORD_FAIL, MESSAGE_SOURCE.message("odpswriter.4"), e); } } + private boolean checkIfNeedFlush() { + + //检查是否到达flush时间,超过flush间隔时间 + boolean isArriveFlushTime = (System.currentTimeMillis() - this.latestFlushTime) > this.dynamicPartitionMemUsageFlushIntervalInMinute * 60 * 1000; + if (!isArriveFlushTime) { + //如果flush时间没有到,直接return掉 + return false; + } + + MemoryUsage memoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); + boolean isMemUsageExceed = (double)memoryUsage.getUsed() / memoryUsage.getMax() > 0.8f; + return isMemUsageExceed; + } + @Override public void post() { - synchronized (lock){ - if(failoverState==0){ + synchronized (lock) { + if (failoverState == 0) { failoverState = 2; - LOG.info("Slave which uploadId=[{}] begin to commit blocks:[\n{}\n].", this.uploadId, - StringUtils.join(blocks, ",")); - OdpsUtil.masterCompleteBlocks(this.managerUpload, blocks.toArray(new Long[0])); - LOG.info("Slave which uploadId=[{}] commit blocks ok.", this.uploadId); - }else{ + if (! supportDynamicPartition) { + if (! this.consistencyCommit) { + LOG.info("Slave which uploadId=[{}] begin to commit blocks:[\n{}\n].", this.uploadId, + StringUtils.join(blocks, ",")); + OdpsUtil.masterCompleteBlocks(this.managerUpload, blocks.toArray(new Long[0])); + LOG.info("Slave which uploadId=[{}] commit blocks ok.", this.uploadId); + } else { + LOG.info("Slave which uploadId=[{}] begin to check blocks:[\n{}\n].", this.uploadId, + StringUtils.join(blocks, ",")); + OdpsUtil.checkBlockComplete(this.managerUpload, blocks.toArray(new Long[0])); + LOG.info("Slave which uploadId=[{}] check blocks ok.", this.uploadId); + } + } else { + for (String partition : partitionUploadSessionHashMap.keySet()) { + OdpsWriterProxy proxy = partitionUploadSessionHashMap.get(partition).getLeft(); + List blocks = partitionUploadSessionHashMap.get(partition).getRight(); + TableTunnel.UploadSession uploadSession = proxy.getSlaveUpload(); + LOG.info("Slave which uploadId=[{}] begin to check blocks:[\n{}\n].", uploadSession.getId(), + StringUtils.join(blocks, ",")); + OdpsUtil.masterCompleteBlocks(uploadSession, blocks.toArray(new Long[0])); + LOG.info("Slave which uploadId=[{}] check blocks ok.", uploadSession.getId()); + } + } + + } else { throw DataXException.asDataXException(CommonErrorCode.SHUT_DOWN_TASK, ""); } } @@ -343,9 +788,9 @@ public class OdpsWriter extends Writer { } @Override - public boolean supportFailOver(){ - synchronized (lock){ - if(failoverState==0){ + public boolean supportFailOver() { + synchronized (lock) { + if (failoverState == 0) { failoverState = 1; return true; } diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterErrorCode.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterErrorCode.java index 02020c04..35f2ed15 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterErrorCode.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterErrorCode.java @@ -1,42 +1,43 @@ package com.alibaba.datax.plugin.writer.odpswriter; import com.alibaba.datax.common.spi.ErrorCode; +import com.alibaba.datax.common.util.MessageSource; public enum OdpsWriterErrorCode implements ErrorCode { - REQUIRED_VALUE("OdpsWriter-00", "您缺失了必须填写的参数值."), - ILLEGAL_VALUE("OdpsWriter-01", "您配置的值不合法."), - UNSUPPORTED_COLUMN_TYPE("OdpsWriter-02", "DataX 不支持写入 ODPS 的目的表的此种数据类型."), + REQUIRED_VALUE("OdpsWriter-00", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.required_value")), + ILLEGAL_VALUE("OdpsWriter-01", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.illegal_value")), + UNSUPPORTED_COLUMN_TYPE("OdpsWriter-02", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.unsupported_column_type")), - TABLE_TRUNCATE_ERROR("OdpsWriter-03", "清空 ODPS 目的表时出错."), - CREATE_MASTER_UPLOAD_FAIL("OdpsWriter-04", "创建 ODPS 的 uploadSession 失败."), - GET_SLAVE_UPLOAD_FAIL("OdpsWriter-05", "获取 ODPS 的 uploadSession 失败."), - GET_ID_KEY_FAIL("OdpsWriter-06", "获取 accessId/accessKey 失败."), - GET_PARTITION_FAIL("OdpsWriter-07", "获取 ODPS 目的表的所有分区失败."), + TABLE_TRUNCATE_ERROR("OdpsWriter-03", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.table_truncate_error")), + CREATE_MASTER_UPLOAD_FAIL("OdpsWriter-04", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.create_master_upload_fail")), + GET_SLAVE_UPLOAD_FAIL("OdpsWriter-05", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.get_slave_upload_fail")), + GET_ID_KEY_FAIL("OdpsWriter-06", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.get_id_key_fail")), + GET_PARTITION_FAIL("OdpsWriter-07", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.get_partition_fail")), - ADD_PARTITION_FAILED("OdpsWriter-08", "添加分区到 ODPS 目的表失败."), - WRITER_RECORD_FAIL("OdpsWriter-09", "写入数据到 ODPS 目的表失败."), + ADD_PARTITION_FAILED("OdpsWriter-08", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.add_partition_failed")), + WRITER_RECORD_FAIL("OdpsWriter-09", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.writer_record_fail")), - COMMIT_BLOCK_FAIL("OdpsWriter-10", "提交 block 到 ODPS 目的表失败."), - RUN_SQL_FAILED("OdpsWriter-11", "执行 ODPS Sql 失败."), - CHECK_IF_PARTITIONED_TABLE_FAILED("OdpsWriter-12", "检查 ODPS 目的表:%s 是否为分区表失败."), + COMMIT_BLOCK_FAIL("OdpsWriter-10", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.commit_block_fail")), + RUN_SQL_FAILED("OdpsWriter-11", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.run_sql_failed")), + CHECK_IF_PARTITIONED_TABLE_FAILED("OdpsWriter-12", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.check_if_partitioned_table_failed")), - RUN_SQL_ODPS_EXCEPTION("OdpsWriter-13", "执行 ODPS Sql 时抛出异常, 可重试"), + RUN_SQL_ODPS_EXCEPTION("OdpsWriter-13", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.run_sql_odps_exception")), - ACCOUNT_TYPE_ERROR("OdpsWriter-30", "账号类型错误."), + ACCOUNT_TYPE_ERROR("OdpsWriter-30", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.account_type_error")), - PARTITION_ERROR("OdpsWriter-31", "分区配置错误."), + PARTITION_ERROR("OdpsWriter-31", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.partition_error")), - COLUMN_NOT_EXIST("OdpsWriter-32", "用户配置的列不存在."), + COLUMN_NOT_EXIST("OdpsWriter-32", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.column_not_exist")), - ODPS_PROJECT_NOT_FOUNT("OdpsWriter-100", "您配置的值不合法, odps project 不存在."), //ODPS-0420111: Project not found + ODPS_PROJECT_NOT_FOUNT("OdpsWriter-100", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.odps_project_not_fount")), //ODPS-0420111: Project not found - ODPS_TABLE_NOT_FOUNT("OdpsWriter-101", "您配置的值不合法, odps table 不存在"), // ODPS-0130131:Table not found + ODPS_TABLE_NOT_FOUNT("OdpsWriter-101", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.odps_table_not_fount")), // ODPS-0130131:Table not found - ODPS_ACCESS_KEY_ID_NOT_FOUND("OdpsWriter-102", "您配置的值不合法, odps accessId,accessKey 不存在"), //ODPS-0410051:Invalid credentials - accessKeyId not found + ODPS_ACCESS_KEY_ID_NOT_FOUND("OdpsWriter-102", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.odps_access_key_id_not_found")), //ODPS-0410051:Invalid credentials - accessKeyId not found - ODPS_ACCESS_KEY_INVALID("OdpsWriter-103", "您配置的值不合法, odps accessKey 错误"), //ODPS-0410042:Invalid signature value - User signature dose not match; + ODPS_ACCESS_KEY_INVALID("OdpsWriter-103", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.odps_access_key_invalid")), //ODPS-0410042:Invalid signature value - User signature dose not match; - ODPS_ACCESS_DENY("OdpsWriter-104", "拒绝访问, 您不在 您配置的 project 中") //ODPS-0420095: Access Denied - Authorization Failed [4002], You doesn't exist in project + ODPS_ACCESS_DENY("OdpsWriter-104", MessageSource.loadResourceBundle(OdpsWriterErrorCode.class).message("errorcode.odps_access_deny")) //ODPS-0420095: Access Denied - Authorization Failed [4002], You doesn't exist in project ; diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterProxy.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterProxy.java index 9833616c..221aca79 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterProxy.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/OdpsWriterProxy.java @@ -3,29 +3,58 @@ package com.alibaba.datax.plugin.writer.odpswriter; import com.alibaba.datax.common.element.StringColumn; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.plugin.writer.odpswriter.util.OdpsUtil; - import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.aliyun.odps.OdpsType; import com.aliyun.odps.TableSchema; - +import com.aliyun.odps.data.ArrayRecord; +import com.aliyun.odps.data.Binary; +import com.aliyun.odps.data.Char; +import com.aliyun.odps.data.IntervalDayTime; +import com.aliyun.odps.data.IntervalYearMonth; import com.aliyun.odps.data.Record; - +import com.aliyun.odps.data.SimpleStruct; +import com.aliyun.odps.data.Struct; +import com.aliyun.odps.data.Varchar; import com.aliyun.odps.tunnel.TableTunnel; - import com.aliyun.odps.tunnel.TunnelException; import com.aliyun.odps.tunnel.io.ProtobufRecordPack; +import com.aliyun.odps.type.ArrayTypeInfo; +import com.aliyun.odps.type.CharTypeInfo; +import com.aliyun.odps.type.MapTypeInfo; +import com.aliyun.odps.type.StructTypeInfo; +import com.aliyun.odps.type.TypeInfo; +import com.aliyun.odps.type.VarcharTypeInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; import java.util.concurrent.atomic.AtomicLong; public class OdpsWriterProxy { - private static final Logger LOG = LoggerFactory - .getLogger(OdpsWriterProxy.class); + private static final Logger LOG = LoggerFactory.getLogger(OdpsWriterProxy.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsWriterProxy.class); private volatile boolean printColumnLess;// 是否打印对于源头字段数小于 ODPS 目的表的行的日志 @@ -39,18 +68,98 @@ public class OdpsWriterProxy { private AtomicLong blockId; private List columnPositions; - private List tableOriginalColumnTypeList; + private List tableOriginalColumnTypeList; private boolean emptyAsNull; private boolean isCompress; + + private int taskId; + private int taskCOUNT; + private boolean consistencyCommit = false; + private boolean checkWithGetSize = true; + private List allColumns; + private String overLengthRule; + private int maxFieldLength; + private Boolean enableOverLengthOutput; - public OdpsWriterProxy(TableTunnel.UploadSession slaveUpload, int blockSizeInMB, - AtomicLong blockId, List columnPositions, - TaskPluginCollector taskPluginCollector, boolean emptyAsNull, boolean isCompress) - throws IOException, TunnelException { + /** + * 记录最近一次活动时间,动态分区写入模式下,超过一定时间不活动,则关闭这个proxy + */ + private Long lastActiveTime; + + /** + * 写block超时时间 + */ + private Long writeTimeoutInMs; + + private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + // 读取 jvm 默认时区 + private Calendar calendarForDate = null; + private boolean useDateWithCalendar = true; + + private Calendar initCalendar(Configuration config) { + // 理论上不会有其他选择,有配置化可以随时应急 + String calendarType = config.getString("calendarType", "iso8601"); + Boolean lenient = config.getBool("calendarLenient", true); + + // 默认jvm时区 + TimeZone timeZone = TimeZone.getDefault(); + String timeZoneStr = config.getString("calendarTimeZone"); + if (StringUtils.isNotBlank(timeZoneStr)) { + // 如果用户明确指定使用用户指定的 + timeZone = TimeZone.getTimeZone(timeZoneStr); + } + + Calendar calendarForDate = new Calendar.Builder().setCalendarType(calendarType).setLenient(lenient) + .setTimeZone(timeZone).build(); + return calendarForDate; + } + + public OdpsWriterProxy(TableTunnel.UploadSession slaveUpload, int blockSizeInMB, AtomicLong blockId, + List columnPositions, TaskPluginCollector taskPluginCollector, boolean emptyAsNull, + boolean isCompress, boolean checkWithGetSize, List allColumns, boolean initBufSizeZero, + Long writeTimeoutInMs, Configuration taskConfig, String overLengthRule, int maxFieldLength, + Boolean enableOverLengthOutput) throws IOException, TunnelException { this.slaveUpload = slaveUpload; this.schema = this.slaveUpload.getSchema(); - this.tableOriginalColumnTypeList = OdpsUtil - .getTableOriginalColumnTypeList(this.schema); + this.tableOriginalColumnTypeList = OdpsUtil.getTableOriginalColumnTypeList(this.schema); + + this.blockId = blockId; + this.columnPositions = columnPositions; + this.taskPluginCollector = taskPluginCollector; + this.emptyAsNull = emptyAsNull; + this.isCompress = isCompress; + + // 初始化与 buffer 区相关的值 + this.maxBufferSize = (blockSizeInMB - 4) * 1024 * 1024; + if (initBufSizeZero) { + // 动态分区下初始化为0,随着写入的reord变多慢慢增加 + this.protobufCapacity = 0; + } else { + this.protobufCapacity = blockSizeInMB * 1024 * 1024; + } + this.protobufRecordPack = new ProtobufRecordPack(this.schema, null, this.protobufCapacity); + this.printColumnLess = true; + this.checkWithGetSize = checkWithGetSize; + + this.allColumns = allColumns; + this.overLengthRule = overLengthRule; + this.maxFieldLength = maxFieldLength; + this.enableOverLengthOutput = enableOverLengthOutput; + + this.writeTimeoutInMs = writeTimeoutInMs; + + this.calendarForDate = this.initCalendar(taskConfig); + this.useDateWithCalendar = taskConfig.getBool("useDateWithCalendar", true); + } + + public OdpsWriterProxy(TableTunnel.UploadSession slaveUpload, int blockSizeInMB, AtomicLong blockId, int taskId, + int taskCount, List columnPositions, TaskPluginCollector taskPluginCollector, boolean emptyAsNull, + boolean isCompress, boolean checkWithGetSize, List allColumns, Long writeTimeoutInMs, Configuration taskConfig, + String overLengthRule, int maxFieldLength, Boolean enableOverLengthOutput) throws IOException, TunnelException { + this.slaveUpload = slaveUpload; + this.schema = this.slaveUpload.getSchema(); + this.tableOriginalColumnTypeList = OdpsUtil.getTableOriginalColumnTypeList(this.schema); this.blockId = blockId; this.columnPositions = columnPositions; @@ -63,12 +172,38 @@ public class OdpsWriterProxy { this.protobufCapacity = blockSizeInMB * 1024 * 1024; this.protobufRecordPack = new ProtobufRecordPack(this.schema, null, this.protobufCapacity); printColumnLess = true; + + this.taskId = taskId; + this.taskCOUNT = taskCount; + this.consistencyCommit = true; + this.checkWithGetSize = checkWithGetSize; + this.allColumns = allColumns; + this.overLengthRule = overLengthRule; + this.maxFieldLength = maxFieldLength; + this.enableOverLengthOutput = enableOverLengthOutput; + this.writeTimeoutInMs = writeTimeoutInMs; + + this.calendarForDate = this.initCalendar(taskConfig); + this.useDateWithCalendar = taskConfig.getBool("useDateWithCalendar", true); } - public long writeOneRecord( - com.alibaba.datax.common.element.Record dataXRecord, - List blocks) throws Exception { + public long getCurrentBlockId() { + if (this.consistencyCommit) { + return this.taskId + this.taskCOUNT * (this.blockId.get()); + } else { + return this.blockId.get(); + } + } + + public TableTunnel.UploadSession getSlaveUpload() { + return this.slaveUpload; + } + + public long writeOneRecord(com.alibaba.datax.common.element.Record dataXRecord, List blocks) + throws Exception { + + this.lastActiveTime = System.currentTimeMillis(); Record record = dataxRecordToOdpsRecord(dataXRecord); @@ -77,12 +212,11 @@ public class OdpsWriterProxy { } protobufRecordPack.append(record); - if (protobufRecordPack.getTotalBytes() >= maxBufferSize) { + if (protobufRecordPack.getProtobufStream().size() >= maxBufferSize) { long startTimeInNs = System.nanoTime(); - OdpsUtil.slaveWriteOneBlock(this.slaveUpload, - protobufRecordPack, blockId.get(), this.isCompress); - LOG.info("write block {} ok.", blockId.get()); - blocks.add(blockId.get()); + OdpsUtil.slaveWriteOneBlock(this.slaveUpload, protobufRecordPack, getCurrentBlockId(), this.writeTimeoutInMs); + LOG.info("write block {} ok.", getCurrentBlockId()); + blocks.add(getCurrentBlockId()); protobufRecordPack.reset(); this.blockId.incrementAndGet(); return System.nanoTime() - startTimeInNs; @@ -92,13 +226,20 @@ public class OdpsWriterProxy { public long writeRemainingRecord(List blocks) throws Exception { // complete protobuf stream, then write to http - if (protobufRecordPack.getTotalBytes() != 0) { + // protobufRecordPack.getTotalBytes() 慕明: getTotalBytes并不一定保证能拿到写入的字节数,按你们的逻辑应该是用getTotalBytesWritten + // if (protobufRecordPack.getTotalBytes() != 0) { + boolean hasRemindData = false; + if (this.checkWithGetSize) { + hasRemindData = protobufRecordPack.getSize() != 0; + } else { + hasRemindData = protobufRecordPack.getTotalBytes() != 0; + } + if (hasRemindData) { long startTimeInNs = System.nanoTime(); - OdpsUtil.slaveWriteOneBlock(this.slaveUpload, - protobufRecordPack, blockId.get(), this.isCompress); - LOG.info("write block {} ok.", blockId.get()); + OdpsUtil.slaveWriteOneBlock(this.slaveUpload, protobufRecordPack, getCurrentBlockId(), this.writeTimeoutInMs); + LOG.info("write block {} ok.", getCurrentBlockId()); - blocks.add(blockId.get()); + blocks.add(getCurrentBlockId()); // reset the buffer for next block protobufRecordPack.reset(); return System.nanoTime() - startTimeInNs; @@ -106,85 +247,846 @@ public class OdpsWriterProxy { return 0; } - public Record dataxRecordToOdpsRecord( - com.alibaba.datax.common.element.Record dataXRecord) throws Exception { + public Record dataxRecordToOdpsRecord(com.alibaba.datax.common.element.Record dataXRecord) throws Exception { int sourceColumnCount = dataXRecord.getColumnNumber(); - Record odpsRecord = slaveUpload.newRecord(); + ArrayRecord odpsRecord = (ArrayRecord) slaveUpload.newRecord(); int userConfiguredColumnNumber = this.columnPositions.size(); -//todo + if (sourceColumnCount > userConfiguredColumnNumber) { - throw DataXException - .asDataXException( - OdpsWriterErrorCode.ILLEGAL_VALUE, - String.format( - "亲,配置中的源表的列个数和目的端表不一致,源表中您配置的列数是:%s 大于目的端的列数是:%s , 这样会导致源头数据无法正确导入目的端, 请检查您的配置并修改.", - sourceColumnCount, - userConfiguredColumnNumber)); + throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, + MESSAGE_SOURCE.message("odpswriterproxy.1", sourceColumnCount, userConfiguredColumnNumber)); } else if (sourceColumnCount < userConfiguredColumnNumber) { if (printColumnLess) { - LOG.warn( - "源表的列个数小于目的表的列个数,源表列数是:{} 目的表列数是:{} , 数目不匹配. DataX 会把目的端多出的列的值设置为空值. 如果这个默认配置不符合您的期望,请保持源表和目的表配置的列数目保持一致.", - sourceColumnCount, userConfiguredColumnNumber); + LOG.warn(MESSAGE_SOURCE.message("odpswriterproxy.2", sourceColumnCount, userConfiguredColumnNumber)); } printColumnLess = false; } - int currentIndex; + int currentIndex = 0; int sourceIndex = 0; try { com.alibaba.datax.common.element.Column columnValue; for (; sourceIndex < sourceColumnCount; sourceIndex++) { + // 跳过分区列 + if (this.columnPositions.get(sourceIndex) == -1) { + continue; + } currentIndex = columnPositions.get(sourceIndex); - OdpsType type = this.tableOriginalColumnTypeList - .get(currentIndex); + TypeInfo typeInfo = this.tableOriginalColumnTypeList.get(currentIndex); + OdpsType type = typeInfo.getOdpsType(); + String typeName = typeInfo.getTypeName(); columnValue = dataXRecord.getColumn(sourceIndex); if (columnValue == null) { continue; } // for compatible dt lib, "" as null - if(this.emptyAsNull && columnValue instanceof StringColumn && "".equals(columnValue.asString())){ + if (this.emptyAsNull && columnValue instanceof StringColumn && "".equals(columnValue.asString())) { continue; } switch (type) { - case STRING: - odpsRecord.setString(currentIndex, columnValue.asString()); - break; - case BIGINT: - odpsRecord.setBigint(currentIndex, columnValue.asLong()); - break; - case BOOLEAN: - odpsRecord.setBoolean(currentIndex, columnValue.asBoolean()); - break; - case DATETIME: - odpsRecord.setDatetime(currentIndex, columnValue.asDate()); - break; - case DOUBLE: - odpsRecord.setDouble(currentIndex, columnValue.asDouble()); - break; - case DECIMAL: - odpsRecord.setDecimal(currentIndex, columnValue.asBigDecimal()); - String columnStr = columnValue.asString(); - if(columnStr != null && columnStr.indexOf(".") >= 36) { - throw new Exception("Odps decimal 类型的整数位个数不能超过35"); + case STRING: + String newValue = (String)OdpsUtil.processOverLengthData(columnValue.asString(), OdpsType.STRING, this.overLengthRule, this.maxFieldLength, this.enableOverLengthOutput); + odpsRecord.setString(currentIndex, newValue); + break; + case BIGINT: + odpsRecord.setBigint(currentIndex, columnValue.asLong()); + break; + case BOOLEAN: + odpsRecord.setBoolean(currentIndex, columnValue.asBoolean()); + break; + case DATETIME: + odpsRecord.setDatetime(currentIndex, columnValue.asDate()); +// Date datetimeData = columnValue.asDate(); +// if (null == datetimeData) { +// odpsRecord.setDatetime(currentIndex, null); +// } else { +// Timestamp dateDataForOdps = new Timestamp(datetimeData.getTime()); +// if (datetimeData instanceof java.sql.Timestamp) { +// dateDataForOdps.setNanos(((java.sql.Timestamp)datetimeData).getNanos()); +// } +// odpsRecord.setDatetime(currentIndex, dateDataForOdps); +// } + break; + case DATE: + Date dateData = columnValue.asDate(); + if (null == dateData) { + odpsRecord.setDatetime(currentIndex, null); + } else { + if (this.useDateWithCalendar) { + odpsRecord.setDate(currentIndex, new java.sql.Date(dateData.getTime()), this.calendarForDate); + } else { + odpsRecord.setDatetime(currentIndex, new java.sql.Date(dateData.getTime())); } - default: - break; + } + break; + case DOUBLE: + odpsRecord.setDouble(currentIndex, columnValue.asDouble()); + break; + case FLOAT: + Double floatValue = columnValue.asDouble(); + if (null == floatValue) { + ((ArrayRecord) odpsRecord).setFloat(currentIndex, null); + } else { + ((ArrayRecord) odpsRecord).setFloat(currentIndex, floatValue.floatValue()); + } + break; + case DECIMAL: + odpsRecord.setDecimal(currentIndex, columnValue.asBigDecimal()); + String columnStr = columnValue.asString(); + if (columnStr != null && columnStr.indexOf(".") >= 36) { + throw new Exception(MESSAGE_SOURCE.message("odpswriterproxy.3")); + } + break; + case TINYINT: + Long tinyintValueStr = columnValue.asLong(); + if (null == tinyintValueStr) { + ((ArrayRecord) odpsRecord).setTinyint(currentIndex, null); + } else { + ((ArrayRecord) odpsRecord).setTinyint(currentIndex, + Byte.valueOf(String.valueOf(tinyintValueStr))); + } + break; + case SMALLINT: + Long smallIntValue = columnValue.asLong(); + if (null == smallIntValue) { + ((ArrayRecord) odpsRecord).setSmallint(currentIndex, null); + } else { + ((ArrayRecord) odpsRecord).setSmallint(currentIndex, smallIntValue.shortValue()); + } + break; + case INT: + Long intValue = columnValue.asLong(); + if (null == intValue) { + ((ArrayRecord) odpsRecord).setInt(currentIndex, null); + } else { + ((ArrayRecord) odpsRecord).setInt(currentIndex, intValue.intValue()); + } + break; + case VARCHAR: + // warn: columnValue.asString() 为 null 时 , odps sdk 有 BUG + // 不能用 Varchar 的默认构造函数,不然有 NPE + String varcharValueStr = columnValue.asString(); + Varchar varcharData = null; + if (varcharValueStr != null){ + varcharData = new Varchar(columnValue.asString()); + } + ((ArrayRecord) odpsRecord).setVarchar(currentIndex, varcharData); + break; + case CHAR: + String charValueStr = columnValue.asString(); + Char charData = null; + if (charValueStr != null ){ + charData = new Char(charValueStr); + } + ((ArrayRecord) odpsRecord).setChar(currentIndex, charData); + break; + case TIMESTAMP: + Date timestampData = columnValue.asDate(); + if (null == timestampData) { + ((ArrayRecord) odpsRecord).setTimestamp(currentIndex, null); + } else { + Timestamp timestampDataForOdps = new Timestamp(timestampData.getTime()); + if (timestampData instanceof java.sql.Timestamp) { + // 纳秒 + timestampDataForOdps.setNanos(((java.sql.Timestamp)timestampData).getNanos()); + } + // warn优化:如果原来类型就是Timestamp,直接使用就少创建了一个对象 + ((ArrayRecord) odpsRecord).setTimestamp(currentIndex, timestampDataForOdps); + } + break; + case BINARY: + Binary newBinaryData = (Binary)OdpsUtil.processOverLengthData(new Binary(columnValue.asBytes()), OdpsType.BINARY, this.overLengthRule, this.maxFieldLength, this.enableOverLengthOutput); + ((ArrayRecord) odpsRecord).setBinary(currentIndex,columnValue.asBytes() == null ? null : newBinaryData); + break; + case ARRAY: + JSONArray arrayJson = JSON.parseArray(columnValue.asString()); + ((ArrayRecord) odpsRecord).setArray(currentIndex, parseArray(arrayJson, (ArrayTypeInfo) typeInfo)); + break; + case MAP: + JSONObject mapJson = JSON.parseObject(columnValue.asString()); + ((ArrayRecord) odpsRecord).setMap(currentIndex, parseMap(mapJson, (MapTypeInfo) typeInfo)); + break; + case STRUCT: + JSONObject structJson = JSON.parseObject(columnValue.asString()); + ((ArrayRecord) odpsRecord).setStruct(currentIndex, + parseStruct(structJson, (StructTypeInfo) typeInfo)); + break; + default: + break; } } return odpsRecord; } catch (Exception e) { - String message = String.format( - "写入 ODPS 目的表时遇到了脏数据: 第[%s]个字段的数据出现错误,请检查该数据并作出修改 或者您可以增大阀值,忽略这条记录.", sourceIndex); - this.taskPluginCollector.collectDirtyRecord(dataXRecord, e, - message); - + String dirtyColumnName = ""; + try { + dirtyColumnName = this.allColumns.get(currentIndex); + } catch (Exception ignoreEx) { + // ignore + } + String message = MESSAGE_SOURCE.message("odpswriterproxy.4", sourceIndex, dirtyColumnName); + this.taskPluginCollector.collectDirtyRecord(dataXRecord, e, message); return null; } } + + private List parseArray(JSONArray jsonArray, ArrayTypeInfo arrayTypeInfo) throws ParseException { + if (null == jsonArray) { + return null; + } + List result = new ArrayList(); + switch (arrayTypeInfo.getElementTypeInfo().getOdpsType()) { + case BIGINT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getLong(i)); + } + return result; + /** + * 双精度浮点 + */ + case DOUBLE: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getDouble(i)); + } + return result; + /** + * 布尔型 + */ + case BOOLEAN: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getBoolean(i)); + } + return result; + /** + * 日期类型 + */ + case DATETIME: + // TODO 精度 + for (int i = 0; i < jsonArray.size(); i++) { + result.add(dateFormat.parse(jsonArray.getString(i))); + } + return result; + /** + * 字符串类型 + */ + case STRING: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getString(i)); + } + return result; + /** + * 精确小数类型 + */ + case DECIMAL: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getBigDecimal(i)); + } + return result; + /** + * 1字节有符号整型 + */ + case TINYINT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getByte(i)); + } + return result; + /** + * 2字节有符号整型 + */ + case SMALLINT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getShort(i)); + } + return result; + /** + * 4字节有符号整型 + */ + case INT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getInteger(i)); + } + return result; + /** + * 单精度浮点 + */ + case FLOAT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(jsonArray.getFloat(i)); + } + return result; + /** + * 固定长度字符串 + */ + case CHAR: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(new Char(jsonArray.getString(i), + ((CharTypeInfo) arrayTypeInfo.getElementTypeInfo()).getLength())); + } + return result; + /** + * 可变长度字符串 + */ + case VARCHAR: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(new Varchar(jsonArray.getString(i), + ((VarcharTypeInfo) arrayTypeInfo.getElementTypeInfo()).getLength())); + } + return result; + /** + * 时间类型 + */ + case DATE: + // TODO string -> date need timezone + // TODO how to use odps Record + for (int i = 0; i < jsonArray.size(); i++) { + result.add(java.sql.Date.valueOf(jsonArray.getString(i))); + } + return result; + /** + * 时间戳 + */ + case TIMESTAMP: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(Timestamp.valueOf(jsonArray.getString(i))); + } + return result; + /** + * 字节数组 + */ + case BINARY: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(Base64.decodeBase64(jsonArray.getString(i))); + } + return result; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject json = jsonArray.getJSONObject(i); + result.add(new IntervalDayTime(json.getInteger("totalSeconds"), json.getInteger("nanos"))); + } + return result; + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject json = jsonArray.getJSONObject(i); + result.add(new IntervalYearMonth(json.getInteger("years"), json.getInteger("months"))); + } + return result; + /** + * 结构体 + */ + case STRUCT: + for (int i = 0; i < jsonArray.size(); i++) { + result.add( + parseStruct(jsonArray.getJSONObject(i), (StructTypeInfo) arrayTypeInfo.getElementTypeInfo())); + } + return result; + /** + * MAP类型 + */ + case MAP: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(parseMap(jsonArray.getJSONObject(i), (MapTypeInfo) arrayTypeInfo.getElementTypeInfo())); + } + return result; + /** + * ARRAY类型 + */ + case ARRAY: + for (int i = 0; i < jsonArray.size(); i++) { + result.add(parseArray(jsonArray.getJSONArray(i), (ArrayTypeInfo) arrayTypeInfo.getElementTypeInfo())); + } + return result; + + default: + return result; + } + } + + private Map parseMap(JSONObject json, MapTypeInfo typeInfo) throws ParseException { + if (json == null) { + return null; + } + Map keyMap = new HashMap(); + Set keys = json.keySet(); + switch (typeInfo.getKeyTypeInfo().getOdpsType()) { + case BIGINT: + for (String item : keys) { + keyMap.put(Long.parseLong(item), item); + } + break; + /** + * 双精度浮点 + */ + case DOUBLE: + for (String item : keys) { + keyMap.put(Double.parseDouble(item), item); + } + break; + /** + * 布尔型 + */ + case BOOLEAN: + for (String item : keys) { + keyMap.put(Boolean.parseBoolean(item), item); + } + break; + /** + * 日期类型 + */ + case DATETIME: + // TODO 精度 + for (String item : keys) { + keyMap.put(dateFormat.parse(item), item); + } + break; + /** + * 字符串类型 + */ + case STRING: + for (String item : keys) { + keyMap.put(item, item); + } + break; + /** + * 精确小数类型 + */ + case DECIMAL: + for (String item : keys) { + keyMap.put(new BigDecimal(item), item); + } + break; + /** + * 1字节有符号整型 + */ + case TINYINT: + for (String item : keys) { + keyMap.put(Byte.parseByte(item), item); + } + break; + /** + * 2字节有符号整型 + */ + case SMALLINT: + for (String item : keys) { + keyMap.put(Short.parseShort(item), item); + } + break; + /** + * 4字节有符号整型 + */ + case INT: + for (String item : keys) { + keyMap.put(Integer.parseInt(item), item); + } + break; + /** + * 单精度浮点 + */ + case FLOAT: + for (String item : keys) { + keyMap.put(Float.parseFloat(item), item); + } + break; + /** + * 固定长度字符串 + */ + case CHAR: + for (String item : keys) { + keyMap.put(new Char(item, ((CharTypeInfo) typeInfo.getKeyTypeInfo()).getLength()), item); + } + break; + /** + * 可变长度字符串 + */ + case VARCHAR: + for (String item : keys) { + keyMap.put(new Varchar(item, ((VarcharTypeInfo) typeInfo.getKeyTypeInfo()).getLength()), item); + } + break; + /** + * 时间类型 + */ + case DATE: + // TODO string -> date need timezone + // TODO how to use odps Record + for (String item : keys) { + keyMap.put(java.sql.Date.valueOf(item), item); + } + break; + /** + * 时间戳 + */ + case TIMESTAMP: + for (String item : keys) { + keyMap.put(Timestamp.valueOf(item), item); + } + break; + /** + * 字节数组 + */ + case BINARY: + for (String item : keys) { + keyMap.put(new Binary(Base64.decodeBase64(item)), item); + } + break; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + for (String item : keys) { + JSONObject jsonObject = JSON.parseObject(item); + keyMap.put(new IntervalDayTime(jsonObject.getInteger("totalSeconds"), jsonObject.getInteger("nanos")), + item); + } + break; + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + for (String item : keys) { + JSONObject jsonObject = JSON.parseObject(item); + keyMap.put(new IntervalYearMonth(jsonObject.getInteger("years"), jsonObject.getInteger("months")), + item); + } + break; + default: + break; + // TODO throw an exception + } + Map result = new HashMap(); + // process map value + switch (typeInfo.getValueTypeInfo().getOdpsType()) { + case BIGINT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getLong(item.getValue())); + } + return result; + /** + * 双精度浮点 + */ + case DOUBLE: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getDouble(item.getValue())); + } + return result; + /** + * 布尔型 + */ + case BOOLEAN: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getBoolean(item.getValue())); + } + return result; + /** + * 日期类型 + */ + case DATETIME: + // TODO 精度 + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), dateFormat.parse(json.getString(item.getValue()))); + } + return result; + /** + * 字符串类型 + */ + case STRING: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getString(item.getValue())); + } + return result; + /** + * 精确小数类型 + */ + case DECIMAL: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getBigDecimal(item.getValue())); + } + return result; + /** + * 1字节有符号整型 + */ + case TINYINT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getByte(item.getValue())); + } + return result; + /** + * 2字节有符号整型 + */ + case SMALLINT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getShort(item.getValue())); + } + return result; + /** + * 4字节有符号整型 + */ + case INT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getInteger(item.getValue())); + } + return result; + /** + * 单精度浮点 + */ + case FLOAT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), json.getFloat(item.getValue())); + } + return result; + /** + * 固定长度字符串 + */ + case CHAR: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), new Char(json.getString(item.getValue()), + ((CharTypeInfo) typeInfo.getValueTypeInfo()).getLength())); + } + return result; + /** + * 可变长度字符串 + */ + case VARCHAR: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), new Varchar(json.getString(item.getValue()), + ((VarcharTypeInfo) typeInfo.getValueTypeInfo()).getLength())); + } + return result; + /** + * 时间类型 + */ + case DATE: + // TODO string -> date need timezone + // TODO how to use odps Record + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), java.sql.Date.valueOf(json.getString(item.getValue()))); + } + return result; + /** + * 时间戳 + */ + case TIMESTAMP: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), Timestamp.valueOf(json.getString(item.getValue()))); + } + return result; + /** + * 字节数组 + */ + case BINARY: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), new Binary(Base64.decodeBase64(json.getString(item.getValue())))); + } + return result; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + for (Map.Entry item : keyMap.entrySet()) { + JSONObject jsonObject = json.getJSONObject(item.getValue()); + result.put(item.getKey(), + new IntervalDayTime(jsonObject.getInteger("totalSeconds"), jsonObject.getInteger("nanos"))); + } + return result; + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + for (Map.Entry item : keyMap.entrySet()) { + JSONObject jsonObject = json.getJSONObject(item.getValue()); + result.put(item.getKey(), + new IntervalYearMonth(jsonObject.getInteger("years"), jsonObject.getInteger("months"))); + } + return result; + /** + * 结构体 + */ + case STRUCT: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), + parseStruct(json.getJSONObject(item.getValue()), (StructTypeInfo) typeInfo.getValueTypeInfo())); + } + return result; + /** + * MAP类型 + */ + case MAP: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), + parseMap(json.getJSONObject(item.getValue()), (MapTypeInfo) typeInfo.getValueTypeInfo())); + } + return result; + /** + * ARRAY类型 + */ + case ARRAY: + for (Map.Entry item : keyMap.entrySet()) { + result.put(item.getKey(), + parseArray(json.getJSONArray(item.getValue()), (ArrayTypeInfo) typeInfo.getValueTypeInfo())); + } + return result; + + default: + throw new IllegalArgumentException("decode record failed. column type: " + typeInfo.getTypeName()); + } + } + + public Struct parseStruct(JSONObject json, StructTypeInfo struct) throws ParseException { + if (null == json) { + return null; + } + List fieldNames = struct.getFieldNames(); + List typeInfos = struct.getFieldTypeInfos(); + List structValues = new ArrayList(); + for (int i = 0; i < fieldNames.size(); i++) { + String fieldName = fieldNames.get(i); + switch (typeInfos.get(i).getOdpsType()) { + case BIGINT: + structValues.add(json.getLong(fieldName)); + break; + /** + * 双精度浮点 + */ + case DOUBLE: + structValues.add(json.getDouble(fieldName)); + break; + /** + * 布尔型 + */ + case BOOLEAN: + structValues.add(json.getBoolean(fieldName)); + break; + /** + * 日期类型 + */ + case DATETIME: + // TODO 精度 + structValues.add(dateFormat.parse(json.getString(fieldName))); + break; + /** + * 字符串类型 + */ + case STRING: + structValues.add(json.getString(fieldName)); + break; + /** + * 精确小数类型 + */ + case DECIMAL: + structValues.add(json.getBigDecimal(fieldName)); + break; + /** + * 1字节有符号整型 + */ + case TINYINT: + structValues.add(json.getByte(fieldName)); + break; + /** + * 2字节有符号整型 + */ + case SMALLINT: + structValues.add(json.getShort(fieldName)); + break; + /** + * 4字节有符号整型 + */ + case INT: + structValues.add(json.getInteger(fieldName)); + break; + /** + * 单精度浮点 + */ + case FLOAT: + structValues.add(json.getFloat(fieldName)); + break; + /** + * 固定长度字符串 + */ + case CHAR: + structValues.add(new Char(json.getString(fieldName), ((CharTypeInfo) typeInfos.get(i)).getLength())); + break; + /** + * 可变长度字符串 + */ + case VARCHAR: + structValues + .add(new Varchar(json.getString(fieldName), ((VarcharTypeInfo) typeInfos.get(i)).getLength())); + break; + /** + * 时间类型 + */ + case DATE: + // TODO string -> date need timezone + // TODO how to use odps Record + structValues.add(java.sql.Date.valueOf(json.getString(fieldName))); + break; + /** + * 时间戳 + */ + case TIMESTAMP: + structValues.add(Timestamp.valueOf(json.getString(fieldName))); + break; + /** + * 字节数组 + */ + case BINARY: + structValues.add(Base64.decodeBase64(json.getString(fieldName))); + break; + /** + * 日期间隔 + */ + case INTERVAL_DAY_TIME: + // TODO special process as map object + structValues.add(new IntervalDayTime(json.getInteger("totalSeconds"), json.getInteger("nanos"))); + /** + * 年份间隔 + */ + case INTERVAL_YEAR_MONTH: + structValues.add(new IntervalYearMonth(json.getInteger("years"), json.getInteger("months"))); + /** + * 结构体 + */ + case STRUCT: + structValues.add(parseStruct(json.getJSONObject(fieldName), (StructTypeInfo) typeInfos.get(i))); + break; + /** + * MAP类型 + */ + case MAP: + structValues.add(parseMap(json.getJSONObject(fieldName), (MapTypeInfo) typeInfos.get(i))); + break; + /** + * ARRAY类型 + */ + case ARRAY: + structValues.add(parseArray(json.getJSONArray(fieldName), (ArrayTypeInfo) typeInfos.get(i))); + break; + } + } + + SimpleStruct simpleStruct = new SimpleStruct(struct, structValues); + return simpleStruct; + } + + public Long getLastActiveTime() { + return lastActiveTime; + } + + public void setLastActiveTime(Long lastActiveTime) { + this.lastActiveTime = lastActiveTime; + } + + public Long getCurrentTotalBytes() throws IOException { + return this.protobufRecordPack.getTotalBytes(); + } } diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/PartitionInfo.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/PartitionInfo.java new file mode 100644 index 00000000..f293d8cc --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/PartitionInfo.java @@ -0,0 +1,87 @@ +package com.alibaba.datax.plugin.writer.odpswriter.model; + +public class PartitionInfo { + /** + * 字段名 + */ + private String name; + /** + * String + */ + private String type; + /** + * eventTime or function + * yyyy/MM/dd/HH/mm + * 可自定义组合 + */ + private String valueMode; + private String value; + private String comment; + /** + * 自定义分区有效 + * eventTime / constant + * function + */ + private String category; + /** + * 当 partitionType 为function时 + * functionExpression 为 valueMode 对应的expression + */ + private String functionExpression; + + public String getFunctionExpression() { + return functionExpression; + } + + public void setFunctionExpression(String functionExpression) { + this.functionExpression = functionExpression; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValueMode() { + return valueMode; + } + + public void setValueMode(String valueMode) { + this.valueMode = valueMode; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunction.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunction.java new file mode 100644 index 00000000..55c8a114 --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunction.java @@ -0,0 +1,44 @@ +package com.alibaba.datax.plugin.writer.odpswriter.model; + +import java.io.Serializable; +import java.util.List; + +public class UserDefinedFunction implements Serializable { + private static final long serialVersionUID = 1L; + private String name; + private String expression; + private String inputColumn; + private List variableRule; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getInputColumn() { + return inputColumn; + } + + public void setInputColumn(String inputColumn) { + this.inputColumn = inputColumn; + } + + public List getVariableRule() { + return variableRule; + } + + public void setVariableRule(List variableRule) { + this.variableRule = variableRule; + } +} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunctionRule.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunctionRule.java new file mode 100644 index 00000000..5676eb45 --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/model/UserDefinedFunctionRule.java @@ -0,0 +1,26 @@ +package com.alibaba.datax.plugin.writer.odpswriter.model; + +import java.io.Serializable; +import java.util.List; + +public class UserDefinedFunctionRule implements Serializable { + private static final long serialVersionUID = 1L; + private String type; + private List params; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List getParams() { + return params; + } + + public void setParams(List params) { + this.params = params; + } +} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/CustomPartitionUtils.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/CustomPartitionUtils.java new file mode 100644 index 00000000..51ad45a1 --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/CustomPartitionUtils.java @@ -0,0 +1,54 @@ +package com.alibaba.datax.plugin.writer.odpswriter.util; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.odpswriter.model.PartitionInfo; +import com.alibaba.datax.plugin.writer.odpswriter.model.UserDefinedFunction; +import com.alibaba.fastjson.JSON; +import com.google.common.base.Joiner; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.Serializable; +import java.util.*; +import java.util.stream.Collectors; + +public class CustomPartitionUtils implements Serializable { + private static final long serialVersionUID = 1L; + protected static Logger logger = LoggerFactory.getLogger(CustomPartitionUtils.class); + + public static List getListWithJson(Configuration config, String path, Class clazz) { + Object object = config.get(path, List.class); + if (null == object) { + return null; + } + + return JSON.parseArray(JSON.toJSONString(object), clazz); + } + + public static String generate(Record record, List functions, List partitions, + List allColumns) { + for (PartitionInfo partitionInfo : partitions) { + partitionInfo.setValue(buildPartitionValue(partitionInfo, functions, record, allColumns)); + } + List partitionList = partitions.stream() + .map(item -> String.format("%s='%s'", item.getName(), item.getValue())) + .collect(Collectors.toList()); + return Joiner.on(",").join(partitionList); + } + + private static String buildPartitionValue(PartitionInfo partitionInfo, List functions, Record record, + List allColumns) { +// logger.info("try build partition value:partitionInfo:\n{},functions:\n{}", +// JSON.toJSONString(partitionInfo), JSON.toJSONString(functions)); + if (StringUtils.isBlank(partitionInfo.getCategory()) + || "eventTime".equalsIgnoreCase(partitionInfo.getCategory()) + || "constant".equalsIgnoreCase(partitionInfo.getCategory())) { + // 直接输出原样字符串 + return partitionInfo.getValueMode(); +// throw new RuntimeException("not support partition category:" + partitionInfo.getCategory()); + } + throw new RuntimeException("un support partition info type:" + partitionInfo.getCategory()); + } +} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/DESCipher.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/DESCipher.java deleted file mode 100755 index 4afead52..00000000 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/DESCipher.java +++ /dev/null @@ -1,355 +0,0 @@ -/** - * (C) 2010-2014 Alibaba Group Holding Limited. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.alibaba.datax.plugin.writer.odpswriter.util; - -import javax.crypto.Cipher; -import javax.crypto.SecretKey; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.DESKeySpec; -import java.security.SecureRandom; - -/** - *   * DES加解密,支持与delphi交互(字符串编码需统一为UTF-8) - * - *   * - * - *   * @author wym - * - *    - */ - -public class DESCipher { - - /** - *   * 密钥 - * - *    - */ - - public static final String KEY = "DESDES"; - - private final static String DES = "DES"; - - /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @param key - * - *   * 密钥,长度必须是8的倍数 - * - *   * @return 密文(字节) - * - *   * @throws Exception - * - *    - */ - - public static byte[] encrypt(byte[] src, byte[] key) throws Exception { - - // DES算法要求有一个可信任的随机数源 - - SecureRandom sr = new SecureRandom(); - - // 从原始密匙数据创建DESKeySpec对象 - - DESKeySpec dks = new DESKeySpec(key); - - // 创建一个密匙工厂,然后用它把DESKeySpec转换成 - - // 一个SecretKey对象 - - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - - SecretKey securekey = keyFactory.generateSecret(dks); - - // Cipher对象实际完成加密操作 - - Cipher cipher = Cipher.getInstance(DES); - - // 用密匙初始化Cipher对象 - - cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); - - // 现在,获取数据并加密 - - // 正式执行加密操作 - - return cipher.doFinal(src); - - } - - /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @param key - * - *   * 密钥,长度必须是8的倍数 - * - *   * @return 明文(字节) - * - *   * @throws Exception - * - *    - */ - - public static byte[] decrypt(byte[] src, byte[] key) throws Exception { - - // DES算法要求有一个可信任的随机数源 - - SecureRandom sr = new SecureRandom(); - - // 从原始密匙数据创建一个DESKeySpec对象 - - DESKeySpec dks = new DESKeySpec(key); - - // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成 - - // 一个SecretKey对象 - - SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); - - SecretKey securekey = keyFactory.generateSecret(dks); - - // Cipher对象实际完成解密操作 - - Cipher cipher = Cipher.getInstance(DES); - - // 用密匙初始化Cipher对象 - - cipher.init(Cipher.DECRYPT_MODE, securekey, sr); - - // 现在,获取数据并解密 - - // 正式执行解密操作 - - return cipher.doFinal(src); - - } - - /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @return 密文(字节) - * - *   * @throws Exception - * - *    - */ - - public static byte[] encrypt(byte[] src) throws Exception { - - return encrypt(src, KEY.getBytes()); - - } - - /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @return 明文(字节) - * - *   * @throws Exception - * - *    - */ - - public static byte[] decrypt(byte[] src) throws Exception { - - return decrypt(src, KEY.getBytes()); - - } - - /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字符串) - * - *   * @return 密文(16进制字符串) - * - *   * @throws Exception - * - *    - */ - - public final static String encrypt(String src) { - - try { - - return byte2hex(encrypt(src.getBytes(), KEY.getBytes())); - - } catch (Exception e) { - - e.printStackTrace(); - - } - - return null; - - } - - /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字符串) - * - *   * @return 明文(字符串) - * - *   * @throws Exception - * - *    - */ - - public final static String decrypt(String src) { - try { - - return new String(decrypt(hex2byte(src.getBytes()), KEY.getBytes())); - - } catch (Exception e) { - - e.printStackTrace(); - - } - - return null; - - } - - /** - *   * 加密 - * - *   * - * - *   * @param src - * - *   * 明文(字节) - * - *   * @return 密文(16进制字符串) - * - *   * @throws Exception - * - *    - */ - - public static String encryptToString(byte[] src) throws Exception { - - return encrypt(new String(src)); - - } - - /** - *   * 解密 - * - *   * - * - *   * @param src - * - *   * 密文(字节) - * - *   * @return 明文(字符串) - * - *   * @throws Exception - * - *    - */ - - public static String decryptToString(byte[] src) throws Exception { - - return decrypt(new String(src)); - - } - - public static String byte2hex(byte[] b) { - - String hs = ""; - - String stmp = ""; - - for (int n = 0; n < b.length; n++) { - - stmp = (Integer.toHexString(b[n] & 0XFF)); - - if (stmp.length() == 1) - - hs = hs + "0" + stmp; - - else - - hs = hs + stmp; - - } - - return hs.toUpperCase(); - - } - - public static byte[] hex2byte(byte[] b) { - - if ((b.length % 2) != 0) - - throw new IllegalArgumentException("长度不是偶数"); - - byte[] b2 = new byte[b.length / 2]; - - for (int n = 0; n < b.length; n += 2) { - - String item = new String(b, n, 2); - - b2[n / 2] = (byte) Integer.parseInt(item, 16); - - } - return b2; - - } - - /* - * public static void main(String[] args) { try { String src = "cheetah"; - * String crypto = DESCipher.encrypt(src); System.out.println("密文[" + src + - * "]:" + crypto); System.out.println("解密后:" + DESCipher.decrypt(crypto)); } - * catch (Exception e) { e.printStackTrace(); } } - */ -} diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/IdAndKeyUtil.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/IdAndKeyUtil.java index 95e4b56b..98c9afdd 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/IdAndKeyUtil.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/IdAndKeyUtil.java @@ -1,5 +1,5 @@ /** - * (C) 2010-2014 Alibaba Group Holding Limited. + * (C) 2010-2022 Alibaba Group Holding Limited. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,9 +18,11 @@ package com.alibaba.datax.plugin.writer.odpswriter.util; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.plugin.writer.odpswriter.Constant; +import com.alibaba.datax.common.util.IdAndKeyRollingUtil; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.plugin.writer.odpswriter.Key; import com.alibaba.datax.plugin.writer.odpswriter.OdpsWriterErrorCode; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +31,7 @@ import java.util.Map; public class IdAndKeyUtil { private static Logger LOG = LoggerFactory.getLogger(IdAndKeyUtil.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(IdAndKeyUtil.class); public static Configuration parseAccessIdAndKey(Configuration originalConfig) { String accessId = originalConfig.getString(Key.ACCESS_ID); @@ -50,36 +53,13 @@ public class IdAndKeyUtil { private static Configuration getAccessIdAndKeyFromEnv(Configuration originalConfig, Map envProp) { - String accessId = null; - String accessKey = null; - - String skynetAccessID = envProp.get(Constant.SKYNET_ACCESSID); - String skynetAccessKey = envProp.get(Constant.SKYNET_ACCESSKEY); - - if (StringUtils.isNotBlank(skynetAccessID) - || StringUtils.isNotBlank(skynetAccessKey)) { - /** - * 环境变量中,如果存在SKYNET_ACCESSID/SKYNET_ACCESSKEy(只要有其中一个变量,则认为一定是两个都存在的!), - * 则使用其值作为odps的accessId/accessKey(会解密) - */ - - LOG.info("Try to get accessId/accessKey from environment."); - accessId = skynetAccessID; - accessKey = DESCipher.decrypt(skynetAccessKey); - if (StringUtils.isNotBlank(accessKey)) { - originalConfig.set(Key.ACCESS_ID, accessId); - originalConfig.set(Key.ACCESS_KEY, accessKey); - LOG.info("Get accessId/accessKey from environment variables successfully."); - } else { - throw DataXException.asDataXException(OdpsWriterErrorCode.GET_ID_KEY_FAIL, - String.format("从环境变量中获取accessId/accessKey 失败, accessId=[%s]", accessId)); - } - } else { - // 无处获取(既没有配置在作业中,也没用在环境变量中) + // 如果获取到ak,在getAccessIdAndKeyFromEnv中已经设置到originalConfig了 + String accessKey = IdAndKeyRollingUtil.getAccessIdAndKeyFromEnv(originalConfig); + if (StringUtils.isBlank(accessKey)) { + // 无处获取(既没有配置在作业中,也没用在环境变量中) throw DataXException.asDataXException(OdpsWriterErrorCode.GET_ID_KEY_FAIL, - "无法获取到accessId/accessKey. 它们既不存在于您的配置中,也不存在于环境变量中."); - } - + MESSAGE_SOURCE.message("idandkeyutil.2")); + } return originalConfig; } } diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/LocalStrings.properties b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/LocalStrings.properties new file mode 100644 index 00000000..289c70fa --- /dev/null +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/LocalStrings.properties @@ -0,0 +1,39 @@ +descipher.1=\u957f\u5ea6\u4e0d\u662f\u5076\u6570 + +idandkeyutil.1=\u4ece\u73af\u5883\u53d8\u91cf\u4e2d\u83b7\u53d6accessId/accessKey \u5931\u8d25, accessId=[{0}] +idandkeyutil.2=\u65e0\u6cd5\u83b7\u53d6\u5230accessId/accessKey. \u5b83\u4eec\u65e2\u4e0d\u5b58\u5728\u4e8e\u60a8\u7684\u914d\u7f6e\u4e2d\uff0c\u4e5f\u4e0d\u5b58\u5728\u4e8e\u73af\u5883\u53d8\u91cf\u4e2d. + +odpsutil.1=\u60a8\u672a\u914d\u7f6e\u5199\u5165 ODPS \u76ee\u7684\u8868\u7684\u5217\u4fe1\u606f. \u6b63\u786e\u7684\u914d\u7f6e\u65b9\u5f0f\u662f\u7ed9datax\u7684 column \u9879\u914d\u7f6e\u4e0a\u60a8\u9700\u8981\u8bfb\u53d6\u7684\u5217\u540d\u79f0,\u7528\u82f1\u6587\u9017\u53f7\u5206\u9694 \u4f8b\u5982: \"column\": [\"id\",\"name\"]. +odpsutil.2=[truncate]\u662f\u5fc5\u586b\u914d\u7f6e\u9879, \u610f\u601d\u662f\u5199\u5165 ODPS \u76ee\u7684\u8868\u524d\u662f\u5426\u6e05\u7a7a\u8868/\u5206\u533a. \u8bf7\u60a8\u589e\u52a0 truncate \u7684\u914d\u7f6e\uff0c\u6839\u636e\u4e1a\u52a1\u9700\u8981\u9009\u62e9\u4e0atrue \u6216\u8005 false. +odpsutil.3=\u60a8\u6240\u914d\u7f6e\u7684maxRetryTime \u503c\u9519\u8bef. \u8be5\u503c\u4e0d\u80fd\u5c0f\u4e8e1, \u4e14\u4e0d\u80fd\u5927\u4e8e {0}. \u63a8\u8350\u7684\u914d\u7f6e\u65b9\u5f0f\u662f\u7ed9maxRetryTime \u914d\u7f6e1-11\u4e4b\u95f4\u7684\u67d0\u4e2a\u503c. \u8bf7\u60a8\u68c0\u67e5\u914d\u7f6e\u5e76\u505a\u51fa\u76f8\u5e94\u4fee\u6539. +odpsutil.4=\u4e0d\u652f\u6301\u7684\u8d26\u53f7\u7c7b\u578b:[{0}]. \u8d26\u53f7\u7c7b\u578b\u76ee\u524d\u4ec5\u652f\u6301aliyun, taobao. +odpsutil.5=\u83b7\u53d6 ODPS \u76ee\u7684\u8868:{0} \u7684\u6240\u6709\u5206\u533a\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.6=\u68c0\u67e5 ODPS \u76ee\u7684\u8868:{0} \u662f\u5426\u4e3a\u5206\u533a\u8868\u5931\u8d25, \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.7=\u6e05\u7a7a ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25, \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.8=\u6dfb\u52a0 ODPS \u76ee\u7684\u8868\u7684\u5206\u533a\u5931\u8d25. \u9519\u8bef\u53d1\u751f\u5728\u6dfb\u52a0 ODPS \u7684\u9879\u76ee:{0} \u7684\u8868:{1} \u7684\u5206\u533a:{2}. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.9=\u521b\u5efaTunnelUpload\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.10=\u521b\u5efaTunnelUpload\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.11=\u83b7\u53d6TunnelUpload\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.12=\u83b7\u53d6TunnelUpload\u5931\u8d25. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.13=Drop ODPS \u76ee\u7684\u8868\u5206\u533a\u5931\u8d25. \u9519\u8bef\u53d1\u751f\u5728\u9879\u76ee:{0} \u7684\u8868:{1} \u7684\u5206\u533a:{2} .\u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.14=ODPS \u76ee\u7684\u8868\u81ea\u8eab\u7684 partition:{0} \u683c\u5f0f\u4e0d\u5bf9. \u6b63\u786e\u7684\u683c\u5f0f\u5f62\u5982: pt=1,ds=hangzhou +odpsutil.15=ODPS \u76ee\u7684\u8868\u5728\u8fd0\u884c ODPS SQL\u5931\u8d25, \u8fd4\u56de\u503c\u4e3a:{0}. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. SQL \u5185\u5bb9\u4e3a:[\n{1}\n]. +odpsutil.16=ODPS \u76ee\u7684\u8868\u5728\u8fd0\u884c ODPS SQL \u65f6\u629b\u51fa\u5f02\u5e38, \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. SQL \u5185\u5bb9\u4e3a:[\n{0}\n]. +odpsutil.17=ODPS \u76ee\u7684\u8868\u5728\u63d0\u4ea4 block:[\n{0}\n] \u65f6\u5931\u8d25, uploadId=[{1}]. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.18=ODPS \u76ee\u7684\u8868\u5199 block:{0} \u5931\u8d25\uff0c uploadId=[{1}]. \u8bf7\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5904\u7406. +odpsutil.19=ODPS \u76ee\u7684\u8868\u7684\u5217\u914d\u7f6e\u9519\u8bef. \u7531\u4e8e\u60a8\u6240\u914d\u7f6e\u7684\u5217:{0} \u4e0d\u5b58\u5728\uff0c\u4f1a\u5bfc\u81f4datax\u65e0\u6cd5\u6b63\u5e38\u63d2\u5165\u6570\u636e\uff0c\u8bf7\u68c0\u67e5\u8be5\u5217\u662f\u5426\u5b58\u5728\uff0c\u5982\u679c\u5b58\u5728\u8bf7\u68c0\u67e5\u5927\u5c0f\u5199\u7b49\u914d\u7f6e. +odpsutil.20=DataX \u5199\u5165 ODPS \u8868\u4e0d\u652f\u6301\u8be5\u5b57\u6bb5\u7c7b\u578b:[{0}]. \u76ee\u524d\u652f\u6301\u62bd\u53d6\u7684\u5b57\u6bb5\u7c7b\u578b\u6709\uff1abigint, boolean, datetime, double, string. \u60a8\u53ef\u4ee5\u9009\u62e9\u4e0d\u62bd\u53d6 DataX \u4e0d\u652f\u6301\u7684\u5b57\u6bb5\u6216\u8005\u8054\u7cfb ODPS \u7ba1\u7406\u5458\u5bfb\u6c42\u5e2e\u52a9. +odpsutil.21=\u60a8\u6ca1\u6709\u914d\u7f6e\u5206\u533a\u4fe1\u606f\uff0c\u56e0\u4e3a\u4f60\u914d\u7f6e\u7684\u8868\u662f\u5206\u533a\u8868:{0} \u5982\u679c\u9700\u8981\u8fdb\u884c truncate \u64cd\u4f5c\uff0c\u5fc5\u987b\u6307\u5b9a\u9700\u8981\u6e05\u7a7a\u7684\u5177\u4f53\u5206\u533a. \u8bf7\u4fee\u6539\u5206\u533a\u914d\u7f6e\uff0c\u683c\u5f0f\u5f62\u5982 pt=$'{bizdate'} . +odpsutil.22=\u5206\u533a\u4fe1\u606f\u914d\u7f6e\u9519\u8bef\uff0c\u4f60\u7684ODPS\u8868\u662f\u975e\u5206\u533a\u8868:{0} \u8fdb\u884c truncate \u64cd\u4f5c\u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u68c0\u67e5\u60a8\u7684\u5206\u533a\u914d\u7f6e\uff0c\u5220\u9664\u8be5\u914d\u7f6e\u9879\u7684\u503c. +odpsutil.23=\u60a8\u7684\u76ee\u7684\u8868\u662f\u5206\u533a\u8868\uff0c\u5199\u5165\u5206\u533a\u8868:{0} \u65f6\u5fc5\u987b\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u4fee\u6539\u60a8\u7684\u5206\u533a\u914d\u7f6e\u4fe1\u606f\uff0c\u683c\u5f0f\u5f62\u5982 \u683c\u5f0f\u5f62\u5982 pt=$'{bizdate'}. +odpsutil.24=\u60a8\u7684\u76ee\u7684\u8868\u662f\u975e\u5206\u533a\u8868\uff0c\u5199\u5165\u975e\u5206\u533a\u8868:{0} \u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u5220\u9664\u5206\u533a\u914d\u7f6e\u4fe1\u606f +odpsutil.25=\u60a8\u6ca1\u6709\u914d\u7f6e\u5206\u533a\u4fe1\u606f\uff0c\u56e0\u4e3a\u4f60\u914d\u7f6e\u7684\u8868\u662f\u5206\u533a\u8868:{0} \u5982\u679c\u9700\u8981\u8fdb\u884c truncate \u64cd\u4f5c\uff0c\u5fc5\u987b\u6307\u5b9a\u9700\u8981\u6e05\u7a7a\u7684\u5177\u4f53\u5206\u533a. \u8bf7\u4fee\u6539\u5206\u533a\u914d\u7f6e\uff0c\u683c\u5f0f\u5f62\u5982 pt=$'{bizdate'} . +odpsutil.26=\u5206\u533a\u4fe1\u606f\u914d\u7f6e\u9519\u8bef\uff0c\u4f60\u7684ODPS\u8868\u662f\u975e\u5206\u533a\u8868:{0} \u8fdb\u884c truncate \u64cd\u4f5c\u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u68c0\u67e5\u60a8\u7684\u5206\u533a\u914d\u7f6e\uff0c\u5220\u9664\u8be5\u914d\u7f6e\u9879\u7684\u503c. +odpsutil.27=\u60a8\u7684\u76ee\u7684\u8868\u662f\u5206\u533a\u8868\uff0c\u5199\u5165\u5206\u533a\u8868:{0} \u65f6\u5fc5\u987b\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u4fee\u6539\u60a8\u7684\u5206\u533a\u914d\u7f6e\u4fe1\u606f\uff0c\u683c\u5f0f\u5f62\u5982 \u683c\u5f0f\u5f62\u5982 pt=$'{bizdate'}. +odpsutil.28=\u60a8\u7684\u76ee\u7684\u8868\u662f\u975e\u5206\u533a\u8868\uff0c\u5199\u5165\u975e\u5206\u533a\u8868:{0} \u65f6\u4e0d\u9700\u8981\u6307\u5b9a\u5177\u4f53\u5206\u533a\u503c. \u8bf7\u5220\u9664\u5206\u533a\u914d\u7f6e\u4fe1\u606f +odpsutil.29=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 [project] \u662f\u5426\u6b63\u786e. +odpsutil.30=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 [table] \u662f\u5426\u6b63\u786e. +odpsutil.31=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 [accessId] [accessKey]\u662f\u5426\u6b63\u786e. +odpsutil.32=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 [accessKey] \u662f\u5426\u6b63\u786e. +odpsutil.33=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 [accessId] [accessKey] [project]\u662f\u5426\u5339\u914d. +odpsutil.34=\u52a0\u8f7d ODPS \u76ee\u7684\u8868:{0} \u5931\u8d25. \u8bf7\u68c0\u67e5\u60a8\u914d\u7f6e\u7684 ODPS \u76ee\u7684\u8868\u7684 project,table,accessId,accessKey,odpsServer\u7b49\u503c. \ No newline at end of file diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsExceptionMsg.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsExceptionMsg.java index d613eefd..ae6f275c 100644 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsExceptionMsg.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsExceptionMsg.java @@ -1,8 +1,5 @@ package com.alibaba.datax.plugin.writer.odpswriter.util; -/** - * Created by hongjiao.hj on 2015/6/9. - */ public class OdpsExceptionMsg { public static final String ODPS_PROJECT_NOT_FOUNT = "ODPS-0420111: Project not found"; diff --git a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsUtil.java b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsUtil.java index 2a401b69..a663da85 100755 --- a/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsUtil.java +++ b/odpswriter/src/main/java/com/alibaba/datax/plugin/writer/odpswriter/util/OdpsUtil.java @@ -1,29 +1,35 @@ package com.alibaba.datax.plugin.writer.odpswriter.util; +import com.alibaba.datax.common.element.*; import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.common.util.RetryUtil; -import com.alibaba.datax.plugin.writer.odpswriter.Constant; -import com.alibaba.datax.plugin.writer.odpswriter.Key; - -import com.alibaba.datax.plugin.writer.odpswriter.OdpsWriterErrorCode; +import com.alibaba.datax.plugin.writer.odpswriter.*; import com.aliyun.odps.*; +import com.aliyun.odps.Column; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; +import com.aliyun.odps.data.ResultSet; +import com.aliyun.odps.data.Binary; import com.aliyun.odps.task.SQLTask; import com.aliyun.odps.tunnel.TableTunnel; - import com.aliyun.odps.tunnel.io.ProtobufRecordPack; import com.aliyun.odps.tunnel.io.TunnelRecordWriter; +import com.aliyun.odps.type.TypeInfo; + import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateFormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.Callable; public class OdpsUtil { private static final Logger LOG = LoggerFactory.getLogger(OdpsUtil.class); + private static final MessageSource MESSAGE_SOURCE = MessageSource.loadResourceBundle(OdpsUtil.class); public static int MAX_RETRY_TIME = 10; @@ -38,15 +44,14 @@ public class OdpsUtil { if (null == originalConfig.getList(Key.COLUMN) || originalConfig.getList(Key.COLUMN, String.class).isEmpty()) { - throw DataXException.asDataXException(OdpsWriterErrorCode.REQUIRED_VALUE, "您未配置写入 ODPS 目的表的列信息. " + - "正确的配置方式是给datax的 column 项配置上您需要读取的列名称,用英文逗号分隔 例如: \"column\": [\"id\",\"name\"]."); + throw DataXException.asDataXException(OdpsWriterErrorCode.REQUIRED_VALUE, MESSAGE_SOURCE.message("odpsutil.1")); } // getBool 内部要求,值只能为 true,false 的字符串(大小写不敏感),其他一律报错,不再有默认配置 + // 如果是动态分区写入,不进行truncate Boolean truncate = originalConfig.getBool(Key.TRUNCATE); if (null == truncate) { - throw DataXException.asDataXException(OdpsWriterErrorCode.REQUIRED_VALUE, "[truncate]是必填配置项, 意思是写入 ODPS 目的表前是否清空表/分区. " + - "请您增加 truncate 的配置,根据业务需要选择上true 或者 false."); + throw DataXException.asDataXException(OdpsWriterErrorCode.REQUIRED_VALUE, MESSAGE_SOURCE.message("odpsutil.2")); } } @@ -54,19 +59,22 @@ public class OdpsUtil { int maxRetryTime = originalConfig.getInt(Key.MAX_RETRY_TIME, OdpsUtil.MAX_RETRY_TIME); if (maxRetryTime < 1 || maxRetryTime > OdpsUtil.MAX_RETRY_TIME) { - throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, "您所配置的maxRetryTime 值错误. 该值不能小于1, 且不能大于 " + OdpsUtil.MAX_RETRY_TIME + - ". 推荐的配置方式是给maxRetryTime 配置1-11之间的某个值. 请您检查配置并做出相应修改."); + throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, MESSAGE_SOURCE.message("odpsutil.3", OdpsUtil.MAX_RETRY_TIME)); } MAX_RETRY_TIME = maxRetryTime; } - public static String formatPartition(String partitionString) { + public static String formatPartition(String partitionString, Boolean printLog) { if (null == partitionString) { return null; } - - return partitionString.trim().replaceAll(" *= *", "=").replaceAll(" */ *", ",") + String parsedPartition = partitionString.trim().replaceAll(" *= *", "=").replaceAll(" */ *", ",") .replaceAll(" *, *", ",").replaceAll("'", ""); + if (printLog) { + LOG.info("format partition with rules: remove all space; remove all '; replace / to ,"); + LOG.info("original partiton {} parsed partition {}", partitionString, parsedPartition); + } + return parsedPartition; } @@ -77,13 +85,18 @@ public class OdpsUtil { String odpsServer = originalConfig.getString(Key.ODPS_SERVER); String project = originalConfig.getString(Key.PROJECT); + String securityToken = originalConfig.getString(Key.SECURITY_TOKEN); Account account; if (accountType.equalsIgnoreCase(Constant.DEFAULT_ACCOUNT_TYPE)) { - account = new AliyunAccount(accessId, accessKey); + if (StringUtils.isNotBlank(securityToken)) { + account = new com.aliyun.odps.account.StsAccount(accessId, accessKey, securityToken); + } else { + account = new AliyunAccount(accessId, accessKey); + } } else { throw DataXException.asDataXException(OdpsWriterErrorCode.ACCOUNT_TYPE_ERROR, - String.format("不支持的账号类型:[%s]. 账号类型目前仅支持aliyun, taobao.", accountType)); + MESSAGE_SOURCE.message("odpsutil.4", accountType)); } Odps odps = new Odps(account); @@ -95,6 +108,7 @@ public class OdpsUtil { } odps.setDefaultProject(project); odps.setEndpoint(odpsServer); + odps.setUserAgent("DATAX"); return odps; } @@ -124,8 +138,7 @@ public class OdpsUtil { parts.add(partition.getPartitionSpec().toString()); } } catch (Exception e) { - throw DataXException.asDataXException(OdpsWriterErrorCode.GET_PARTITION_FAIL, String.format("获取 ODPS 目的表:%s 的所有分区失败. 请联系 ODPS 管理员处理.", - table.getName()), e); + throw DataXException.asDataXException(OdpsWriterErrorCode.GET_PARTITION_FAIL, MESSAGE_SOURCE.message("odpsutil.5", table.getName()), e); } return parts; } @@ -140,37 +153,45 @@ public class OdpsUtil { } } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.CHECK_IF_PARTITIONED_TABLE_FAILED, - String.format("检查 ODPS 目的表:%s 是否为分区表失败, 请联系 ODPS 管理员处理.", table.getName()), e); + MESSAGE_SOURCE.message("odpsutil.6", table.getName()), e); } return false; } public static void truncateNonPartitionedTable(Odps odps, Table tab) { - String truncateNonPartitionedTableSql = "truncate table " + tab.getName() + ";"; + truncateNonPartitionedTable(odps, tab.getName()); + } + + public static void truncateNonPartitionedTable(Odps odps, String tableName) { + String truncateNonPartitionedTableSql = "truncate table " + tableName + ";"; try { - runSqlTaskWithRetry(odps, truncateNonPartitionedTableSql, MAX_RETRY_TIME, 1000, true); + LOG.info("truncate non partitioned table with sql: {}", truncateNonPartitionedTableSql); + runSqlTaskWithRetry(odps, truncateNonPartitionedTableSql, MAX_RETRY_TIME, 1000, true, "truncate", null); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.TABLE_TRUNCATE_ERROR, - String.format(" 清空 ODPS 目的表:%s 失败, 请联系 ODPS 管理员处理.", tab.getName()), e); + MESSAGE_SOURCE.message("odpsutil.7", tableName), e); } } public static void truncatePartition(Odps odps, Table table, String partition) { if (isPartitionExist(table, partition)) { + LOG.info("partition {} is already exist, truncate it to clean old data", partition); dropPart(odps, table, partition); } + LOG.info("begin to add partition {}", partition); addPart(odps, table, partition); } private static boolean isPartitionExist(Table table, String partition) { // check if exist partition 返回值不为 null List odpsParts = OdpsUtil.listOdpsPartitions(table); - int j = 0; for (; j < odpsParts.size(); j++) { if (odpsParts.get(j).replaceAll("'", "").equals(partition)) { + LOG.info("found a partiton {} equals to (ignore ' if contains) configured partiton {}", + odpsParts.get(j), partition); break; } } @@ -185,11 +206,14 @@ public class OdpsUtil { addPart.append("alter table ").append(table.getName()).append(" add IF NOT EXISTS partition(") .append(partSpec).append(");"); try { - runSqlTaskWithRetry(odps, addPart.toString(), MAX_RETRY_TIME, 1000, true); + Map hints = new HashMap(); + //开启ODPS SQL TYPE2.0类型 + hints.put("odps.sql.type.system.odps2", "true"); + LOG.info("add partition with sql: {}", addPart.toString()); + runSqlTaskWithRetry(odps, addPart.toString(), MAX_RETRY_TIME, 1000, true, "addPart", hints); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.ADD_PARTITION_FAILED, - String.format("添加 ODPS 目的表的分区失败. 错误发生在添加 ODPS 的项目:%s 的表:%s 的分区:%s. 请联系 ODPS 管理员处理.", - table.getProject(), table.getName(), partition), e); + MESSAGE_SOURCE.message("odpsutil.8", table.getProject(), table.getName(), partition), e); } } @@ -206,7 +230,7 @@ public class OdpsUtil { }, MAX_RETRY_TIME, 1000L, true); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.CREATE_MASTER_UPLOAD_FAIL, - "创建TunnelUpload失败. 请联系 ODPS 管理员处理.", e); + MESSAGE_SOURCE.message("odpsutil.9"), e); } } else { final PartitionSpec partitionSpec = new PartitionSpec(partition); @@ -219,7 +243,7 @@ public class OdpsUtil { }, MAX_RETRY_TIME, 1000L, true); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.CREATE_MASTER_UPLOAD_FAIL, - "创建TunnelUpload失败. 请联系 ODPS 管理员处理.", e); + MESSAGE_SOURCE.message("odpsutil.10"), e); } } } @@ -238,7 +262,7 @@ public class OdpsUtil { } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.GET_SLAVE_UPLOAD_FAIL, - "获取TunnelUpload失败. 请联系 ODPS 管理员处理.", e); + MESSAGE_SOURCE.message("odpsutil.11"), e); } } else { final PartitionSpec partitionSpec = new PartitionSpec(partition); @@ -252,7 +276,7 @@ public class OdpsUtil { } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.GET_SLAVE_UPLOAD_FAIL, - "获取TunnelUpload失败. 请联系 ODPS 管理员处理.", e); + MESSAGE_SOURCE.message("odpsutil.12"), e); } } } @@ -265,11 +289,14 @@ public class OdpsUtil { .append(" drop IF EXISTS partition(").append(partSpec) .append(");"); try { - runSqlTaskWithRetry(odps, dropPart.toString(), MAX_RETRY_TIME, 1000, true); + Map hints = new HashMap(); + //开启ODPS SQL TYPE2.0类型 + hints.put("odps.sql.type.system.odps2", "true"); + LOG.info("drop partition with sql: {}", dropPart.toString()); + runSqlTaskWithRetry(odps, dropPart.toString(), MAX_RETRY_TIME, 1000, true, "truncate", hints); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.ADD_PARTITION_FAILED, - String.format("Drop ODPS 目的表分区失败. 错误发生在项目:%s 的表:%s 的分区:%s .请联系 ODPS 管理员处理.", - table.getProject(), table.getName(), partition), e); + MESSAGE_SOURCE.message("odpsutil.13", table.getProject(), table.getName(), partition), e); } } @@ -281,7 +308,7 @@ public class OdpsUtil { String[] kv = part.split("="); if (kv.length != 2) { throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, - String.format("ODPS 目的表自身的 partition:%s 格式不对. 正确的格式形如: pt=1,ds=hangzhou", partition)); + MESSAGE_SOURCE.message("odpsutil.14", partition)); } partSpec.append(kv[0]).append("="); partSpec.append("'").append(kv[1].replace("'", "")).append("'"); @@ -292,6 +319,38 @@ public class OdpsUtil { return partSpec.toString(); } + public static Instance runSqlTaskWithRetry(final Odps odps, final String sql, String tag) { + try { + long beginTime = System.currentTimeMillis(); + + Instance instance = runSqlTaskWithRetry(odps, sql, MAX_RETRY_TIME, 1000, true, tag, null); + + long endIime = System.currentTimeMillis(); + LOG.info(String.format("exectue odps sql: %s finished, cost time : %s ms", + sql, (endIime - beginTime))); + return instance; + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_ODPS_EXCEPTION, + MESSAGE_SOURCE.message("odpsutil.16", sql), e); + } + } + + public static ResultSet getSqlTaskRecordsWithRetry(final Odps odps, final String sql, String tag) { + Instance instance = runSqlTaskWithRetry(odps, sql, tag); + if (instance == null) { + LOG.error("can not get odps instance from sql {}", sql); + throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_ODPS_EXCEPTION, + MESSAGE_SOURCE.message("odpsutil.16", sql)); + } + try { + return SQLTask.getResultSet(instance, instance.getTaskNames().iterator().next()); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_ODPS_EXCEPTION, + MESSAGE_SOURCE.message("odpsutil.16", sql), e); + } + } + + /** * 该方法只有在 sql 为幂等的才可以使用,且odps抛出异常时候才会进行重试 * @@ -299,12 +358,12 @@ public class OdpsUtil { * @param query 执行sql * @throws Exception */ - public static void runSqlTaskWithRetry(final Odps odps, final String query, int retryTimes, - long sleepTimeInMilliSecond, boolean exponential) throws Exception { + public static Instance runSqlTaskWithRetry(final Odps odps, final String query, int retryTimes, + long sleepTimeInMilliSecond, boolean exponential, String tag, + Map hints) throws Exception { for(int i = 0; i < retryTimes; i++) { try { - runSqlTask(odps, query); - return; + return runSqlTask(odps, query, tag, hints); } catch (DataXException e) { if (OdpsWriterErrorCode.RUN_SQL_ODPS_EXCEPTION.equals(e.getErrorCode())) { LOG.debug("Exception when calling callable", e); @@ -337,37 +396,86 @@ public class OdpsUtil { throw e; } } + return null; } - public static void runSqlTask(Odps odps, String query) { + public static Instance runSqlTask(Odps odps, String query, String tag, Map hints) { if (StringUtils.isBlank(query)) { - return; + return null; } - String taskName = "datax_odpswriter_trunacte_" + UUID.randomUUID().toString().replace('-', '_'); - + String taskName = String.format("datax_odpswriter_%s_%s", tag, UUID.randomUUID().toString().replace('-', '_')); LOG.info("Try to start sqlTask:[{}] to run odps sql:[\n{}\n] .", taskName, query); //todo:biz_id set (目前ddl先不做) Instance instance; Instance.TaskStatus status; try { - instance = SQLTask.run(odps, odps.getDefaultProject(), query, taskName, null, null); + instance = SQLTask.run(odps, odps.getDefaultProject(), query, taskName, hints, null); instance.waitForSuccess(); status = instance.getTaskStatus().get(taskName); if (!Instance.TaskStatus.Status.SUCCESS.equals(status.getStatus())) { throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_FAILED, - String.format("ODPS 目的表在运行 ODPS SQL失败, 返回值为:%s. 请联系 ODPS 管理员处理. SQL 内容为:[\n%s\n].", instance.getTaskResults().get(taskName), - query)); + MESSAGE_SOURCE.message("odpsutil.15", query)); } + return instance; } catch (DataXException e) { throw e; } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_ODPS_EXCEPTION, - String.format("ODPS 目的表在运行 ODPS SQL 时抛出异常, 请联系 ODPS 管理员处理. SQL 内容为:[\n%s\n].", query), e); + MESSAGE_SOURCE.message("odpsutil.16", query), e); } } + + public static String generateTaskName(String tag) { + return String.format("datax_odpswriter_%s_%s", tag, UUID.randomUUID().toString().replace('-', '_')); + } + + public static void checkBlockComplete(final TableTunnel.UploadSession masterUpload, final Long[] blocks) { + Long[] serverBlocks; + try { + serverBlocks = + RetryUtil.executeWithRetry(new Callable() { + @Override + public Long[] call() throws Exception { + return masterUpload.getBlockList(); + } + }, MAX_RETRY_TIME, 1000L, true); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.COMMIT_BLOCK_FAIL, + MESSAGE_SOURCE.message("odpsutil.17", masterUpload.getId()), e); + } + + HashMap serverBlockMap = new HashMap(); + for (Long blockId : serverBlocks) { + serverBlockMap.put(blockId, true); + } + + for (Long blockId : blocks) { + if (!serverBlockMap.containsKey(blockId)) { + throw DataXException.asDataXException(OdpsWriterErrorCode.COMMIT_BLOCK_FAIL, + "BlockId[" + blockId + "] upload failed!"); + } + } + + } + + public static void masterComplete(final TableTunnel.UploadSession masterUpload) { + try { + RetryUtil.executeWithRetry(new Callable() { + @Override + public Void call() throws Exception { + masterUpload.commit(); + return null; + } + }, MAX_RETRY_TIME, 1000L, true); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.COMMIT_BLOCK_FAIL, + MESSAGE_SOURCE.message("odpsutil.17", masterUpload.getId()), e); + } + } + public static void masterCompleteBlocks(final TableTunnel.UploadSession masterUpload, final Long[] blocks) { try { RetryUtil.executeWithRetry(new Callable() { @@ -379,30 +487,28 @@ public class OdpsUtil { }, MAX_RETRY_TIME, 1000L, true); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.COMMIT_BLOCK_FAIL, - String.format("ODPS 目的表在提交 block:[\n%s\n] 时失败, uploadId=[%s]. 请联系 ODPS 管理员处理.", StringUtils.join(blocks, ","), masterUpload.getId()), e); + MESSAGE_SOURCE.message("odpsutil.17", StringUtils.join(blocks, ","), masterUpload.getId()), e); } } public static void slaveWriteOneBlock(final TableTunnel.UploadSession slaveUpload, final ProtobufRecordPack protobufRecordPack, - final long blockId, final boolean isCompress) { + final long blockId, final Long timeoutInMs) { try { RetryUtil.executeWithRetry(new Callable() { @Override public Void call() throws Exception { - TunnelRecordWriter tunnelRecordWriter = (TunnelRecordWriter)slaveUpload.openRecordWriter(blockId, isCompress); - tunnelRecordWriter.write(protobufRecordPack); - tunnelRecordWriter.close(); + slaveUpload.writeBlock(blockId, protobufRecordPack, timeoutInMs); return null; } }, MAX_RETRY_TIME, 1000L, true); } catch (Exception e) { throw DataXException.asDataXException(OdpsWriterErrorCode.WRITER_RECORD_FAIL, - String.format("ODPS 目的表写 block:%s 失败, uploadId=[%s]. 请联系 ODPS 管理员处理.", blockId, slaveUpload.getId()), e); + MESSAGE_SOURCE.message("odpsutil.18", blockId, slaveUpload.getId()), e); } } - public static List parsePosition(List allColumnList, + public static List parsePosition(List allColumnList, List allPartColumnList, List userConfiguredColumns) { List retList = new ArrayList(); @@ -416,9 +522,20 @@ public class OdpsUtil { break; } } + + if (null != allPartColumnList) { + for (int i = 0, len = allPartColumnList.size(); i < len; i++) { + if (allPartColumnList.get(i).equalsIgnoreCase(col)) { + retList.add(-1); + hasColumn = true; + break; + } + } + } + if (!hasColumn) { throw DataXException.asDataXException(OdpsWriterErrorCode.COLUMN_NOT_EXIST, - String.format("ODPS 目的表的列配置错误. 由于您所配置的列:%s 不存在,会导致datax无法正常插入数据,请检查该列是否存在,如果存在请检查大小写等配置.", col)); + MESSAGE_SOURCE.message("odpsutil.19", col)); } } return retList; @@ -436,22 +553,81 @@ public class OdpsUtil { for(Column column: columns) { allColumns.add(column.getName()); type = column.getType(); - if (type == OdpsType.ARRAY || type == OdpsType.MAP) { - throw DataXException.asDataXException(OdpsWriterErrorCode.UNSUPPORTED_COLUMN_TYPE, - String.format("DataX 写入 ODPS 表不支持该字段类型:[%s]. 目前支持抽取的字段类型有:bigint, boolean, datetime, double, string. " + - "您可以选择不抽取 DataX 不支持的字段或者联系 ODPS 管理员寻求帮助.", - type)); - } } return allColumns; } - public static List getTableOriginalColumnTypeList(TableSchema schema) { - List tableOriginalColumnTypeList = new ArrayList(); + public static List getAllPartColumns(TableSchema schema) { + if (null == schema) { + throw new IllegalArgumentException("parameter schema can not be null."); + } + + List allPartColumns = new ArrayList<>(); + + List partCols = schema.getPartitionColumns(); + + for (Column column : partCols) { + allPartColumns.add(column.getName()); + } + + return allPartColumns; + } + + public static String getPartColValFromDataXRecord(com.alibaba.datax.common.element.Record dataxRecord, + List positions, List userConfiguredColumns, + Map dateTransFormMap) { + StringBuilder partition = new StringBuilder(); + for (int i = 0, len = dataxRecord.getColumnNumber(); i < len; i++) { + if (positions.get(i) == -1) { + if (partition.length() > 0) { + partition.append(","); + } + String partName = userConfiguredColumns.get(i); + //todo: 这里应该根据分区列的类型做转换,这里先直接toString转换了 + com.alibaba.datax.common.element.Column partitionCol = dataxRecord.getColumn(i); + String partVal = partitionCol.getRawData().toString(); + if (StringUtils.isBlank(partVal)) { + throw new DataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, String.format( + "value of column %s exit null value, it can not be used as partition column", partName)); + } + + // 如果分区列的值的格式是一个日期,并且用户设置列的转换规则 + DateTransForm dateTransForm = null; + if (null != dateTransFormMap) { + dateTransForm = dateTransFormMap.get(partName); + } + if (null != dateTransForm) { + try { + // 日期列 + if (partitionCol.getType().equals(com.alibaba.datax.common.element.Column.Type.DATE)) { + partVal = OdpsUtil.date2StringWithFormat(partitionCol.asDate(), dateTransForm.getToFormat()); + } + // String 列,需要先按照 fromFormat 转换为日期 + if (partitionCol.getType().equals(com.alibaba.datax.common.element.Column.Type.STRING)) { + partVal = OdpsUtil.date2StringWithFormat(partitionCol.asDate(dateTransForm.getFromFormat()), dateTransForm.getToFormat()); + } + } catch (DataXException e) { + LOG.warn("Parse {} with format {} error! Please check the column config and {} config. So user original value '{}'. Detail info: {}", + partVal, dateTransForm.toString(), Key.PARTITION_COL_MAPPING, partVal, e); + } + } + + partition.append(partName).append("=").append(partVal); + } + } + return partition.toString(); + } + + public static String date2StringWithFormat(Date date, String dateFormat) { + return DateFormatUtils.format(date, dateFormat, TimeZone.getTimeZone("GMT+8")); + } + + public static List getTableOriginalColumnTypeList(TableSchema schema) { + List tableOriginalColumnTypeList = new ArrayList(); List columns = schema.getColumns(); for (Column column : columns) { - tableOriginalColumnTypeList.add(column.getType()); + tableOriginalColumnTypeList.add(column.getTypeInfo()); } return tableOriginalColumnTypeList; @@ -465,8 +641,7 @@ public class OdpsUtil { if (isPartitionedTable) { //分区表 if (StringUtils.isBlank(partition)) { - throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, String.format("您没有配置分区信息,因为你配置的表是分区表:%s 如果需要进行 truncate 操作,必须指定需要清空的具体分区. 请修改分区配置,格式形如 pt=${bizdate} .", - table.getName())); + throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, MESSAGE_SOURCE.message("odpsutil.21", table.getName())); } else { LOG.info("Try to truncate partition=[{}] in table=[{}].", partition, table.getName()); OdpsUtil.truncatePartition(odps, table, partition); @@ -474,8 +649,7 @@ public class OdpsUtil { } else { //非分区表 if (StringUtils.isNotBlank(partition)) { - throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, String.format("分区信息配置错误,你的ODPS表是非分区表:%s 进行 truncate 操作时不需要指定具体分区值. 请检查您的分区配置,删除该配置项的值.", - table.getName())); + throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, MESSAGE_SOURCE.message("odpsutil.22", table.getName())); } else { LOG.info("Try to truncate table:[{}].", table.getName()); OdpsUtil.truncateNonPartitionedTable(odps, table); @@ -487,7 +661,7 @@ public class OdpsUtil { //分区表 if (StringUtils.isBlank(partition)) { throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, - String.format("您的目的表是分区表,写入分区表:%s 时必须指定具体分区值. 请修改您的分区配置信息,格式形如 格式形如 pt=${bizdate}.", table.getName())); + MESSAGE_SOURCE.message("odpsutil.23", table.getName())); } else { boolean isPartitionExists = OdpsUtil.isPartitionExist(table, partition); if (!isPartitionExists) { @@ -500,7 +674,7 @@ public class OdpsUtil { //非分区表 if (StringUtils.isNotBlank(partition)) { throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, - String.format("您的目的表是非分区表,写入非分区表:%s 时不需要指定具体分区值. 请删除分区配置信息", table.getName())); + MESSAGE_SOURCE.message("odpsutil.24", table.getName())); } } } @@ -523,14 +697,12 @@ public class OdpsUtil { if (isPartitionedTable) { //分区表 if (StringUtils.isBlank(partition)) { - throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, String.format("您没有配置分区信息,因为你配置的表是分区表:%s 如果需要进行 truncate 操作,必须指定需要清空的具体分区. 请修改分区配置,格式形如 pt=${bizdate} .", - table.getName())); + throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, MESSAGE_SOURCE.message("odpsutil.25", table.getName())); } } else { //非分区表 if (StringUtils.isNotBlank(partition)) { - throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, String.format("分区信息配置错误,你的ODPS表是非分区表:%s 进行 truncate 操作时不需要指定具体分区值. 请检查您的分区配置,删除该配置项的值.", - table.getName())); + throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, MESSAGE_SOURCE.message("odpsutil.26", table.getName())); } } } else { @@ -539,13 +711,13 @@ public class OdpsUtil { //分区表 if (StringUtils.isBlank(partition)) { throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, - String.format("您的目的表是分区表,写入分区表:%s 时必须指定具体分区值. 请修改您的分区配置信息,格式形如 格式形如 pt=${bizdate}.", table.getName())); + MESSAGE_SOURCE.message("odpsutil.27", table.getName())); } } else { //非分区表 if (StringUtils.isNotBlank(partition)) { throw DataXException.asDataXException(OdpsWriterErrorCode.PARTITION_ERROR, - String.format("您的目的表是非分区表,写入非分区表:%s 时不需要指定具体分区值. 请删除分区配置信息", table.getName())); + MESSAGE_SOURCE.message("odpsutil.28", table.getName())); } } } @@ -558,29 +730,286 @@ public class OdpsUtil { if(e.getMessage() != null) { if(e.getMessage().contains(OdpsExceptionMsg.ODPS_PROJECT_NOT_FOUNT)) { throw DataXException.asDataXException(OdpsWriterErrorCode.ODPS_PROJECT_NOT_FOUNT, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 [project] 是否正确.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.29", tableName), e); } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_TABLE_NOT_FOUNT)) { throw DataXException.asDataXException(OdpsWriterErrorCode.ODPS_TABLE_NOT_FOUNT, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 [table] 是否正确.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.30", tableName), e); } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_ID_NOT_FOUND)) { throw DataXException.asDataXException(OdpsWriterErrorCode.ODPS_ACCESS_KEY_ID_NOT_FOUND, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 [accessId] [accessKey]是否正确.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.31", tableName), e); } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_KEY_INVALID)) { throw DataXException.asDataXException(OdpsWriterErrorCode.ODPS_ACCESS_KEY_INVALID, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 [accessKey] 是否正确.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.32", tableName), e); } else if(e.getMessage().contains(OdpsExceptionMsg.ODPS_ACCESS_DENY)) { throw DataXException.asDataXException(OdpsWriterErrorCode.ODPS_ACCESS_DENY, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 [accessId] [accessKey] [project]是否匹配.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.33", tableName), e); } } throw DataXException.asDataXException(OdpsWriterErrorCode.ILLEGAL_VALUE, - String.format("加载 ODPS 目的表:%s 失败. " + - "请检查您配置的 ODPS 目的表的 project,table,accessId,accessKey,odpsServer等值.", tableName), e); + MESSAGE_SOURCE.message("odpsutil.34", tableName), e); + } + + /** + * count统计数据,自动创建统计表 + * @param tableName 统计表名字 + * @return + */ + public static String getCreateSummaryTableDDL(String tableName) { + return String.format("CREATE TABLE IF NOT EXISTS %s " + + "(src_table_name STRING, " + + "dest_table_name STRING, " + + "src_row_num BIGINT, " + + "src_query_time DATETIME, " + + "read_succeed_records BIGINT," + + "write_succeed_records BIGINT," + + "dest_row_num BIGINT, " + + "write_time DATETIME);", + tableName); + } + + /** + * count统计数据,获取count dml + * @param tableName + * @return + */ + public static String countTableSql(final String tableName, final String partition) { + if (StringUtils.isNotBlank(partition)) { + String[] partitions = partition.split("\\,"); + String p = String.join(" and ", partitions); + return String.format("SELECT COUNT(1) AS odps_num FROM %s WHERE %s;", tableName, p); + } else { + return String.format("SELECT COUNT(1) AS odps_num FROM %s;", tableName); + } + } + + /** + * count统计数据 dml 对应字段,用于查询 + * @return + */ + public static String countName() { + return "odps_num"; + } + + /** + * count统计数据dml + * @param summaryTableName 统计数据写入表 + * @param sourceTableName datax reader 表 + * @param destTableName datax writer 表 + * @param srcCount reader表行数 + * @param queryTime reader表查询时间 + * @param destCount writer 表行书 + * @return insert dml sql + */ + public static String getInsertSummaryTableSql(String summaryTableName, String sourceTableName, String destTableName, + Long srcCount, String queryTime, Number readSucceedRecords, + Number writeSucceedRecords, Long destCount) { + final String sql = "INSERT INTO %s (src_table_name,dest_table_name," + + " src_row_num, src_query_time, read_succeed_records, write_succeed_records, dest_row_num, write_time) VALUES ( %s );"; + + String insertData = String.format("'%s', '%s', %s, %s, %s, %s, %s, getdate()", + sourceTableName, destTableName, srcCount, queryTime, readSucceedRecords, writeSucceedRecords, destCount ); + return String.format(sql, summaryTableName, insertData); + } + + public static void createTable(Odps odps, String tableName, final String sql) { + try { + LOG.info("create table with sql: {}", sql); + runSqlTaskWithRetry(odps, sql, MAX_RETRY_TIME, 1000, true, "create", null); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_FAILED, + MESSAGE_SOURCE.message("odpsutil.7", tableName), e); + } + } + + public static void createTableFromTable(Odps odps, String resourceTable, String targetTable) { + TableSchema schema = odps.tables().get(resourceTable).getSchema(); + StringBuilder builder = new StringBuilder(); + Iterator iterator = schema.getColumns().iterator(); + while (iterator.hasNext()) { + Column c = iterator.next(); + builder.append(String.format(" %s %s ", c.getName(), c.getTypeInfo().getTypeName())); + if (iterator.hasNext()) { + builder.append(","); + } + } + String createTableSql = String.format("CREATE TABLE IF NOT EXISTS %s (%s);", targetTable, builder.toString()); + + try { + LOG.info("create table with sql: {}", createTableSql); + runSqlTaskWithRetry(odps, createTableSql, MAX_RETRY_TIME, 1000, true, "create", null); + } catch (Exception e) { + throw DataXException.asDataXException(OdpsWriterErrorCode.RUN_SQL_FAILED, + MESSAGE_SOURCE.message("odpsutil.7", targetTable), e); + } + } + + public static Object truncateSingleFieldData(OdpsType type, Object data, int limit, Boolean enableOverLengthOutput) { + if (data == null) { + return data; + } + if (OdpsType.STRING.equals(type)) { + if(enableOverLengthOutput) { + LOG.warn( + "InvalidData: The string's length is more than " + limit + " bytes. content:" + data); + } + LOG.info("before truncate string length:" + ((String) data).length()); + //确保特殊字符场景下的截断 + limit -= Constant.UTF8_ENCODED_CHAR_MAX_SIZE; + data = cutString((String) data, limit); + LOG.info("after truncate string length:" + ((String) data).length()); + } else if (OdpsType.BINARY.equals(type)) { + byte[] oriDataBytes = ((Binary) data).data(); + if(oriDataBytes == null){ + return data; + } + int originLength = oriDataBytes.length; + if (originLength <= limit) { + return data; + } + if(enableOverLengthOutput) { + LOG.warn("InvalidData: The binary's length is more than " + limit + " bytes. content:" + byteArrToHex(oriDataBytes)); + } + LOG.info("before truncate binary length:" + oriDataBytes.length); + byte[] newData = new byte[limit]; + System.arraycopy(oriDataBytes, 0, newData, 0, limit); + LOG.info("after truncate binary length:" + newData.length); + return new Binary(newData); + } + return data; + } + public static Object setNull(OdpsType type,Object data, int limit, Boolean enableOverLengthOutput) { + if (data == null ) { + return null; + } + if (OdpsType.STRING.equals(type)) { + if(enableOverLengthOutput) { + LOG.warn( + "InvalidData: The string's length is more than " + limit + " bytes. content:" + data); + } + return null; + } else if (OdpsType.BINARY.equals(type)) { + byte[] oriDataBytes = ((Binary) data).data(); + int originLength = oriDataBytes.length; + if (originLength > limit) { + if(enableOverLengthOutput) { + LOG.warn("InvalidData: The binary's length is more than " + limit + " bytes. content:" + new String(oriDataBytes)); + } + return null; + } + } + return data; + } + public static boolean validateStringLength(String value, long limit) { + try { + if (value.length() * Constant.UTF8_ENCODED_CHAR_MAX_SIZE > limit + && value.getBytes("utf-8").length > limit) { + return false; + } + } catch (Exception e) { + e.printStackTrace(); + return true; + } + return true; + } + public static String cutString(String sourceString, int cutBytes) { + if (sourceString == null || "".equals(sourceString.trim()) || cutBytes < 1) { + return ""; + } + int lastIndex = 0; + boolean stopFlag = false; + int totalBytes = 0; + for (int i = 0; i < sourceString.length(); i++) { + String s = Integer.toBinaryString(sourceString.charAt(i)); + if (s.length() > 8) { + totalBytes += 3; + } else { + totalBytes += 1; + } + if (!stopFlag) { + if (totalBytes == cutBytes) { + lastIndex = i; + stopFlag = true; + } else if (totalBytes > cutBytes) { + lastIndex = i - 1; + stopFlag = true; + } + } + } + if (!stopFlag) { + return sourceString; + } else { + return sourceString.substring(0, lastIndex + 1); + } + } + public static boolean dataOverLength(OdpsType type, Object data, int limit){ + if (data == null ) { + return false; + } + if (OdpsType.STRING.equals(type)) { + if(!OdpsUtil.validateStringLength((String)data, limit)){ + return true; + } + }else if (OdpsType.BINARY.equals(type)){ + byte[] oriDataBytes = ((Binary) data).data(); + if(oriDataBytes == null){ + return false; + } + int originLength = oriDataBytes.length; + if (originLength > limit) { + return true; + } + } + return false; + } + public static Object processOverLengthData(Object data, OdpsType type, String overLengthRule, int maxFieldLength, Boolean enableOverLengthOutput) { + try{ + //超长数据检查 + if(OdpsWriter.maxOutputOverLengthRecord != null && OdpsWriter.globalTotalTruncatedRecordNumber.get() >= OdpsWriter.maxOutputOverLengthRecord){ + enableOverLengthOutput = false; + } + if ("truncate".equalsIgnoreCase(overLengthRule)) { + if (OdpsUtil.dataOverLength(type, data, OdpsWriter.maxOdpsFieldLength)) { + Object newData = OdpsUtil.truncateSingleFieldData(type, data, maxFieldLength, enableOverLengthOutput); + OdpsWriter.globalTotalTruncatedRecordNumber.incrementAndGet(); + return newData; + } + } else if ("setNull".equalsIgnoreCase(overLengthRule)) { + if (OdpsUtil.dataOverLength(type, data, OdpsWriter.maxOdpsFieldLength)) { + OdpsWriter.globalTotalTruncatedRecordNumber.incrementAndGet(); + return OdpsUtil.setNull(type, data, maxFieldLength, enableOverLengthOutput); + } + } + }catch (Throwable e){ + LOG.warn("truncate overLength data failed!", e); + } + return data; + } + private static final char HEX_CHAR_ARR[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + /** + * 字节数组转十六进制字符串 + * @param btArr + * @return + */ + public static String byteArrToHex(byte[] btArr) { + char strArr[] = new char[btArr.length * 2]; + int i = 0; + for (byte bt : btArr) { + strArr[i++] = HEX_CHAR_ARR[bt>>>4 & 0xf]; + strArr[i++] = HEX_CHAR_ARR[bt & 0xf]; + } + return new String(strArr); + } + public static byte[] hexToByteArr(String hexStr) { + char[] charArr = hexStr.toCharArray(); + byte btArr[] = new byte[charArr.length / 2]; + int index = 0; + for (int i = 0; i < charArr.length; i++) { + int highBit = hexStr.indexOf(charArr[i]); + int lowBit = hexStr.indexOf(charArr[++i]); + btArr[index] = (byte) (highBit << 4 | lowBit); + index++; + } + return btArr; } } diff --git a/odpswriter/src/main/libs/bcprov-jdk15on-1.52.jar b/odpswriter/src/main/libs/bcprov-jdk15on-1.52.jar deleted file mode 100644 index 6c54dd901cc37c7e2bcb1c42abd64bc2c56c7460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2902942 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'O9 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

@YbpC?;9 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

01Ac`DSIcTq`|AJU|izf259 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 OYqMc}FAmWv%Odf)kE# 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

lEd4 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�V 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

jXCn_<&-a;M=O6^dMLv_ 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
7cBW>u~S5&PaDq?#{>oTacnbz?_X0OmUQu{%wy5 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

EGe<;=H`++IUR*CA4*@9j*d0-DU|Z}+!s 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 z zkeO+cNIOH4T{G<4<}SCuk7HUvtS)C1qbDTY$Kl{#_fJQhmtRRC0G>Lqsvm=o4csyriNaeoiq{nFL94g|s4>)kgUla|dF1SxekDVOiDq zoL2dK#G|ejhtt*j#jd9F&aSHS95yy>`ncfa849A;bN91=34wRd>iN>26()Tzz%Om5 z9^@80mo-aAlWM%{b#vhDVO0ZBp-NosS$8|#Uj#_E=f9Dl+o1d8`=(n2 zrn(`#AIv4vmp%Go7+WY#~)FDBAA?2;p)yP=`t}*w&i;9i3OPBjg z?kPjPTn@}D^xCGy?72`9LFF}y@>BR?AaVx2an5;c=XC_`dXmWqw|!xH1sx&#szN5W zuNwB+EAg9a1-KP^5ZyHMGF}H}rt(c~mF|+|k~3v88tt5?@0t8K#EZ&H$KV$0ZGLF` zNC6$&=G?JsFRJANDwkub{;)Z4g+bh(pw4xV(56&rs4PoE3K}@K{E>XF+8J70~4FlXV6v5f-jXDq+EhrOp5jm>)`UiZo5dR<;2jH zobuh7%Bi(Q_HBM5(4*R5_H2@{>bdCwBzLHo0h%O47)@1|FmHT_fxK zG^fPV-v~w2=+lbDsKWjL-8GLQ7eG9QWRuG;faio;$JiUJDmrixP1=4PR z4XzC~diS8B!55;V$WBqLnt+yw$S80avE0`fD^ud{T#5r~ZXI=*|EGez;;ozoQ!Ke~yy)JngNZ2)gF{0j^Y z->s)sX%;sVNYskg@)Cm@<|TUcYpGa(U6;`h8sfxn3>LU1QCjz^>>MR#9!`K50IKyh ztrDtudjF=b%uRzB$i>3It8ZO5l8o@`A8$wh}71Mhy81;1yrR$I= z*$b{`J84zbO}+dv3PMxzNOPl%G_L{~_CT3wDNQgfFotm4CufjFKELj$qP#jm|(PkV`9Y&1Px9|UW_9dPpvYR#F@ffL9g(=F}d5R*uH1B1hvgP?*+s&lY z)2UguOF*ziBoO5 z6w3=OfMkTzNwo=S zk;T^V(0pmYkqgXsK>?k0@oqougN7FDDESUBPJa!Vvj?Hw5^Xeb3lNen<#Zc#aL6f6#*_e9jGw zdGMorfP#*?4AXt8`^fYfZWB$!b!f!4XeUV8?Gb{jv~gmxRf zJ6Q=H_@F_Ts+2FVln+w&uNaH3T0Q8`e2cF^+XqdavfI;;+f$CzA!hk*c!vJo+Mv3Y7S4)?1=RaIwnP1h!X_$PK~`QYt1ylwR!^$wgU~u zXkg=a?du}T4f9E&Q?x{E-4F{F&j9J5<}S~+ktSUd)iIDC3H0t+tu$Gp+#%zC>}dV= z9_l-KK^f`~Bmxj1;o&s1p2S~%^m&GM;&^wmG6Jdk`9s%P73$6v>(on^?n{@xV{841 zg2b>2Qe>KDV=Xf4>V$iZkaf$>U+}di-a?MDC^}r3S$k?Ds2?m>&#{!OS}rzQVC@SjS!m4{0tiD@00Zk zOz)De+DnHP*%Lhv#<}C1;H87j0RbBXv%5G6>KKi)qmK$t> z0jWIV64XJ(7s>hAfw5#?{>N}g>RB*r!|XINs@zY@+(3|pgRnGju%1s8(bH$hgHRE_ z=Oe3awzTGX&h9WqYoPar+5MW$0F?UK=!sIU!zUrNlg>;KgM!xl2AlCkV`s{7J=o=B zTPtQhL&W<&hz zAfNC|A*z*&AyzR`6;E-C@yrW3N)tj+XCdnQU20eIUgs)8=F$n`={|MPz-wP>Y^dVP zDrSLI=OG_iCP2b)mi}4Mtu=jNC-XBZwspz=E8>OR_TiTC*^c{hu%}1Z@h9Ad&bey^ zN*-43kka9<&bdp%{dTHdn@ZWJmYlOPtkPjIA+$utq`YOFn_!oV8>N8^uC1rLixkXy z{*GT)A6T6FwO0leR>MprG&=gR40=_tnW+rYM|AYD3_cH8=C>3Fp*^vJUuVEKBMo8L zE6Z9X+gUm^WkN|j&o`8fW?1n?>S_y_tX7vQp`rRU%|pIAQCSi*kXc|v%T6{!UGyCD zFu#KdvXiA0$+Si*H8heb`%Dm@&y!k)MwOL7+>Vs8z_IBu5B{cz&K-WngRZvtVWZNq zm$g71R+5x$eG(@|=Yw5If3qrH$9{*HzKiJNM)a=0vdgrUkMRp8VL>qa%q+D$f}fNP z8Ntt>qJyoC1xXR;r@DL+hJpHZD;DdjmPmtP&UIQ+i#9Lz=iVaE<04NYi?aLN4I>!L zJTMH~_lm=$9Wy?m=2gxI%bBbrDS7EiV4A?Pc#jAaz{hp+tYD*lXtzVF#W%~GbH+-6Xbtz+W)Py^wpo0 z&7<|FaCjeU_~*|oa_Exb-#@7(lKe8{gaZZI?V0aWA}N>;XvJIV(5c%r)ht-s^=K%~ zS$>ePF(<8qTZn8r)@kdwf4p04xjB8>=yEyhY%q1UV66+^e`;xXIS_jLGbz9Ew72Z? zmqx@nAImKKa)dP%qYK2DN^m!LHNyWJPm|Z1ca{yJ`J-n^fqjVL;5zRapmx5hwMqS# zzK0E+A}{ABa8KVmbfW+nk=rjvfKP|F z^F4nl>uddw+12^!&cdqFQag;{6TP4ND{hVA*5o9l2~+$vCV8rtJ~c(x0@9^WZLCK-+vK{|_>X79uJPcm<20E~jz?C0ZiPT}lPH zAG#ts)`1y6!b+b*fl@!e-#9_jPVQQ2sL{}~mecy-*!?c8fIzlSEug@SJ0I<>@|&h< z_!Gm)N8TC{hG|x2;WqEi1Znzsp;?OwYW^gb9eUjQVE1~Kx;%wG{G=P%-`-?UMU3cd zSgiJAu6*+(xEj-rNvTRNPfcHsI)Ady@82U!3||?NvY)6AQ}AQoNqxlCs-xyQl=(fu z)*D#Ri%l3lRgT`XFKsJLVa55|fo0Bqx)+y#5wEX72bs=q+fx+ziNho@P#z-5RlRZo z?HZ&L)*ko)3|T7@?0;-~hG#(IYF+^#TC#uz)~%y0F|_IJ|=rLs0Vk8PM<-nm2 zC+?i(@bk4c?M7eX22i#l1VTH;w48)oWG7y%eY?}v$e8(XTIH`T_NH;m-xJIeAGP@> zhZ%MY4f$JGzKx=k!Ky1VLoVH#2(E0DcQjgA8zh$=d#6ncs6;LmE^7@T+Fw``S~Pz! zh0a}kAH-AHxtxH@QD(&-O6p{nf*^)8ig3)KWc6%$I;I6Xt8d&8*VmV4h*hTlD&-3 zn0^-^6{F$ZQiP95-{PX8IaKC7VpEDZ@`4!E*Xl)MLN*&TTkZK zTHI@}OYd|4RYQ1TlWR%u%q)GBNKZgW`df4AJb%jmR-x6DOD;?x11@wZmZQB4(E93E zi<>?BMYb8Yl1pLO8WS(q-sL1m)93vsHqT8D|n!bnRqvnySq*}#5+8!nnVv!_fVk4zq|M%!6Sn@SS z5^^JHQB6^CQMFzI^uI%w(9sj$d2p+0F9|#t{VdV3B{)vzp*2`hx-~4a?5?-eQ^4%* zuG~PL)W(wO4Vvt#Ut(w+HiX(fSB@noN(MbuAyw%!yLe++b*E)UV{W%A7B>3sqAYKJ zM;qWYBn3sLx;%@2bT{?d2eIGu#X$9dj#bFZJ@H|TKO!#=%|J;Yf%?mObAb)wQP8AC z=g>;3MUeu4C@K;?6Sl4rPQ-s(+;s7?)}{1pQsoMfv8>{{t7syZs$ul1%Y5GM+(?GhvTc@0ff${A&OWSK7B}Kztscv$lpfG#8 zSz28%iY6}sfgU|heSd|!Gs=phAfH}uAgt*98k^>2M{`rO$*zx{Z}|wTNlU!%c2(#o2K-0U+(shgX;1lFj$ zho>3+xji#$0aHMg>f6U-mA>T{GreRQ)*g!5o&5R}>YYW>wBB@|kukyrqPeu*z_X*y zpuJ@L)l!NX+6KAQ@|2WfS+l^an}<=aH-9^Z;rrVWtdWe^w3zyrVi5MzUiLr@QBEPz zp&3IWNT|%`-UG|m@Cjt!-$5C`h?Fc*Y1dT!!5h^h* zF#sm?dwQ_RQmht&J9A~PE%YK=Bde{+1G^YtpPD<`fz}hpfvybPg6Vk?8<+(oWZxp4 z?R*bk>Z&q?+E8`G2uj=j5IVWVhp=)X0DXMv2i?NVz731Oxg9q4l(qK60DaGd!!pBK7H**VM4ydl;-wc$)_dBfR6jmU+I#GgF)%Jli?xf|+Kj)ald3NT zY1PzM#@1+wc4t)7s5RRN4Lr{pi;(e7Y;ABf-g)O`QLDtjmpnkp89GmV`gO*mWGP^TNMV%G>0zGfHca(O5obB-;zuFd126n zD7}G?rX7r_!`!2N78$#hOTQe+!1733Y>mve)qQAA&|v4#HrbAMacM0ufGJlZBK!?M z_YYoO_6yi1JMfsDPzpMB>(~>3GB#MM1Vz$?Xb2++5=y4O5i~=wMs@L?(itK02Jr-~ zK!3)}coWXv%%6rSsQG@U?V-JPR$Yw)sA$j4-{wHW0erB3l9CW=d6MiGw0|k=eM5L4 z0zG=D&hRcB3VnAF$-I5lj0mGNot=WQsE?=c9_v;Gf~@hop6yRMw>(yip};bxbi_6G z^wdL}r{eeJefMSQYL+*72%EQqY7HqxR}bkY2lIlxg zGL{|T6pTKy_!bYetEZ0bdMIfE4El59&h-!e_2dQ-U(0tts1EC;%9dbueNVVswB#KV z0mX!J-CWB=7=Z(*>RYpO`@QzH2dyoe+*M|HvTV+bh# zRq|Z#40tzvxcbrj6R<$I;1!J7w8m~Ck`Jt0UXRC`1oE?SyJYbn4`)lvvW%dDHe;vWY>n5Y_R-QRQiJ0;#l7BO7O)iDjt4Z8x41`8$)c-32Fn`5n(X zCWhRi&(9;;7BNXf_}@zFruJ|!?sEt0%&k7TWLm`T)OA_YFraks#9}|<>dgtPoVd1U z(_EUpoP=o7aUw7gPJ<&5u&((JX2Q=9PIf=tMg#4R>qlM2_9CsN%o8Ht)hFwii0;W^;mtxCPRR@x?+yBNbG_AllTq?0 z`JBH*SxPARW&7I(3FyR&Q#q4jrn2=hr7WGlhKqAcXKrYKOkOX%R*=VKS-|Tah zGk#(&OzFe2=bd&%Res4eGZ1N6--u3Yyq*#M--uejTj#E^3C+$O&p`VbC7&i2xwUC!1Nkt_ z{2zqNss;>Y!*&%Fv=rz+`+>{-EtCu;;@pLof*m&2x^j=^NG^pRmey@)EP)_oVrm= zLA!Nma|@l@RyF^NZ~%I2s7t8Qg+_}@SSaY=lIO7-EPv^Jp8kMj=70Y~bhJYV;`0dw z;`PaZ*cZnk!&#Rd5;H*xd^(odY@k6Kt8?sA>iYAKMCD46STY#Yzy3=6x4BNj|2gZH zkx&)0aN6g_ma6U(t4lU!sMF4{S2 z`Ne8;F|!vbq+?aWCk(o%mslWGd7}pK)NuIQ@m3_%WKVt254E}DQH^5I_shBWl=`=<_Po(S)XZzNS8LF!7y%-owdTFjhwH8HyZMpzVG_3VM#x!z97g*Q z?AtXZ!2QT;Bz|tv)JPmEa<-K-(|8%k$ncZLRt&QWV^t|w$bnyeIU*N(3rs>!$sI}m zroaWP70kk#+Re1dxl}dzMCL3k&@}7hIh~VT#VPA?P4etp+TG)6Om4LZ8a*N13t`4m z@Y5IQ59)m~{rRa1K=lCsx3Xcx2Fq*yeaxc~)W5rN^Pd`(-^B?39YPXf@9TfTNLdd= z#)2tuX>+34-R-vCbQtt#sDv5J7^v_Aut;UpGid7#By%qzS3aD)`q#kZBqs^+E8~w; z2b2eEx@Ug=UcMh|gAl~t2KEg?^EYW#@8XS^7HQtnHqGkELh4%jiq9JDCL}5%w3D^; z6|G}TjFS1iyN#C+mNRK7Opv>6@lWRvCTfA`s;L#xNJ2jh77#~jiDpWY6RwH2ka#jcSd+2Rs_!%_NQc-U@y` zr?^)n8$E~h7PFggUgrBG4ELd)O}RHNWy0D++dTezka08{B?2aI2dFmlcx5GP>8TftRFi3Zse{H3(lz zwcT*qXQ|#oX6XK|x6nFvkNMpiPQFKLaU&Teo65PzE z6SqP}H~wQ7S43bJ&(TQp9vS=7q-Z9IqH2moXs4Ta$tk!~pnQFesV__u`Mwx*ag+Q< z_yUS#SqWQ;HYL-E4Hv0sUY42WIg4^(H=xQ!=Hx-j?0$W-D7_>-pIeLtBtkQxGNvq! zc>sqSvzR}aKHctyK?Oxkzkz7S8P17cD`Vr|nYWK)f=?0DL z@S6YiES5v=n`i6cc4F8lVYPVKwso)#12f4oNiIIj1AQ> zq*wp!k@?KUq)3DSJ9{ahFQy#fyuB=Jh-It)5htqMWX>J5hHElB?Iq=q*2*_<<ss2U9pN3}lNUg+=6D!)T~26t2KzULsE!A#N8d4o{4X^W=3j8{Z&O2~zvrs| z*Gu7j<=||=WbEK(Z{lTQTG4g^nb*V zn5fvlx`)cC{VX%4z{bFsXp1|MZ$K)t+2@NAgCQq`O&i{rzc5^=#x@ zC(lp*5(Vg}zr;wY5$9pRa0%20gsTU;k1O}bEt3X+*%~DoHLI+fr3X}-t^k2n<%sMf2054 zo~dIknBK5bJQT9@p<1D0v@0@B8KIYn@tpt7Zyn2Ormt{-Gs3tj3?u2fIrPPZ zC1mp^>xJC&{CN9Yfq|gQa2P9+8$R$dH5?&J>gkEL*mLFiCi)L^eAqX1FgwpezHA74 zVUMs`IZ80X37TBh`dgEIqaTFG)m=DDao%yvdCVz$C;eax|9}UJn?Dv2A39Waujxmh zYSWyZLsfgR5U+6oy8V2{kLvr%ogIVb3y{yk`XBX*IJ1(ZR(YM3AtL?LOaax4>>D1#holz_s(lTlZ-?3Y3JA&77Yc-`vJ|uX<9#t z%%531{;{w;3!q~B6h$F6e)1dYm23`r-+y3?I=(RQ@Ev1n{~s_WE}?2>`Y+9C&VOO7 zSG2``=PAn`Y6ad1`CBj!ag~)Mov>&HyOmIkOPW`s48TIn51;UxK|**R)P)ipUm?T< zhurw+LH7yYfbZV_&*Kr>SL8;VlB_C%(B)EEI_BxgnEtDXnV@91K?DrR&`~Z-mFqJb5@2pCI~ke;Z3IVv37o{=9cyHa zUwW@yIOcAc+|#$$m$?5Mx!}kQ89;d;gb+0>+2VaayOYPTxqt6iMurbQDd$9QN~p7h z=KR@L%*Q>~jw|47*iA4n)ciW-*iT5nbe40pLdRPdBI~wU#jD&paC%O3F-gi3%VX6wu4Q;&Sm9e37m#{I4jfA_3UyXNzA?|8!c zw|G+if6}x5iKqXuZCPW8U<%AGD72T@WiFggE>+0TBLSdUNZGUcLTST4ZhAGurC z)n^trQVckYKIoP17yc7nNzX{aso}s+9SX7(%sk>6!DJ%K_`_Ij8$e z=1U`F$JFcz%>~Q9e+#z^5Q^Oz+$j9u+ZG((3FV!MklX2t>@XbTd{kwT6_*huM!G z%#iOAy%wjasefQIM5*R({k@eLbWE7)2nN>&0bnK8E^8xo2xU)g=7ZU6 zmgJJvKBYr(_ECRD?H>#yt#au1%-$9QniS^*2&NxSSK#_z&{FT%)(DJJ#>`kpft*s* zFL!5gwF(=!esqm4OyD3SR5n{oY*w|d=g5ojslxgGN~24vzriLLfPs7V4mQ1i3pT<3 z3$XojL+pQ_Mw4{l_13L(H z`l7?XvNui_Or&bubYxZ&5}FjS7ecT=N-g-HeOtR0_jNymb-(wc%Bk1JdBcrNs%?^a z_vOy!Ze7<@~wt5zN<9h#uqGX)g>mXPaXjVwUdGNpB~kt<$z3Hm}~H^R_?s zM@G4}&mJV(qB9|-x(~I&oes9Ng{6LV;=a1yOZ;p!dw0-tKRY%$2rN&ErL)LB4Zk|3 z*D<;baJOX75UI{h8|RkXk&xM&dP8SJJw3rleformdTo1svAsR@eKP#X@`$gXxKT!+ zuym%YwOVSnORkrz$^(Owgrt;AwNJ53&Fj z2ak=FmvkW;dwNo!bj#0Xh8tIHyq08SDhS%TX}wRTJRN@TjXc=1d^O86hZ&NgWSkg9 zCa;l+Ku?ts#^ERG#hgo#$(qrG;Y~kW?TEwb&A4;&IfR%^1n48l_X9dw{Cl3a7|~*o znL#LeqUb95B@2TfAr3#$bP}-qH5X#fjWs*iq-kKy&nFXNL$*@;)skH7ZiRXQKoe`e z12mb5wWTK=#>o)38EJWJkff(Iu?5Q&v+-(mDccv{N~h9V(<;?9HmA%4?^u)*7b42o zncGzkiCP&JF0070W#bG>QX;6>1>1n&qpXAi7D%lH51^YYJ%WOuV zBCiEo1H?hOoZhSf&XngOAZ|g{ZW*e!Zq)c8Uo`WrC;p^S(t7hb_m|k{HrXhZ6`Iaa zS1E3LbV>0{K`F*6-QDY6?Fz6h&5+oEUoymmcVz-cGq6s2^x3!POgEUU3iKtB^XW8Y zfzEqJPMi;88fsV#QYmuE@V&T{Qbv6w{8QP2%z*FXCj+|U{nL+~H5ppDVuly(7>==P zl$()H2G~6LuT#gQ)`pJa2U24_i=bq7+xr~pQS)dVicuEaGiCvDDl0B6>^ssZ^~BpS z6!AtVG{5d!Zp|g`leyx?dyVh&P&cyEs-;cg_VXm`B%tYps{LY(1f>nTp!|B!xIs?p z@sAT2U19!mGs=%D)wiE)b%aS3Z3S7%FxFCr(&MC7eOz2-I<|IIa~V0wN@Aw(KT54z z&?%(^iVw<-mMEguVfty1A38yHC-J=_cxJ8$4&^L%LDhmu)E(f%j8vJiZeKX3=q_y) z5{B{JgTv}Y0DrZiS`R!l6`(_=Ckw!zzr}!{Kr@9IO%qNXPD?y8i!cC?qh`j;R=y|- zOb%=ej1H`PpF}!A!(C%2+cS%>QL$x*uu;85fUr@%rH8OlwIzVC@ng#e)3+w@p2o8~ z5S9Ajd*He1#S4PJa1ZKCl!N8;qA98XAT-rC1x?)sI1i_IQ#j)he1@Za2auX;|DmE2 z(@~=&c=!3sf@&3Mcv}OyTS_DO)&5;RB5^{weXGSM~Z&%*?`ew!1$_C6JrIxji+(&DvaI6R_Bj)C_9vDi2MNa1jILVjPF5Z(Ttm?6&%Z&<|y)e2E5gJY51oekh3~c}|QZGO8uqRH*}WS3;=$<@@3M z_4=KjLnA-?C)IWLk8Wz94V;&82W}p83K?F6bv%;+f*wo&{=Pc>aS%n#xx9*{P$84V zZY3w2fZ>L2l}pLzrbxl(m`JJ17Fxo-AM}6DfzMDu0hM5mXN;f#^9v@V*OZ=amIn`* zx1KE_;4^m6oB0I+7b6@j6jhKm%qYlG2t?M-(0s2Y7LePR!g&~{w;r) z4_wvEtAJ_90JeBLo&l!LS}X0!S~^;c{cayG*OhT6-eRBZJ0H@;##?KpX=c4>cLKS# zI%O3)v!U)W$IoV<+(A&canU3?F)i~#l|pSNCKX2SNPkF2)po0gA4!-u z)tJp8kGD?T&%W|aJ2c~-b1qr3JGM`*1WGZaZzdZE-4XyL<+a>9bRHQBy)`>yIzPH? zG<}C|P0wh4lBzxol#@}==91r^MmxOVdrc?4wX-kc-|>OqXxXnUFNJhqr$=^_HgKqP zMoomWlP4F}hO*r7EQ4LU1-y8ub#zbH7LgYG6=fI*RUdLAa9o<7=K-6T*RLWKu}!AN zhuNpC#-;UZlV-g8+(O^4#2gc=+1lV7C|+!VdUPlqtiHQOoFZ;08JeSQoc(sne1#Ep zdC2tF4cLWNFKP>5gf^+cLBB%;Il?9zuSuPZzbC!nYUzui@By{weF}OeLQCNl)!jdebnP}V*PC4MOg^dqv?YYxj{ zicsPUwj{K!Sr0hfpbTkBBBCllqgGxk&*uh@prAZ6wHgUwMRu2@Rku>C%U28p6R|;| zd`%>Oq=@)x+Ts&LknfhZp4G##KxHgEW;!s2uLn!-;L1QN4VtdZF`Dg$+9Y@J%0XM3 zH3wa>->We=qtchb&ZVrJY{7n}x`A78$KkMjWyW-43}ZvbZ+-o9L2k!sbuh$$7EG(g z_4}*@=tF-io2K>|QcWYjmS;x4ADS?Rm)GouW+Ixq zb}Rd#F?9iswu^KcnSwfP{QOGXvb(5DvID|G0Q9&4!CJXTo zmuYu!u~yidjYP7ILfK$7%*=wT5vKO|{$G=iESNTvkIu7ifajjz5LmPox>YcrKJ5_x zRmVl-zkfLd#NqLo*c%yH8Cg35GG~YcMgMk7%#Y%e=%GUo+OTxevT)*v%m9H)O~i9e zg*GmgT(zRRM6ZdAnJyqM4}3362ZMV54a z3zIheZAHBDTwFHN7)IJkWnJlN?<=|Ye06kAnf&%NlTf?^0#;7AW8cbV1X+BV7caf! zhi(XR2$6PDtFi@yW}H-loKf5^(GxH;?`^d#bj=4dTjV~CJB=oq7Z|fTQ4T5>3dg=g z*r99nBJ<*fobv$zLkVj9@Lf7}JrBk&Ajc^)V!%bPGdNPS~LzsEZ1PvWqbriN_^eTDZol{O#PR#YSAYTrfYp-7ZlI z7X}SMebLO2RnUh_5X}Qx+cIG{s5RNlv5@yK@tr^f+hlJlfS z1q9CGw1(MzLTA2xW^xaVNALmZw+cAGg<9|c1;+nU1^NFC6@GW46h!&xB?N{4WI}#K z8VJylLNV0+BHq^eJU!cI-mVhC<#A3GiqE9!Cf8W~#397k6Zt(N-% zubcE?<+nR_Cqp(x9;1p~&rWV3n1fKzZgOuM1kG0|kJELT;xYA`6c0^?Jqf>827Q%A zF4@n_@k)hBS+(%14yqGdj%07qhxTG>@UUQ-Vq3E3lO%B7=9X}vd?(&Og$`rYmFD=y zUDfanQFv@a)W;LnH%|UJX6=J@?v}l#nQk;zCz2T&n!~9VH`k36iTb^9mu<~FOxg$H z_rg;!Ef6L27=;y2hkTx0cZvOu% zWKwd$BlT6msi43UvL4S%p*<@?z#W}lOLX#kmv5c~c zI?7&Jp0kp+u{`llQ@;AR%<*W7@b<@XNazpSV&!6zi9Iu)Imr_7L0J#hpGx*Or@K&b~u68VhzK8wl_E(xHpeU~gt3*F#J&uW88AqE38U$QDfj9uT`)%q) zXjKWD+!?Kzz_8ETqMgD0mH}o(F$dwlq)g#|P8mRke~+2mzhH)raP_u`u7#Hx6!-^b zFqL#fL{ulT0|cW{(tV>QO$5=saF@B^IG#kklA4Po2O0Gbt127oI@+I+t1<=C@Dg~B z5Q)YEDHW6PG=A0FG|TX>xl~Z}8JF|f9*YI9yGK^wERL!ONLyiq$BQHrvVXNxnQA)p zd+M(6+(1ZsEB83uFta)Oih#YRA$R6kFAH@*dtLrH zm5#%(LV%Ma{v?jTDa`-peW@Kei6rEN)#1S8u_mg%DwG~`Kp7;G12|iHAW!r<-#Rtw!`-Rra>WGXqkg2hUWs-FdG?wwQtd)OH zkQ&QqyE?cp#(%8q}yYGT3&8RSCG zJjeU`lvst;W3k%?h)eJTIe4@M${9^*ROtXyyuG0;8bJK6I6W80t7G*9Ezn07$vBb589v5fYzlyx1 zULcgn$XaM__cMD&aU#Y`p572z^z7$MUIJp#YBowpL4s=^*%zw_9;7Ffj=b&vx%s~^&|(BUjsy#yq2T#YZPj1<%&{>f3HqGcW*A#tgMFC$jVubB<6yPy1| z3X{3JPaG^$$+0bbZsJEr2NK;PsRA^uPuQ2z-Xe}aV8b-iW3r7LC7oTSTXt97g22D&~jDO^?>?<5`f&&%TJg@K@8KM#56oYRG+#fJNY_2=J_J3`I3t3B*tx zwm~>Uv-F4kQSpU^fnP(=RzZVtZXs|$ux4!1YfJdrulaUvamHmu`or0L6ctisr%=!H z7jn#v#G>U_@*oozmy4#!CBM0=185S35)Mx}1kI1y+3&(at&`ZgY0XU5k$Z}sZd78a z5%Co>Ll92A0cCeVJ+&lUqGEj~Cv&QOiQ-!gr)fSkWH z^7#;D>3kFYrs_lG6Alf5j+_OtNUGc6^TP-KbBRxpPm&K7XfG%ch$&DEP!MQ11RI{N zVy6X2YeI#%R-j6>ax(>HH@+CwZQV(tDNibs?2M7UYV4{)YqvOV6v#t@PilrxfDKiD zYKHKBbR1VCM0*KQ>u$otL2!n+mJlm94{rp!{!WiZs`J!IR@IPYhQ;;S?qFE{s}xIO zhW zV;@L3X>o%i&LfI@XRkv{@6}lT)sjBhq?(jori>UB^URD%-2J(9$2$e#B13Exl-z6a zny#{FA3^i?+Ou%lXA(P5`?p0#D^m8JVBs752}G5P!-gVW~X^f5teF%l^G{YJYhv7 zWPH?UacWG+giY+J$3Ca&o9VCyt{(kr-Ug@fUQcHn3l&Q#bf0WZQ3!hBV2BT4bt9ED z+MiGuW6~q2=rbT#_t_yx*s?>wmA<##?n5F-aG35F<0Snq&B1oGYe-0{V!z!Fi6B8w zvds}5=87X7+6cu=fU5uV2TBs%@Dq>QayHH5@12LhVD z1EI1m2Lk1tF9bCGXhN2qiGr;dI{W(_1UZm8C{<7!$aawJedV4Sy(d>V>o4Dl*F!QL zuD?is9~%0__QXuuQQX^dIV0YR#k;fH5dVnxy>keT{Rx4TcYl{O?e%BuhQl?ubVkFD z)ng$J>&}Mrsvqz2mGf(0EZSKkiud-ePTFfCM5^@wr)oS-gWcs>8usoktn~T*X3Lce z!RYu973cX@wa3$;*JC8k!_L<s`)r@bYVCbJztz#GnY2XldwX$E86T_WbU2o;pdWdNYmOa z_^2RN?LohZtfK5++>7-4sF6+gqy=?BT;xBqTwv2Uu+P*D)677!EFSUjqxPT*yx+1Q z+c9NHXY*ZVu)b59mD${Hhg@A|9p@raW9s*W^&LdN`B~FH;}k4~V59~TlE4%3fa|yY z9diJ-ht=0V@Dhrk#`ct`CDdWhY)`3h&BV5>Pu_yP&zT|3P|M`fHvww=e6VsJl515( zL(T%n1k2;6F0fnEiKR9!{hd9U+KJtjYFpuA0z;Z^STawnB`X5u*d`w!D6`!P{YJ2~ z7CXE!CN6>7-wdg-d_sGL|psYPGD(L<-&KZv4Hm$a$e=(l>e5kq7;?LML9q&1dw3F=~(&`oY#k}~||NqBfdVs}9J?8{MB^BSp| z3}9uJeH!)E&no8NO*;3)jIK8WORuoL#|+?s+5&wbIQZN5cJ&dqma>9w#_?tKGG-J;tLQ>YY9LlE3+}%91ilNXy}IsQa_2fw zPK&^ELe+Fqf9E&y4sfK z^i@{Eia*SB{V`)N%dewxn#koaMSFg~awp&hjN&iz$$c zg3aB|Xz~&D(Cx8_wq1;qO+~-dtfSHnH1pb=Crz_QQTWdqObSbiH92$yNxT(*IG6NIAN1ms-_Yie0MQ;#w3vw@V=D$St{um$D#2sLG`ts?M zH11zr>i@e5kbu$8f7oh8B=mRN?B@i)rh)J8sP3$8d<2hhL4w=NpP~fG#iGZ8MCUuN zo0Vdnj5+78j?70xf&3k+E^LfGJl(y22H0lIiV$ha9^$fR;>0t! ze1zyQFI#6jJ#$3ZFp%P`pZQc$fAAc|Z)2EEp{2vZJJ} zhm=jYmPoN^i~EgOUCyj__I*YAzO@jDh&=pOaFlc0?Ic(80{(%ysm?v}ZB-eoHSh3;Qq`?@}P2ioryT05J_u z9m1DGpBh8FmSI(OLK=_-Kx}C;4fiN!3KDV}h6x(x8P6 z1Sj+v$81<*#C$F|Pg5=dGrU~iF*K3GRp?ww^CLoGR)pg>TR&_-D&}IL4T`-Mj3 zi;lwlXTR%8q&3F=ijP(fYLHis^al9uUkRc^Yn+2oX`}ui~>;M=`WS|=Zxfk zqr~5dkRFi+NWrawo3HAbWoNSuv?}TNrArjWibxk^DY9n~+81LQHRgMQwWQ|b=kIZL z;&gU;+kPIgFB}hPX%oL5;69nKQDuJ{oI57uuPUw;R}To?xN!1I9S9!Lo4i1PT6mu; zmoZHtGn6sT7NT%XlO#@s;6aEPBdk$0z@W!1tVxz6AWlL)l`g=cK}5>;Zz8B=&CV?2 zPW!;WmdI}7e?_tH;Nc+Su*HspKwIjD%jup;{Ga|`y2*5;5EXV+Z-u{1bQ)6%`6%Mx6fh7*l!}h zaAdMM;4LEnl$g~(D-RjT;3og<7$E*CI;g3xGht%9Kzb^|y z(YA9R3;uM^YM`gVrzR&9yHyO$eCP|$jP3iD<4&Ez^ChsD8lm%~xb~M^Y(;UEVQmcJ zi=?}rjDQs2!n*uXH{>CRLeVLv!2*9AjZ$aMD#j&ko?p|HuHHxx_bq z>rgR}0`C@3;A(bN5-7_7X)e;1>*%voFx;1yt+o$E|2TpD`H z7z^utSGMv)ee?OQcqb$z53Sp$ z2XiU^M#J2t8!Zh~^Tks4&Ag*3+tg~803aXO9svLieuS2QGL!z8P3PMBI3JPdaNBTX zDSu1jN+XLtYY}IX6^TL=_nvjmdmR-W@T0l=xI}@gKPKsE4IXjO0g{0Jr91e)P^12T zAO6o8MHnYf#WUH+YWLZiq&ZMG4?#dsmhXOtjzvH>Nb-vquLLUz&Fd%LVKyuC?e1RC z2a*S;b9VMjor|xZ#%)!D1Z0a?NkH-w6dA0M6#cidR$9J$Hex>n0RtUSG`2OsQCsmp z=c$B}rU_kXPGXoa(i~17)}=uSsKrsC60pQ5bR9*AHir)^6XoU;9a{494*gl9V)6Nc zR`*2Eh|wy-7`lW$bl@~gO)#dv+DDaB_UIQY#p-GTMzjH;tqS-!YNZsG)?~{`k7V5s za^L29Sez*?DRwd7U-8|8+#gpU* z{>)$2w+N(WUs*+8n{DAnG(Siwq>iylX*P4)o|=2^wGk}f4`P=Zg=?0&{t&(HE$Z!M zqp~nesZ{bt`TjI^I{MK509cdD>aX+oFf;M#u%| zquiNut&X3|H=OYBpKEp|8`c)Kk30mHbBI@l>Z}uE;*Hs}7qf+dddKuyd7MKj3F46c zo{R8OnDpEkQWganOhjb2+@#Y5DN++5*9W5VtdfvcffG}4KM5?O|;FzTTF+E(1|KBc8? z2;}*ap(C^AYii3P#I`0mT8eoF9T8z_W|c75V7swTT#AB?n}QyX=Rn9N$wkLke|JtmmNbZfaGIW)g5mvhT`Ljf%E{L7 zN#hvgh^!&DpmUM6lL(5LrEJ5OqE?W8MJfZNOh^YFVvd@AH$pexpyt@4MsJE_=A0Wj zY6Fr0oe^}e_xCAV9Yb?r!7*L(5MswBe}#iw4DY3vECdPh#l4?xjV=%0y~*$6ci%an za@9r>r~-!O>E)b zX`lD9SWBhFMe2%@B^8jJAcIwM+S4i3KcFxgvB8u_vnzlg(YCu#V&Y04#n-ATdi>-*7&Mbn*i{HvQY_dH*O52Tobr^QoLMgqtZv(du1m^Jb z>W&r7OHM&H#B_`IsSmIQ<6ZNYmxh&>WZZ?M3)S{XE+_hhs|;Qa9mY&i=ZXmb3QuQn z9=aSkjI9#s$6+{+t5WHwG+HG#$P9mDI8U(q*3X9#Y`99eQyK1IbUOkuC~JfrO^>%j zrq!N(ta12BsY-T-IB7FDu_rZziQe&%Uuj{-w_@hDz6iS>Mq>x3orbjm=dzoOx5ApL z+l2WhjW=t+-x0E(dclTPn!06%Vn?zw)dJ{APS8gS#MFG@epa!_2|s#Tnl)ejNbK>< z+SLM!s_{;;+Ek0heaRSgopkPTTY91E#ZxI&#O-^QyMS9blr;0Ky4sc|)eQMpdU+gx zNh+JT@Xf2BCB-4f)lrO5aU?h;GN{=x*z-JjMReN!xU}L6xv^C)l>kjxiF6L*=Lg^z z(Zk!>FjPjXQDO&WRh~tGHurSq^`26_6HPCT{KIm;V#2!a4ObZ56r{T9PG7DyO*4$* zROCPqi}8u@mdu~X=0Vj})3~;j(jynS?kIfSts2^_m)<3FgE3(dD;1uGWkE;aSRCWb zVV4xHm!dnkvou|$n*#zcsP&k?dOmdM%-h&idVr^7vx{Abn^3ZkOLBAxx1pRj)BI2m zp_bJKRSP#+%2aGQjgebH4p5*8x{zw1tOK*Nkizl%=*Myf1wm!YNLKN6+*sv(1(z5Md;1d#_j=E;~L*qpyD~}v&(?lanKgL zbfZ1*G0;xy9B4!D6KO;58E8cxKvVPd?;{A4(3aekplTo57DL^*-lm$#>@!jIOz2x^ zbA@T|+@_>z@82e;Ex5u*&AjE`9MSH*oMQ>N)I;SUK3CotS>T9TE88|)yoN;gQPSndV7)i>m8x7JG09()Vev|xez%bPF>HlC$+ zmPnJ#I`j{{D)HJrT-dBJYVL5STi_%93u8fhSNG35_3;oI5EreX9ipzd8j0}9d66B{ zEsL1LJ57BOjrJ(sv9=9`TrFdcN9!0|CkcJ;IC~1{xxtb6A+`LqKG@>drprC+-S^mmOzeULg9bNr0pS3n z-J~|4xhlWZ1UziY%Hog1EYy6ZOGy_Q8{7_c#{lC1BAg-q#b7cz?0bJhIjT#V2pM@x z2Sc?*`gi(Zp3^j_6$M@*V7FJmLd z_;cV)f-Q3D3?MsC?_2L8jmQtN8Ruv;H$H9h>ESMXYT1+mspSF}iRoMGqj+S91Uzft zBO$=qAep6208xB-xmC=gj7#!KQ-MW_`4^F4J{uYT(l>L?qHqdeUJp z5h)4h)M3Cxh%;$DyImL(trNeKehboP-<)BJjzCsOHWd(lz?#%j5OL*2S_98=YKvEk z220DuQyVJ;^toLm_&oVlWi5@CK}<9niHI-@iysYAS&A^AJ#uTOrvwt_L^&8Zg3zXN z3Ue?u!DV3G{jl8VktGGVEFj1!E=VhAk!bPEkcYzoc!l;ux6pDQ>vE=j^&^v zWeLH>A+bCb@s89k%HQXJa*yWF*0aGzZJGKi-)M6e3Vb>!5vPHhF^;c_fnamWiD_L$ z%e%!TwGuJO8WG`=mDF=_Fhd4!mr>_hhRWket**`t6XPC#41U3NWX>C43aw7dSmT>U zdM16Ff={YbI8$!JpM!9J%Z@@-6o8r1ZIxggEm-?Z9m5eb^v0h$T4W7^wc|c$Z|c`~ zBtIr?lZ$(cRe)-E?S#r+0J`mX&8^)rCH2LHDUT5!>7|T$|3GPol-(}NaNn~4HqT}o z%_`U2F@XGTAJ(v+45n48-Ld)-s(3UhUd1|U(p7@Y`WXL$gL&SpWJLgZxVWVjS0#M= zgrU2DGIp-FMY+?UR{&py$SQbU-%+^Y%q})ht2rIF9ZV%Wb`<9)SlddE9pNOBtbwuU zO$mK&|4L*sn_USV9;*kr>+nxi@8)(jS_Au|0{|&;>ntAUSgz%>`%@G0 z*0pRrVX^gil|;W{){vhqC>tVn=MA;{;%w(+yZxaj2BYh`4PCUw8}uo$K=R~I?>cVev5?CxL|T+{5>dsj4H2a$@lp<*gx#o98Sxk$dG^CNhK8lE)-5dI z`Yk^+3b%Tai(*)+TZFmpYA!LJ?%ED!nN@IFI?wdIi+Jn;&YO!Vm(S!L^bKRaTq~4| z9yF=|bzl;^lRHJPZGODiul%s~T{IfK?r!?H%>QyLYJRv4 zm-|p{ESz1^;@WY68@-YE&}n04C^N1-B>r`q_LwrB{@}yr-UAT#(ZwVwdubokmz1N+ z0!voZX@T4d?LwXuxImHQ--5ClzCcbkaDpOfQq-*kHB6_>2YxPRi*v4Y2^GZ9%GXur znhQiL03!gto~H}BUY3PvBe&VFfil{+f=t!Df-<{}1BJ@qdMUl%F3|+cHPcVLRi}#?@FJ=73Lms#yJz(62M`)hi7pB3)vW>aR~0(o z%*_TF2G7tf{GebAo-x}-WDnbbEwUa$=mB(h3`A(LpdDyZ^k?xa3N8u*aGnv{(5)2) zzsH<#X)YQ8lf{sW!NooT{4_&6bu^xyOVFShXq^PT${)Tq^sj=#NqYp3pL^hpR)Z$! zJprrAp*P|X`cyF5NeKI!={*Ct0HHqLhc6{C>^yb)tzXl&8lXF3r~Gy3UPHGQ7|u5X z?>8l&H;f)}dm_=l_h06Pb6yz)6&jxIQJ?nM7@nHw+}F^)EG4S!R86@Ox6^E1268fe zX1}4`P4d}hJ@n{C+y3b8KkU7qEb)?W$Z_y0hk}1cV(_cEa%t`V4qmo2MkAH|J4>b`<;!te$0C4*@FU6@*%v z2=Q({wxpUjd@j`q>1LMBCjNw(VoT)K6Ow+rk5x@gTPsmWM~0+TXEj$Y+5zkq%f!y2 zH@w24jlQe2o_A0~psN?sag~9_#FEhEhxz~{T z2Ri5#`Z#f~k~MhX2vkfFf$gL*$5C?F%c*U8HZX1Wm6$x6120DYl^N$Mq+C}4qP}De zDZX%K_ZgOHoJ@90;NgU-hkBn)?N?YG8BVDTE!nNjPNKfu=WU)-%U^h_R(2(np);+J zVy|y>r5QoNfegds_r2lb=Gqykg@?OpX4CML5hhBM64$ z1tv7zjY<0!LB-?}=5wS?Ey@dJ+08Wf#5Owy`bHDX-QBVe8*S$}56^h-`T{=MPuSk& zb-IO1DY17&#pJ_F6J4{R$X95bv^Yy)qm;%=Di0a~t9WcNv7X_r3#;*F`nWQ?f>(lZ z94WjhzNUA&sULU(dGF8g1SC^0SsLMKz&q%)1jqD>$&hm+aud&q(Vx&6@sn%eOJu_g z!hvrf*IU$_24wCQ3`*MAshG&8DmdC2v(wYeaNt%B!#Dnd15;wb?NX!YWk}1BKNToy zTTSlmK-8aA4s)lGq8`hE$}6_7KUFY0F0x$mGBcM$by74-Ij$^r9)P!QS+M(x6FL3y zM;rnQLd?u(z!od7zwG1vb3U!Co|(Ofk+qS%9-x!-kBy}A=&|2p*MTyhF~GpQW$mm0 z?F**rKGQq`L`ZnP`?^^%$l5%{s7uvmdb=&)N7;V<-`xwKmEHP=gLT@%vw?#ZP9H{W zqbL&5gkfO6+ooxXcD%tF>6d~f*T#-xR!%EF!E}VYi;L@u2(zrgX;j?I?}0U~%6n+jaFSN} zmGRSBU)?Xc47nb0t3eXWdD{Tp3`Nn7mnDjHcEaI93cik6%q#Xng9?FVhXg0pHF$Mg z5K%qSZ-^~C^;L;NK7KC}#z8T7rsfaumZQ0%!fe9p#Up&Hk_21Z*(0IWGOH=v)KO@s z9ow63T1t*po5w)Am7p7U2T?(PTTh&~6N5$t@NTvK(!2d9l6L;%3xc5NpIxT%s6Taj z!umHl!T((+M^O{Jttv-@?QZbP>~JH$kS|DRizE;C_p2{^wO=!BE!#Ky05J`-)z0RFP=L=BEkqqSy!eejNNrU-qNd@Rv~hQ7sN;d40W*s64jC_ zrnunJB}rjnND9!l*is&q0`fX0E~ru63JA;<0qKPT^^fk54W&2GJAZ{p6jaK$v3%eG zzIophJQ3Turwv6+P?UA)E=ziHk|ZnAJ^M9&qQ{itu=fB-XR>KZf*m#J+Lk#rWKc8{ zDsw$VDN|wwQ5+rDj4?^VZ~s1OrmlF!d#m@NSu)Cj7BmOjbF^!Wl1`WG)`_gSjsk+Mag=;rD$l~B; zu=DMYhOJy?D-reoolyVM5-FGc+aUZNGc+{Mzp8tDLK1?R-C(dWHTRosO8K(}$ z#lYuX0D+krhW$%Y>myA1wc?mop4ai1zFR-9q1|zlZIHtjXBUEI**gV6n3p{B`$dgw zng;3cA!b+BD(($vAyS3cazjR)&Wda;!);V|eK3);rllS$IGm6lG9#hbW?k(YB+Hf_ znE-aS?$jJUON{8Er*2`)Sx9+PEP-3sI^})lLRrk1(8x`c2xi6F1R?Olm)|_uGP|`< z{+BZSb3Lnn`+53X!=yZBL>!nNIp|~7%)p{e>BI^jf~J`!>?Pp|GDpKN~u2QBA2v9#$IIT8!Z#y5BcnZrKy zbUAem9N_opm7$7* zV9+WK7AVBJmj+IGL;EKi9lq<>r|A>`x?SFp-^EDOQYbFO*(uDazz`o;dTmye2(1g6?IL)-JU6%*cGu14t=*(oUJRST~u+*?r z6nb2`nS?Yi^CiP?Mm!2J-#Q#RH`jg=x{!B0*w5dN2>VOWT3^w)yHyHSU~oA`y^6tL zI_DAhlV>D~{A-MlNP()baTQi&qwq-0AMZG`L0Tzu0RP}K!0$hw!ucl>rT*c+MAlNz z%vw-^PsrN91`wF{XS-WLOJ+tF`MdUVMXn-7cbqR2g}Isr<<-w(NMIV&CvjA%(F*Yw zV@K<=Y1Hla&;^q9?FjU~-!D6_TGyCFH@hbbF4zx_*tsX34kvUr7(P+DcH?1;*q|F4 zG%1;op+_idEe0O&q36+J^sliwgKN)zg+Fwly=Eup!lszPc^Gu^8#Ft$Zhvs)g~^G^ zj?2|zwd8Dh!8y%kfW$136KCSgb@gaqN^bLJ(Jq$n*T4+hCH6VHRH(yDPZI0P=bkW1LE3V<)@Jcn z?FE?bi2Y^b^|D7^3wBBW3I`TN`M1_-UEi{P)v{j)S@!1#~1#V!=PzaiGpk zlluLFFt{dV`*YaN&5}?Ssm^D<|2lXnd0U$fU@1ok;?llo7V92L<6@gx&R5*+L)6u}#|%NWcPp=;tBDtbmBjFlfILK~%Zt+f)H z;K{Nys`gf2tuoXY?lAkRF+f-WIvUw{9$gW&D*HXF)d~?53L{i$DNZ=M0FM?XM0MIF zZe#c!5|@>leSy;6I*m{j@%lbFAtFNE_|+^~sIbTYl~qrmhdPD~#T)o{>D}j|NL2+; zp81#ARWkoW(iI#H|J@(8qJ_c?V6sW#OEJEw+Yd6l$Q+Vd;#oBD&sN#yCh*vdJO2)L(+-lQz?w#d@D~Z)S$%U9&aDtxm@>I_6|j5*p@!nP)5pBH8-wSwOV?)rb}_`TE;YG$)Z!_#-m5Ej7FVJ+FGVx0@Nvh_(Q(-4 zpRLpb_T5kA5^-3K+a>fCz8+x`l(nrN3#nrl`FK5$?nt`y7|S?#5-r2?g9Tl%mGSj^ z;qlDM!bjaj6$hN9ck#fgDx_F~P8_UAihhA`~AD+|WB4!#WOAA=(JATB?^#S!U zfTtG(@qW)WmCH1at!wB2cVlq`9BxhWP`Sv@l2q9J^tqpP#$)iI3e{f6k1H?>-HGb0 zB@5R$jdL_f@_eUHCcN$J_2*WdBN2+()*erSx+>lDl;SP&GpQE#F0a?H_dxc?9^uC? zvim7}AS72Q5pFTU?JC~id_+4o_~Zikzy$lNvM>HWhY`PO&y$1^CC4)%e!83NqmF?INDCGOAb(m+W zq>Y+rWxJhd+4?vwXSHdIc&0Q$a7~=Mei1#JLia+0n#?#6g2>|IASOWv!m+Y!24c49 zK3?;9uA<%E*P2Hs${aj!&jpFjF_wNST8!wSOhQ5W{se&VTYHd(x&grmmN6C`6(Tju zeG{j#yYGc{-A^*0v7+v$HcZcN1oC)b!(bGs*NfG<7-YHw{E#ak7#bo-$QNF3td z;$(i;(^(E3J>BFi%p2G_HWd8=R_TPL%vtK0gd3@PF0c||ZS3OQ3_V@YFE(G6qx%i= zoIpXT%h~jl5>=Q&D4T44OUc>+m&8&4lu z_1Ir`_+x(X8wxnc(6Cr4o)sWS9dJ_q)9ZXM?UiUX*bDt!W*n*%vpWZ%oL{agv5r#@(|~JwYKr^N{ihp(KMF z9>*T46@a)*G&B_xaA zQ}fTrS4HGeq7~-DAx28NTS;h){ucCECmBeg4iNS0|Ba~3EPo*?*quITy|@rJ$QQrJ z6}G{_W=c+rO#$8#QvB?%laZmuEZN`Aj7&CHn?~DA&beK9I@WnVDOQO@m0{OGOec0D zZ83Khe|0>n;k{k_!Oq~wZq#K8|6EJhtQi!u>~dFg6DGWikVXZSm~(RVZMtBt^2B); ze%3h0WAun#8r=7TfP*XRC-&V77c@w2nq2xpK#$J~FrO_7;Y*hIB|PcJkW)aRx|#dv z#i6$KPNki3T`irs7_b;HIj{uSG#E56hF|KiL7BFNd)_Yx(Sn|*WNoXfHmytt0I5B) zjkhW|ci(X#;bDYeh>_IFlIWOsD~)q}l>FlIb0DuDGM;f0PDF=@`Rs&GR=>7YMj8oa zqseh1Y}H@GMk|wMd2;d9bN4@k6fj^RAuk(-m(#Os6qs>BxkM`p?Zz<^c2}3s{R)vt z{)5!pr`M7HJ5d?g{)$w2IA4@S3Y0r|DhM9y9X!I5iqkS*xVNH=fPnAccqvkr0)Xlg z(|sKd08OB#ht)rBhO&LQeAV`|1fn`nG64%9h2JOhC*CIw2=@mk_u@cv`3`4(9@=Aw zn{Uib(2QdNP^~7@46Oj5nyTDWu>wFfHRPPWaDWX51c2%#0M*%xo4=z93v3Ms@*7qE ze}(E1eMjz}s80VKRVs{sjp|W!`#63wECAKIz6WQoaR92&0{<3O{okmjga9f3J5(|L zK$R!qPgGZiIR$^CdIhp{kA8v#Kvh!KG?u=;f6+6w;EZfl=s!YLdg#tqhs}o%*V;dV=>V~@Y~#+WGOOPk0lH?7aE6)WRHpT zKL+WUvEhkI2dw;V^DhNmrEK@Xxt~uXxmb*ULTgE@(cuR1oQ2{hX6M~&?c_MGhjaPO z7;VYla^Z?DSEo4l{KWQq)^yBd_v$~QyVMa(1fPxG>GBEo)s15;xkYl#k$B)iSH%3>l1{ZbFz!F4GF@SkqUyaStOAwrK749nfTt<6*hY8 zambs9$i~gmUvkl4t4hdj3Cu|eR+Y3t&76RSNfit^ku0V4C~BC6vIR&MlXYLL66yk z2I*3V%RVTntOxzFjv9cwU`a;q)L?9qt4PhrTa1R6feh`KmJO6(r39C?z|z zP?_qlnLABdcKF&4!N^A5ZNPTPLp3l0@P;AY(@I1cnkDXAo1T#+l5R{DT$H!?o=Xg#4>F| zVFc>JlG4R4C)38|=x}9iXk;-*t6F>vM%RJnJ}2+!{(M^?J{#PmuO@L@QYA$wOHEWN zvn_uF{e3PXP!sK!25<@Um!Hu8`4JZ&;lDZ*{XXKN|8XcXdI)O+;dB1~c>BiqI`nPZ zHfU@#R%6??ZQE?@G`7vgw$)gTZQFK}yp^84&psFL+;`u7@2ubYu)ZW;=9n6D%=!Pu zcQ^_u8Q{N$3WVFZ$R|9fwTKRk`y|H&0r4*3XRJl%Go#@EHrd;L9!oi=KgX@K`C!gU zD5@fZ3tpo_0Dly?K@k3QLx%-s*{xaZA+5%UUL5U~GoBwi(`+$!oOHTCz^a2vEyS}C zlb4~qY{p*AH}QbPrF-UM#~#{EvUwTY@|7OzD++`#TW;WfiCu3-3|^CTCwB#cL)-=S z?jb+>M<^}@F^&*a6LoQxN&Y4N{_fC#GSFfE$c+ZKtfG;?l)Y=9m`BYYpXOE1oKvCF z-wbJ$y9;^BC(l2}0MS($f4BS+<%rqv4T#w)zKSo}?9kL#pJjq4cehpktC;N5?B0rV zsja`#D0A3BMyQ>P2Fc(NrYu_;{(73e#U~BiWrlb+!_ZYSC+)pD&j>Kl<9n#5I)koI z=?YW-;bxh4Q=Z&p!@ZZdDE|Ue{#6S7Y08Sy#8sO2`WEz)pIbGM0)BR5K<9v!Q#8VA zLI&MMHtuX(^aR|2h!8^>LOh^bu{GxYai0E2ef@g*^yz!3r?12A!#6y4BA{$*@UiY9 z3EUpJ&i;|Ol5w)IegPDD9fxMc*cRv8>#$*CON4Z4Kp}*AAv&d;dpNhcfLHVa$eERZ zoGH8+ci}3?#fAgj6#8BW^<2-8Zk@@(Ym(^VDnl%ZJycvd;+Ojb{3y;#5e#FX%1<-J zx578j8{(hyHR>X6DqkTXuQe`sw;A7}JOR4q_@{ z8_f440o=a@pA{;X+7nvjBPN4P33nkS2Aq$;P?HGq-CHDXWIcSK&E>i;daM`c7q%d(5k?UE93^Z3h=%6o~lHqB%7^2=L711 zP@f87jS;EF>f)_)0_p<71Bjs1pb|mTHX6PH{4y2bmsl~20KZhxIB`CrI92sx* z+;ti}P<=p39pZy6g~bAPE#n~7kHDLrm;?!M`tB{9doBhjXfIXLPS2G$KMbc@p-yt3 zY)3XkM$fW*_n;T5VCd>cj^t)8By}1DSw^yKA2DskxR0JY-@iTV^)<@S>;g|Z`R$ij z5~QO4B3u4L-SanF#_b)H{25}qzLQYUq9D3yfP1VMgP~9UAB5NvRy zzzxpumJ>QGP>&I={Ab@wQ_dOuYa|FjxudVgRl)txu)1vUcu0M45`Mm{!e_T zG7eGhT+|D+kXd;&1bfAox_AzRY)I*9nS~-Twn4EQ>>r@Ovo(?uq+|Yb>+O#tcA$VGc76B2EX2fs9d1mPA_yR;aNf>j@BS)7z=lt!))$?;b|E#ZU9&ZpHiTDvTRCHB z9A|~$e-m?X71d(Hfo+BaeUG*Fv!pxHc;M6qRd5s_<*Xhej*bLUfI2pAND2$!pNbkF zoaFfdc>(bN7d3-Q41n%(d}LOxQJS9HXCtUR^QfPOP;nP>uM!8N5zLE+Xq#cdSSKQlg6aXe6K&MapRgD%)SIr`s??zJaJ>KTs z!jfi4#+<&#+w!DQGRS|7w}g(!Z0$=ix?(}eEZu!0zYTj9OLFqwo)G@i-1&c@&i;>; zthJ5xAMelP%LCR*`Ov(CM`x9WfAE|jf}~=98dugm;tQsR`u3hXV;ohSjDZ0Sr}Urk zR$g`qz#^o$x~}i1+#9U%Xs>^$vlWlF(&U8SsT9PUf#G8a7rvnj2WB>?Pz1!=R4FA< zF1jswF*n?2FPdf~%?hYQePlr9^lIF9NbkineG9>1a2{dJc+Z?Jf?8~8l7D1QdnGJ8 z6LRnhg{pB45I;r_5!aSzuTK7P#VMKGzLZ4BZXb<7^+C0Ts^~^tHB$H$<}>-(Mdlt4 zZTuRnk@=ma;}>a@fa@%1eIk#iY0MWdbaZ%NjZY=ap$iRqn5261!k`==%@vWvq;Nnl zOf5g&O_`wMN$qtHX|gcmP#e6K0uoiHB%;0Uqi+9g%Qmtd)Y9{WMixDm4R)W^MQtjQ zDHE?0iS%$<8pMLVwFaRAmHTgUClEd>`F};~G;;W>FOeGtTq8v0GMJrNP+yOFYM?Hm z4kWKA;kSZ9aYTV{36IOp>&-JP;Q#CuU+M$O(;08wzl`R3f(gho-@^AszGV|^W2i&BpWV_DpJwbZHAVT#)r)0A#zDaRQUjJR zTuDvqHLJyyHQ}*dXSG@zQjR((mvJoI8=#SkAN*zvo#O14ApP9uH}UI*_Rk`RCyW41 zXV78|_Se!~#B|uMH7a;b=$^*BTy2G0wT**)mB7iZvhI9&hG<$^bKQ~7rjI?mQ=K4u z)ZR>kEB9rg>^r$#TDS-v^*qKI_j)e_eX2W~U|PoNj5@|-5^F`$B?+* z1yXR6e7J-8UIf3b(ryF-tl#@j9r=IG^9ug9{$DMP+~OYqs57%zO=_WmD~A*)EtFNx@ z_$8JrZ`C0fjN4%&=bUjvG<6}RDNDZ0v9uo)S&^eAIcg(?oKV$dxfUx-6qv8_FiNSR z5Gdbe<=M7UP0R#^Iw6&Qop*${ zD`w+(?k2Hm4}@@h0XF9y9xiD8rdjpeuJp8dl?0O>5oV z>mNc`Ael#NMi7CHgf5A6lZ29j=eR{?@UwynL{NQp0lk=hZHS19E{VC~W0r@QZ`4-`IweMnQq58j7L0vX~Ou;2OE6^J`?n6Q4O znzqQ_l3w$DHJ-bi&5=6q`<$3rX_G<-x$mv@X?L+ZC;Uy(dmK=Nw|trP{Hn(=>#f|N zHTTu(kYehLWs0e`61{M=v%}7u^Lv9S3x?(=SU}3=8c8ho(U1z#?Et$wBJMJy@sOCC zv54f{o4>h^a{pT(P}su^#uP<6V2EY}9K%ExMJn4FZ+(15oUf2}YjvO3fXqS)Rt@5* zdNnX4{QA7_yLw(e1@|5bVk0HiM^&zCgTI-gP0^O=3HB60AQ=$TC)39CHHBamNJ8tz z;>jr+`koXQhLg26z-z+q{Mbo-jD|_1Edsd_nZXUS*Mn}HxLbJSH9kaUhNc8V_l zk%(_BFycTfON75CFtXYnN=cqBtVtEGuw_ix5zhE@o7^?S@E!_SL&Ts%|79TftBsOd zeh&rd^|Lc|^=s$Oo)@3Ol=+Gv{{(?`Qfw?SQ7g*RhR7pw)doNTwq;%BQcfVHyU>%F zV(+wf__&GC$*c^nZ*e>i;t3YHKlsI$il=A-vtzTGxHbSV8sMv?_EdKwe@_Lq9!}nk zXi6Yy8A|~Qmo9h*V%es<W>n6Bd>F&A2XXGU(xo zs8Z`OlD_qjnkd568hzPNUd3lU@ojIBvR#8&k2ShYMT&YfdigaCSb3rNT08?F{PaI< zeR6}jL8pZ#guX#4E7Nkix@W3Lmu6pXKBfv7hY&2=##MczqepChw(lCdSAGo|)?qdk z9mqf5D}5xp@%c9(hy{S4yD5aRK+=#_44#IRp6_Typ&waO1DqOsO6RMT*Wf1!G)17N zFGuGg01&u~79myrnDkYHq+8{$nc**)p%xekOg6(;AovY}Mj=!b=`RJS;(&Y*t0Ti8%R1a)6Yr>RRP~F@IF?&2`90 zZMiZ3swv{40j=l1RU6x@0&({B(k0YKmd0D=7< zAov6WjUEgb0}?_*Bkf#$ZvW*OVxdFQzTEonK=5MUwRW$3`5Oche}DiQ0D@WC0zJ(h zf546^acnYkOm}<;qp_4BtpKg6yrHjRpF)59KZ2liko-LzzzH^$m2eTxKr8@WAS(+@ zJ|<8*B~bFD5}@=?J||Eh!cXL5L5j|72w;Rke!y}u)YtrM!?e+`27 z7ft`0kC^_u>Rwv@&#A+E_x(P@2Nd>yo8c#QnNZN9Aa;X&{@)Os5PT^Bf^(g%hi$!i z>^DozE)6j?J1p`Ck5Uvc8O@i2R^u)t9r~X;69eYT($!}_t8OQ!lYSXMYBjh)=S&8(U+N{qoCeh6{VQ-c~46D^% z|IKU${=sZkJVh7v1*&ZihvE$AQnXa%KxmG6{x0d=V?sA10g)W?pQdxM{|EN_tDyTshC%#y z6H5BNbJUi9+R*MlAvWRPiA{hEBl$Yx*yCNtTeRViC)eUaD5?deQ>5WLjCV3!sJm55 zcAbau^=J2?Drga$zD+iWnU?-jW-*%LP$krn%CB<3MVJLHHmwUP z7mmD)w8)nV{w`9JnF~%Ph-MB{5Ei-x6BJ)%tRJOrFpXY}Qm z>Z*;=HM(k|fLF0_^c~e0T0PVd4XYE*>t~faT5pM>-V|x&^hLdibFcTSKI!XD^L7b; z(qOg(Ry$c3G)TicG_~>79G=JRL3ac2n$d4eMiz8r>G}e3qxer1LM}z+_IY)mkcaIJ zTNqBp^en1bM1DvZvnK1kIr4E#xrF;mXU$GU0--uuu^}}@zy8)_bIGYcy%Q*i|Nkxd z_oD3YmYn><86|zYzH66tD&ymO*y8_I)Bw0JwSO~ifcQObSZ53RyEj5cf+ObFiulgd z-x#_`*q(uL-R(qiac@>Yg85$R(nEUAC2(c)_oY8C_3bKg)qwvTUP(A{C6F!CYh04f zLsEQWy>DLL_l*F0Q*#pP)MP@36+#pJt*8my=4JgNW{c$KDUWa3zsaH3cs7H9bKhEk z#34=DrD4Uz9||HAtDit1#78y-;+!9(s--+it%C}ZVzcXRHM@H*ZPm365MKze>GH%) zKH95(q^q+2u8Z#n1C{uVvVn4^S}eM*o`tXC@GwdbPBY)1VDK%KK0^j_Ky}*CKKKU( z!kNV}GFkb@zANaIG2~?iRrQmR=<{f@yMhJJjA>X#9D?j=llr@6}L&%)r@WyBM0%s9a_0|;Vt;1wStaRqkbsoN zUZrL~gtt0y)tn)Pc;iQ(F4SMQ*&z|%>{)#fn2r;h@p6I7C#-h$pEi5 z{Ps%0rpj`K-(JaJ$gW^Hu4`7!An-$=U?ENa-cg!k!X@~(SBCyuuS~9bIQZ9?@~;Bv zA7pNSOOfwhNkUPjBnpnJ31F!E`IP^|uz~;gu)%puZ_K&k`ttD(_Is#-ui@jb7(CC@ z$IKR@Ch%@>3zO& z2mOH%BA3=&5z&}DQMod?JTg+Dz>SJu@TJ44i@U?IcwyxpmE{djtHm^~zY2Xrt^!X? z=-Isi;u&DfPobza3w65agL=#SA2mS8G~5A1=8spjyNLvOQQz)Lvgy7&TVF>h=AeVL z;0s<26HyBoQl-5?CzFMgo+*9jNdBaeDxRLTV_&DDOK`Ca?!tT&P|CxlD`H!^>)+$t zU&@ln|8;!*p9RL3T!(JJel@l(X32El2x`%P!gbpk|D ze~kk3oEFhtjMrTEUH4v+f8UNo!9wUAE{p;hqSy@G2=sCD%Hno4NRmpX0uEBxlM((V z;+`{Zga@c}thpJ)v_taob_XeLQEt(|mZy zb`V&H_9yx*CkNW|3I>GlG5ARwWS17Q*K&10sk~Xs$nl{jL9yLk?z~y4ImUattNOQg z7hxsw{L8M!Y=);A0lm$HGgxWqi?UV7bryL4H`@c7fSG5tUS7r>CS=LHYCV8}rYkW7 zix~pZ(J>8g`RnZGVvdG*O~jqgM;UJl3|IzQLkD~_;Q>vRWr(rnV94XfqRxd2nO%y* zW6;giDf%{{tMhE9yqox2+IV0wq{71hVnNPwogYOJA`9IB^eE+i==x^m~ zdD61|vLIUDI3mfhsx{*GmDoB)S@G07C2A>*)CNY!sV!o%{sJ;86`?hD$Vf{1jlb+%=>M_t#-*obgL%S7fIEPo9OnUsAy}9PS9FPM?wu;mAI_V(S#_*D~6q=l~Np0(lEIbJq%Gu*zTJ3K8rJ7l&Z0uR!puln( zBn^fY-4@ACRb6)v0yS2R(+yHu=pA`P0#)o3D=Z;2gW)|r#C3_pJqk=!neA&W)AHN0 zjvbKe)05Uq>yd>dQi^XCtISn6@EN!~3lzj_?Xl%kQ_g3&Mx~{oD1{Xuzhc`BIU%in zMCTcvH1b6jNrJd?r>c>hBQLGbFK!n5wmYcrG^9MaU(hCfQk^PEa;K_Q4D4Q3FcZS1 ztN@w$O=2>>!UR-aj>wl$MCDQeON~g>#xMb|KISNy-kCy;8R?|*kwmW4MS0R0JP9UA z_OZ?5?Zv2`WAYK2@$LWC&^`7FBBq; zcpD)dDIFmlrJdkbQSUI~0HH9Uc8rVCR#UG9A_<{(5?TT)867cg8%Bc=+neBQ*^qB% z%q(+c@acehBUt8O651+@;B*(&1K@Nd?{h^ERH{tWnl+p7PjVab!ow0@pPPg2dm9#4 z9g6w0H4Rt=XZNrOqqSp^lo-o2^f#MH_wqt5ozMme*Q!f8oQD=AgOb>T?ps3Q3nxT6 z!&tN+(VWlCgqhu~VxlXe1d)z!`=i>gOfKU*D_3xhNXflH5M^6&AafTn-VdrhW**=9 z2A*%u$zTbhO&=Uo@KPF@1>}W#98tXQaA|Xb?ox(ars2);6$%5wQ&8zu)Cch#=cT0E z%oMkzY7uNO0$pkk?oVk}+TBBK+SGXKWf5lh10euJsVbVA)y08uRLn$+B z$G$vkJD_a>m36;4Tn^WN>qH%gwMQ{9^sw~Unh_|<^5dqv!5h~0ib4v%F!(g!Eu?34 z@;N!Gv*Qcr;z6p5|0wm0J~zx3i1g(`g!9p)O3{u;mcdPiY~3YEpl8g&d2$=mrjARn z$M<`rC*Qy~<dh-hMTqQiEQc8snl=!Mq4Bn?&$8C_vsK|WHsCj5%@2>X>O z8FxQqu><@y;Md3Yx8F59^CpuTCSYSk8t!kZc))5o;Df2B_ufGN{lftG_228JO>FEP zX#V%xRsa1pl;8i5UqDFU&jX^eU(KBK9E<=9(SHkcqv{YIinFskCiHPEuCCGW;OxPO zYCVK{;2a99akrGU6$c939UOy)EiF|hn2gX`{UZ5494lj|m!2*JOTiqu!jQM#I^r4NZPswkquT)89oU#hQK4F?KTD zmTGO>74w<;O=Jgm>*6ztJ`K*bQc-qHsc$K$7w3f-UcxYNK?^Uk`l@;saiDqZAi()8 zm>jIFP7^<(?qWj?66YJ{Xf%E9d_KBJ>xEq}EWSA*bKYzzc}ev;;OVWP&L+Xeu0rNX zyBuQ&`BZLAs?r)S zRJXly9S>>i5bpBRTNk!TI6eAO%UEn%S0c)Lc75>u!Z-V69SK}$7M7`O zu{CG~6ySz=2&KSnf$WBgg;DrLKHcSLlfo)jtsAoTe5wia3tv(DYj--m`9HP;U`iAm0S+TDsY9MDgM&Wq&D|)3;B!9v1_)*`*g6)5)ef{tf~CQ(7vV6Xl%s`(?&V1A1ipa zl@>2Hvy_@gEtmpDIFr{IUax@7hVaWC{9ZD{nKr9)F-6MQ zl*}rVFRzHAy~g!$yUo=HI8tF`&^1VBkrZ0Bi+gqsJvll zo+inZc!Q~3&Ym47x7`fwKB1t7VUck#wZ(af6}_zad>6Le7L1i*Qc>somc|l_+hEEe z5hcajM>9Vt7WuHM2dUtrSSnYEuZzkYH0@`!;_WPKuu8a^7?%Lfd8=q0gsYb@Pm?1(T7%$CS{*hpc@F=j1T9i8(ctb zDn9oRw(TFzKW_j7t>ATnfi}tcq=7s{f51iE_@bD=Vw7k!T%>40U)o`+?>2pqfKsi* zva6kHs$Q!MqrIi~;|ji&7~@>}J%JSkgvL3Qu#AOhdV3l{bdjaD}i6S>NNHLW~_=+c&y< zTY3zps7BV3KU{U>wYV#~tQ1A?>Z?bW9JOR3no!YXc} zphv+zrMinFlX+ys$3LDk5e$7Z4RRxoP z`3Uroa+x7SW7)0v)l;}^7-5CX?4adg-)N0o0mf%0ZFPHQ zCyBY%EGnIyGPi0q7+PP4qeZQR!n~pBnxBlK*YeerIu!C9>@hd7ocTx{?lGnZ&TsgZt=m?KCJ6$wC#P`s+reK^)rog_M+EG-s z9O9c4U5DJGNl~T~{3@66TwwpJ;d1Y>1y)Rft%Gw7>*u$a6=SEB9;iA~>eBEMk}P?V zH{4T_wI9njckK+#SUi~Cd)`wIoLlL4w(W~JuefJs4Q?vFGMxd4lD?G^wq%@Nx*Q$? zLC$?_#4qR`5le3$`o-(py2%D%+IO?& zzfH;=2ZXf=>9=(WTFh6xZ(y&aUAxc{n=*(i(3PT9sIMcG-g+S_M9Cj3#j1StU<9as zX#tV^67VGt?7NVGAnxfPR0VrW)W!J~#3E{o&_?|Ya}7@k98uGEkSh#?Nwt%!6vQ1( ze1f=(p3)GWP&L5m423Q_Yu+_)lxAzqFpx~>!ZlqDB*@MUA-xwePy)SxUeX}Bi#9B~27GMG5`jB_IxwGL zCCncENRZXXUa$%7Sg0w>{eIgBS|#k_!yWAj{3c(Sevz?iZ&k7$dXISEEdgh^bYML+ z6?8c?OUMQIU8pVmJRM`$1-d3_ckY3ntdI+|3Z0;k3)W{^O^WV)+c0n$U6>wg1lUbP zgvbr)K)B!wLMK{Hl5ROmT~iYm5&{3sRRXLY;Xow_E zH!MPavQt8=4-}jrI)Rm)Nu98tyUS%^P0`^#pgs`3ChOA_V`+n`vhm=8;KlCu++o z^_Sd=#MR208??>towUL0oq-ESqcc_yN9@z3zQCIoyY{ywu7amhgNJMOwA#?(nKyK* z-6~lAxE|D=EZSeeoN_9nh;YvAkYF1z(!{Tf#$=Idg1HoOjkvh`lTql}!J98H56OG= z1cg06jputW8Vxh2)uy95h}{*OwDlJr+w}Gs-cUHWU@5S9{EU(b2p|Iq+S6nOzhL?? z6`T5dO4Hso`;4{vEd8Y1&uHkW3kD8NR_V+!OEwZ55mIBk*{)>79|i%Upz?yNUQdT_ zY|0L{CRIgM5Y3F-eB4fy_uo5Wxaj3()xjQcfqu3E(=D5%YJ&)_b6u>=Byp&?RVI32t3P4{(@A@jQN zzbOuW6TI-Xe&tgg*SiG{JSWN#Rk;->C(e@S+p!nWzj}rqCsrIXyqv%1t40L|%hp=& zyl(rb-EB^(Hw`>%3}PKN=qVL{@;j9!#lDmIVq;(#k@hy)i$-LL`Q3Qx>nHi73E zVi3cjBPQseZi+u&C~O&(i$LOmiT#!-Abdb0E}eun4QkZTONi3_MEG=g_gQ|qKieMl zNSs1?DJ@+IbPVmsOjHM!Pi_V<{4u9*Bdq`rH`j+CcCxvs`|XsyBYFvF8Eo@@0mkNg z==5bUm=z9~ef{gPk3u$EVr0al98JxF4e5Bu6=w>kz{_f zA#9Nw15cOBQpu_9{QKUFk=}UN0~{9S4&5fj%}kNr;ziS`ek^^L2m*M4S?2?|b82ek zJxfvRLz*dpjai@rAFz(oM;LLYsmEv4;P};I#p7$s2oI6i$8BO{9-=!WVaw{!Ts-|`8&n|ukA}f#gFOq8%H-n_Ufz8$f<|dQDlRSM$ z;jm-J@=e^#>f^J3Fl>5^VI|`N3B$Y^shA13uQPUIxPT}n|2i)*^GafJCeIb4rw!UP zQp5<=)J=v`eC}K30+DA18t1Oz=lwl`2$Dc=iK1*cNd*`|{Reg5ZDyCQjbweo zhs&`V{;6tj9&m@JIUu)tB#Nn^?5?(S)x{FPxs;6^uPPKyZAT1gW`+1RQQ{wHJwbOd z3I-4K5!#Vzkay@maab59NlLTLYBs0k3yGbx6p%VG5!0QCXuh^@h6DiH@^Eq7GbTXT zaZYF|DZ}@;n`OAOs3hPsoeWG(p>d}Z4qPZac~SjJFfK|H`l+_+lKLuzWnlM9ouS%0 z;k?#Z4#HFaSk4`a)1uAy8XB|6p(kp3T_!#7K#Bm*Gb!U?3Y^RLrGVJ`79*HF@DLzHxP8 zqEiJ{Q;ZU6{Atm$>MhBMQv@825@Jbtr^m-v+S8uv0HxiOy|HlEX$%!fG0)BVspb8O z{a8DH*5iE;^#@aUV4QeYJa^f{E=jl&&g4_R2rwF?WbKUm`B_yi^MW)JadUG&;xkm+ z*_ks7MACAIGmEY2)_!w|%E(@V{(2w<;8UwK-!$jbg(`-HHR0_&UPqB5UPi={wSrry z!O?G{rx_e773Qkccny%GtxG_s<=7ml92{vZv7Hr0rAd|f`Rzaos!AysrxC{p+q$@B za!3$VsC!~sD$fF!AYzLAmkWAQEI?#0Rf(8Ryi0j~^9Hf{S-K83Y=cdA| z=5h;i`eCJD8gW_k0)oF!WiAUm)sGk!qt>t*Qq5t8n58ipaGWx5RG~`LV=9<4lF8~h z`nFd$Re;VArm(6^-!^HNTV%7QpoZKklTgB~cH+p_eF>}x3@`8!`0`rJ<<=JUjOjA$ zz}=o&on08@;0U^9$Cb`AZ8c8H8E2ms6xdMr_2|-J;lPz!;Fk+6B%bzMQe%4;t8#1xKl~c>mlvnmM7eYCJib zS-|J44$6pc%r)a&=(_yj-FLMMbHe1FqxZI?^bG9g-5nfvm##X_$K*=OtDR4c-D}O1 znsYWHaHKbj8}jUTIx51i-W}X)0JJtzhLX{xN?_!GfjsAMVlP}#Ul`ujXKqhd((m^2 ztteHpq3^BrbH$T-Bl2UEl1LKM=FLH(&pP@ZeglC7uTNH zF4YYQOax_`k+j?h)(wl0n;)IPvC&VVJqLNHeA1HVmmM^zLe{z1*FD}lOL}3Gp;(6p zNm_ceJys+&Jsnxq6*X1wGI!%8rZkb_*})O+Jboyk3};>WnFVd}DXQE#EVgUNtnr2PxQs0U5lV))fxjc!m2bKBFLFmb%roIf*WcgT2|KJZjl zlnZ(4*UnlG0(pX=p*ODFaZI!hl%3uc3+UJVgd`OeDPhH*!Gc2tv#mv*++}%_`t8R2 z$}MZ|1nsY|?pU-zWItJJ*&|>OjGZ6{GmgF$DF^ErR&UblX}KdSI1173v^90du(zfV z+Y{+l7&;MFO~njVNHk-Im)QN-YNFg)x(pV9z{zq_Ou-Vcm~)Jqp^h^^A`z(}%Mt1s zm5Vq}zYJKccXuMl6csv@Y7D`VGL&GB>5FinI(C(54JB-En>n!li4+>I^(#3!ai&bg zU~eb~?eZ69QF>srbMip2$e<3FrQerYNNm;S;Iya?T1THCoKuyNw;1KpO&g|8RMc_Hg7s_d4 z(txTM&86|++ZUQs)|i$b;TX-+O0U+<(M{8dp5U${%B^Qt`l7I(1C(=>WnIv@WCyfD z`RbtqzguHRhAp3+*g+T76YIHEUdzdN$q)se28k$5(4&luEPo&-Bw1?SzisEHl(Jv- z1Q-gveWIiqWO>RqDz#gf5*(*mQY!UJ-G6kTKP_^u$(=y45T1S5iL~RI)ROpm+)pyx zVKXm9${6RV!ivU`8cGp4o;?AIUEr&1XG^Lf?P%kf9c(+oBZ43iHf7{#MD*1=!v2Lq z6Qwcy82{L|i5yuj#Yx({RS1Qyp~_;#!$JHdN2t>I<}A;A@5g70X@hOO#>1)V&lgZM zg`;us8cjzKmi8Cxy+Wg#&)=IDb?pl2E?J;!EJd;{oIzICh7x{Ajq!`*@yXR!l!EhZ zb5W#EFH%Z3B7bqax|fa_&wdC)h3`Aqej(19_kzOt8uQHgYwOe=v0>7QgIHxFtociQ zj=WKut%G=OwHv?C3L}lCLGa})Wzs=0BzJ) z?b3Rv^6h&F_I1;gwPotTM)in4q$XGOEkrKs8$d2IXo}oq4$OUM@>TcX=R?X=wk67x zs|wI#<1W_)=Fa_&{+8PrG)}${{APrmrDDtQ|rF8M&Ahg9EBflSb8XsFxAkb7I0kU$T_n6Ffz_7_&DPuQT>7g}eYQJc?@6Rmv;l)LgDuzSv3Z{eW5DSI?7R02B^ zHj!U@FH8bEXn$pFW*ND_z2a{(@zV~{Yf}`^#t%2Cj6~aI`Gn7hiKE}!pL@||=p}@+ z1b+%dp~va82jSPhpjD)86YLjw`24L%Ke>lCO0PXUsLveT23b3>nSPB>+=!E4g?^0^ zb&!=<+z{)t5&asuGJRRXWl{3@#9)LcnDQ;mQ3~YW?n)Hb4dLm9l8TJDxd#-$qy|faup~jE7kV9QIvq z(=X^|=w=uwX$JiC$^DY_tl6Z)h=8b%8>@@IH9bPi2|(cVwq8=l zZy~k;)#CNGew6H5y~)O6evY4*!PzZi(h#?(&G#s9q6Pt-OA5Z$Vr+>$D3sOM$3$-R zNT|5hPpdrh%QCuAJ>Wt8^lr0*nW5pL*3fuL}mSXiB$R>!*5GIP}CD!MYgSGwO7?Sg&C8X-J2 zm53U}b;!sz-sGV`W)wSemg*KoxX0!n|c4!Z`Utra-$E7Llz^0bd z>~+u?3=T$&t6LtjHEP}awJt6W$xP%zP+<^A(V5Sd za@Qxa<%6G@NY8$%dfNxej|ifpuy3%1#wc3MjZWg*^$2lJIblp=YV|ZVw#s85bMT0J zan2l+6unjzPFm@k4Pg|EU$xMrcUo4axmARMD#^R-jkm*(%87dN|Ut&tC$ zZPtmxLS%dmXqZh!4Z%miM7(Da*CwOFF~4!)T5$!&)lL~dM(+n+rLJ_BZCg1?kROMg z(n~)a8@fom6r(-wnUh=4dZu)_!RrC`+mhO=hKx60o(*sxQOJgxciM%_TplJ$$WIY!Sv>8_k~0;Z;U0G4iuh_xO6bVlRcO11wg$41J(Xpx=ptX3GTOt{@$RMUnbPsmVqWu)-Vg{6?s zTY|cF`D?M%KvQN^41G?Xm+Xp|l@QbPI$Jo>YL83VbNT{5odNW=3yXW3jqJ*d8-~0= zF>9-XXxl5L)h#r4#CR%oT6YwT`?8j8TFNs2=2eYw(!67K&J!W3s@}F^f~;E$&4gt# zw}5`-{OSR@+I9uO3khwZwRXa@8x2Eqw~}=v3QOP5DEdS3O7tK%*~>Wzv% z8x>zuH6(RamX<*z_FbzkOebgB*c2$5_^-vlbkd^WQu6=+(BUq7Vpe`hb!TZy^AmS_Qd=skQq z;w6_0_NLZDG*zcX(s*%iTW%yWwp7>{7L>?OuA64aEPK{P3?6c|GPT{^rC+~F#3mNU&TygSs30+NmR%`)h|zM`U{bYL8M?bv6VbOV2+dy ze-emAbV$^@6^u5NV2F7CM5%1YkN>oDlGh&v;}(qo9)+7(B*wf4M?p_Zez z=Jn~hQ0Jq=R^z7`7F{!7AfP$MW8rJFL~~}z!bSa5bOwjC2&f{cIxHkvTvIl5WZO&a z)rkyGAZiGq!22MuNSrec#7JnUCdG&WNeO3ZDW>D?5!)Mx47E|i@5G2Bco=F75oX40 z*?CN(SJOqsn2|pHCk}*Nj06V4k}L}!7?ShZDa{Y3Z{Vw11hcThjzM%{6ga@tej1ow zDT+|eR&9gigN6pIrYLSV`0Q58?-^AiO0)H+|Iic%!Z1yZ@F0SDuD?+9wQWI?2~hkf zA@*5`$}x0s{-Sz7LK}+p$V^YrXAn31oKgjA|A*8vo5$(cSmd&^gM))Scgw2DvfGI4 zz?Nl)QS51nn4`Lqg93!e)3`b1=0O3UYtvGbd2hU|X8q9PQk!vawZj)w$)ig^QwS{}MWlL%3Z9#HwbDu~pvB4aI22(?iGzt|Il5 zxCyzJyye{AJs`0ZqWdAW`=!adQser~dN>72l&3?<42-8H;fk7C{z2!01>a1YKNACft`pCb^wo1S0T~{cUg%K|3~J zfcwF_`6_?%8MkQAwxfitKxn@l3Ve<~#^I(3QPE17zoykV_I08n_Xc_5rLw@GQ0jn= z-O&c;YoS<+(F*zMrh$$wmV*lanRsMZWlNJ>g~n*wI%3z@rG&8lRNDf97iteylpJu-$W>1yYmx5%@UN!C-u|32e zrOW%eQA(-+ZYR8?uE;M&sJOU+XzCyg>ZE{xgOHbf#xBPkpA(!3R}u)74YZaPAqY0AYDFSx%n-1PBy9_TtKge3_ZKsL2vDu{{-oQ$wb{{R}G&IZGel>JB@EB`qZ%3URZWKJE3Y$@xxko^qi=g0PIM@V2j7#)zAdOC; zI~1))BLqGskHs(Fjk7|v`6)eNBEXFLY-@{*Iy12AU_ z+l!M@@58IoqZCTZQXqqh=F#2VI)L? z7dif<+SY1~&+3^aF>b^6C#>)zu&M2==`RK)gN?dS@?+yFuP) zPNjCu?`!gMt%GUyCItjRH2G(mEU9F(M6j6HmYu?#r19mQI-g*!Iep}TctEn)pX3ma zb9FOoDuL!s=89sW-Y|K(DITw^D3#e3q4rAdIca%fOWzkII9J0vzZ-02dkmm-g=5LG zAEL3nx(^$)FZJ3vx4$Zq@Jjpqc$qWUIP!)4NU9C|c<-W}rEszt8gP*1XZ7(BTVT4N zCJ9&@G`|qKCS8=M+$S8zmSFapXiyz9D~s`sR<(OxFGn~bUfiLC3PX2fB*52-rB+)icn)o?v~KAaiw+jkU+JqeTXF#Kvoh|| z-uE|alb_V#oiglyvR${c+^@c@-LHKwe6znI`(X8ugk+K4)EQzWZRwmd5aKC)16g#* z2x`em*tuzjafT@CoLgWqCj~V3@a)?P%msGuj01iH3Tk2<(Unv(O7SVfEVqyS>-b;PN|=qijsi`CC*uK)Jqlw<0;QX z<^8`{d#j+zq9t1thmE_tySo-vxVyW%I~2BYx5C}s-QC^Yp>Qj#pf2b1iFmK?z19ES3sTQ!e;!SSkXm|J!d4kLGIl31DGDsv-tQCRFA3$K<2=@&b}o2|_ak(6GAr|8 z1s7+!k8fSDh^-hRop0J*q8!hUrurC1S;*W+EYCuKJ_Y{K$|%^{)WctFV=aF%jwHM@ z%kC}s1{gB77K;d_XPx)6(2UW^$cJky>zn6dtpSb?yn)e}re_eIOIx#SPB#CZ2r(A- z)6*u;)3FX2*RgdLL7*yURO$I4D1{i~e)7xoRKHo(C1KrWA~N|6o~peDxbJgT9` zibj;Q2I#k>Sdr6;N}BkCZt@<3MbA0;jYC+gr89ZMMmCCE&Wyao9&@gW%7n#(pGvq9 z0%KGlu_=7B+Kg{#_gua#dFKjZpCv#I^66I4!A{cX)?-<`F*0X zB@RYl-=QHZPQ)QOl3pjdS)DRhSerx|HN&XS|c7}&-vF*OTy-B{svboJTCaw5u`{1~CM%Td`qMmQ$xL0Gnof~Di8 zHazRnnVfh5fL=YQOaZI_j22x^ok@(|kmL_m(oc5LVkbO7jal7I zM1b&mBNUDkWuw+OnZ)Cc{qc7qLuQv|Wuud(x}Yk+%zbH~PJDblN)jvMFahhzp*#-L zKyq}YV_I}24&&gY*AoUS<0zdO`+-{3FMAxqt-(f($+aJ=x0lWEwMkAa*T?IA@Xu`g z#3l^-vyEKLT?zZbK(6W$n4PIxOkgW(SIqtu{EeaKsdbrWS_pBh)Y;%W#iNP#K(!~* z;5)V;gOQLRJ;_idG&bS^8!Fvmbp3!Y}yUZh1iSK68h|3ig~kST@fAzOem#_8y^N6|wC8q#Y=JuHdAum*iG+ zC>JVQzsDQIL@fayskq<~_nYFW^?|Io{RpC~HbC4En-n!YbqLN)UiN=||@)d%@z`GJl-q+-BC@{n#A7J)X7PzQg06?3~_` zyN6VEf1Y5k2Jgt6S9Jd~xA@7?PzkBwJ$5LmVZ-l`QocTz0hf+#`0O9*)AXN9N|~z{ z&TZBaf9M5vyF4%rqk015M&Bu`@^bd*u$n8rb6pxPnHN6c+2zKk;p|hdtJI zz&K|}#N6$RWdn-q8ABl(8si7j*?Zh0eZ%3KJMd}#B=1|m3mLtz48|?Iz)|(hTo_7J zS90P>WLL(Xrhgj}A$DU-IG<%zg@Z)mWFmfnkr#>$fZ+xYu=lpt8kJXWB`Gxlwc-Bt z9U8iw+uzwXpC^>5^mbSTlU48ctnDoDObdx_(_vN-dUbvb^E9@8qbL76Neol{s|wAZ zytE}h2STRq(2<*&LkeN}v~AI=^dWIRd>2LF+3`3g7SH2*>;?}$zB9^>y^4-rv+Q3v zT!Vn0;+T#YY)7FBFLpT`F$TwLZR9c>e`|tH3>w1;$UgtcN6MuLbtQlS0b#)U@6rv%7&dh>?;UunTqQmjcb*OlydZI)QGXJ}3(I&H3i15$! z8QHS>PWRgF%Ia;Ow|=G%#aX2U2`p4EJ1xsy=GtDMQgR$EZBCh1<|}gqm|v6IPFxQ4ZT3T*3s-kW%SP#K zg%$|rN!`&oX0bAitS2bjildNAY-E*qm((urYC745jH3*9p)}4plxm=EjX^3?D-!qO z!;kpGPsanEGmg%wW*dx?FyT-jvlW+Y;OgJqv=SJ&*ZOQXn+|a%7z**Um;lSu>-2(I z9_fv8-%L`Kw2L+!E|Qw?Ok408EiQN65q<3p+q?IUU#S7i=VoUsnakH6OV$Cd_f zM>BeMc95aj%jonwma0)Ay*#CE9!8qkZ)XPvAah*npoiowbEL2I@Mdx39FBHd2)(0{(%V!O{Cq3++EvS9weyZ`peWuY#Cc& z)n;M^`cPW?CGboHnb2E8+?6E|@up~z?;I(FJ`HEmORdTIV}jnb%ceg#!Msh-yhP z0c(aCUtw6IJ&yTHFh|}a)R|MrwFzti?n!RhF<5I;A77+c=+X3P2yFYeP|Sp8^djr; z!{}&U_z6uUC17-2v|pC(x9Vu{EPg-)k(epHXmTS94zyG1B+#^Ku#uIpKZ-T=TZ$75 z4h~-b%XxS-cLOUf3vD6bjr7qZI>{v~TEYoCNvY{j1f9T>CsMv^C<09!%OcLv8T~st zO&6g!(=NfNjnd=YHk)T~5?3L2zX#RJHM)LGKAt-KsAEnNKUM9}TrfahR^C=#SKj$? zeo@Nc`(w(|F#X%7>c?#70ab`-`lAXAhbOE8TJ?TP!R#TfKBsmevgdI4r{or9h$S?8 zi|l@3D$XOK{QjX%o7kq{hQBu)mcx&~5t@Og<1iWvQc^{3c~4APT|mtX0^c1Ug3fS) z+jXXh?IqqAI zdhpKjg}&Jwo4`mqW1bv1Fzjy(p&&(LCL7N$IO(x-Z{iN+^R1uX(OMa1_FfDV;Yw~J zPJv)|h_Lc3v+KB$fsM=hD1q2qTih`>)+haOp0}DH4#cro7A#?{oYk2lNXC$%%gI5t z%;KHe+5u1Cy_9?QMWZT+a)7vZ zs;OQVi7%7rUys`vw<>#>s2<5FQ-0|KsCkK~5Wy{CRBie^@p&w#rnADN-shRUF~fV# zot%NNXPOs|wxCLvYhdZ(4{>4Mv|!hnw4%dpsfKv@KlY}%XY-CW;RQ8ONrmc>Dvz!E zLi18mGkGqGw#cQo{@#^mY(_J>qYHkdNEL!Zq6eW;%2H*xi!a}Y9Q30tm{l^0eKp_^uw*y;2P1RXUv zAUe~?PB0yrYI+++`lKFpNh2qgDmSH^ZTFdR(Z5;$c+cH60BehIfM#Ka2_`X7@TL(o z!S+O+P!uqwo?$w%;XhH!7t2BlL1)oW%8DCCdSb?u$~is7iV~@D=Pu5;eb_}4g@*B> zkZpq{8#km^jqIABgO6T_eyQJ+cHKr*pp29;h?g28PA+Imy8sF8-(vGZ&mh5iG|B>m zXs^|XD@&@u1{67JEufF53^hoi5;nP2!lz<7X=2!!{~Qr$9dB*Z*=KdcYVlLrr2D(j z<6g~(!9&0tTQVZ{^2DvmcU>rrJa1I!UDuHQ*O|Xvd{FDA`1jFeNAja^l~X&R8qP?Q z)8^A*c1Gk@$jJ5Y9kI@)!6s4s?`f=f!-4N#aLH%vESee$LE3dTmHj)^b0@94?b6Q0 zpT(>5!^ygp!-n$*IfJ%l?hV*g@ymPDQt3C}^S z2i=X>Ucrx9>8o+E!R$EGR~PsIwZr1r-xnSj1;vQhX1rGs=z&v1-~IV{%?7`jB=at# zRuE+R?bm~Qt$J@F8G(07C4vVdJb$?uv9UAG&Cl44ZwE0OIUcHVymCAKWXC|i@C17` z2kCCz@adwEBFry8qAlnr;N;&dq zh2Ka?>1Z$rj<#BFIIzNt=Yo48CwriR5GNaXpB@2be(v(jtzBB1v;MJ1j=oKT7cZ=? zAzxZ$AAAJZR(YFpMGGL`*Lf)hW}2 zMlX+Cwqqw?^RvtFDC}-74GjmLcM;nYy^O8w6G{?wv@oiI?DLEJZ?}$bQDfwcM z@NY?B>NCv|(a>ErWxynwjMQmN)i40|T2r;M^{ScFrn(0pZ!Ks=CW*qhn8bv)#@c#H zqejWhl`35)yXT_1S(v%0*uFB-o+jPaTf)Rlqg57ENx`PfTJYN^Vs} z3KQ@5C#k|J8EKiQE$lQ3hv2_*W}fO> z-kNpqhzyrZSp17?vvY^!-|}dVy@OsdDy{4#$#yn6rK&WZtzt7RH8fMy_l^|nmapcM zCleh%iUS~RjMa3v6_uAn_4*)W-Gz<)r#D<~Wzd}CI$UcOoJc*1IcS!z)R9knf7aZAeGNhs1`&Wy9O#-+TZ3Rp+MKlXdlN@6MI<4e#!}Jv zPys#dIDd_C&#`a1Rvbhy=e1@^N!FkG$wa4u_v3*i+a^Fb*kR z3S|ktY1ceHaKh$lH^Ss$By_Gv8R7CoA7Q9+NjN+p!NSw!2cVs?V$tdH!si%f{nDbt+);JYtOgvXIY7xbgxJ0h9elsmlyU)iC# zAZo?_X&m9tD^OU~3;m6mVGzzJL8ju+7b3~aeRzaMAM9J>xI4|7fT(`WKOW@%!u~{s zkDQ&Tm1GIIWe1P~)(B>-1n&9gNS1^U>}+>P)V@Fb(G7|$7UOnDVN&dAiOwtc&qq^N zMVaoDe$~}>Ic0sKa72{w7pQ(qhHtT?-Z(n>w<2VR7z?JUx2u zip=#TZ30Cy5nQWJ61I61^Zqm4zx$6wOY&#oXvLS5Kn~!)i8;M!OF_W7{)mgugNtP zzeiXk+kR7BwUvIcj+`E!9r$QGvSW4@+zn3leIm6^^6a;EiQUVD_n^sUqSUFR5WjTt zcgl1wW&ZZcG7DJLr6!{^5X`v-6$J;9u#<1|oaDNSCF@4fN$DaRnw%+k>`)X-3&u7x zxXa^K9MhdNrnm>|LDd#2z*1RH(cF+%{ouU-?bJ5MG@h4z`n%hzl9VAwQ@zA2 zI^?F{0{lhjKDGEame{j*x9KUXyPY-7iLp&{MmnR2+9yQvoN279B0C)3c?JQW+E&Xn zTSgZyHgC>qaW?P#xun8TI&)~5wu@4dPbaQ6THX+&>P6Yn#+HN=*J{(JpQ#Na5AO18 zQg#UEG=+I?cA5T)fXUe)3~DL(TZM6%jmU3P=n>G`IgJY&AfcJK3g?h~CYIhLn>BV) zznc_>m++&<)1ldw0#$M-st}={N1h`a3D_H2cuYH9ZDBdbcGGDs7w1PBMcWnc>)q_| zn#(U08f7dinUO~mJm|_u{Uc8^v@&Ev)vdSmjQA55B$R=vti~~S zuTu&*8-=y*81s_RqZfW)R2EGyW5G`@vH4K5xxzU_dnAbGcNr}cP}>D9tZmKo`nPYt z{+5l4K4w)PYttQ(#?csSQy!tkLBWw@%`j^kvrKVHiC$)9$FXDGFsn+qW5Tg9t4ea> zcq$c}W4MW*%YftM4tpRaGDwf0NZ2EA?;YZDQD9GHh{a8vA;`YW z;O|V=Zk}`r-Q%$sq?}PpFkI6zyJ4*%9l3>d4zPX-j26zSBqQnj0d=8V3n)gkX*@Es zi=T(DPMzX}hTyuezxeLs1~Mq?$MA>6q65@Mv@4X0W;G2{*G zlp0I!u#l#0-!v_+V^m~lo7%APR?UIPR=zP!l#G_{hzPKz02G{-u|F>|ilxX{AS%H4 zXBuS`{EazwmYNf&Gyh~|8!$AwQ&krtN<1HPQ>jXv$rkfn3t!Pu;B)YR5K_mHE9x(8 z_`xo02lLE$D2y4QO{r*g9mNl&Grq>3U4)GI4N+k}Bc^)C(3 zadBkuqZwrv8XI?$m|%}V2r2%9de5b;CjyTe^E8d-+3khu_ks3uLLTdjctdt5A81Q< zgpaF{N|LG5Gs1)_f51HJf4nZUxI$w@KoMu#E!g))HS3K!?yvnp-`~#?aK8dElO@hg z3sZ{`a)l9s=>N08<+d>RrhDI&CxxVJ1+F3$q~ck+Y^V5!@0i?*^=tY^Oj+*G&5YdC zWuPCc^mbf6!`~g2=r_B;@t$99>vI3-<40NYGt!&7iesi85?Q0CaVhx}0Gg_MzfxKG z%_e#iVi^pV=Rz&&Bnvq+1~gOc^Tc=xEz_^eEqIMRg5V=b@-ZL~iwfn&;S-i=UdjhN z`|%Fo%M)SuF^woMw-*fX&9T%X=XrS)6XD%oaLDuCzWfT2$d_=T7wuDre5LxNEgEg5 zVC?e7Hld@fe*Db^ARU9BoXyPj*@aZ)1uV<=;KsFv_RDvvY~fc&@jBZTuD2(XYtk3B z<;Xf8k*>{lIlq6_3Y=J{d2bZ<{613}TfQmm_|@jvGvx>7-UG~XvDIkcgLZ&nV&|hS zD=n2k^8W2|_SLBAu0~s)6D#*$SNNc_n4^GVdcxq!kg*}evHwmrj<`jBranLBik0+Q z$#7sx&_!8NYNf58iTZ4N#~$Mv@0$$UAJ?QP5O9h`;N}^qMX$TmfepR;hLdjq4{C)B zs5A->mO={r`%eMYySVM~tFMNJ*#EyX1pmi9`=6O!DH>WHi|WXq$&frE=%}d;7+~m* z_`w6}dHLVenN8`8;9ON~hm{mBi6=?UMQFBl&h%kj3+ePMwO|qBU9{gePCp|)BXVXe zrJ}!hU9A{S}2zU?p~o zXdTVjMKN;k5aDtojLild5HLOv$%Oiy<>r+??tgx(OGY+2-i!)^AVCZGlcMcgg6~wI^G$P{9JnJGoMJy@rWmN}oNL1t{wBU;T zQQ9Xlg$7o$^z*V5PL2$9PWKfx#G+0F0c|f?JWS?J1p-wJfpW2pOklyrk76n`FicNn zi;IMzZyUdwWaWwp7`hBrb6OgbQ(6`j(VU9=6;;Yx$nChZ!_8jx1?^E;;2Gp!*$>bC z8H~(urg6FM8-zwNm9D*0yafoQG_`fvAgc`T;!!!mpsR`slGZMj3bm!JwziFKT$mhO z*8S9Jcv)9`+TCL3c1IreH^`^k7UcLM5ha$B%`77`q^neZ@ouifR8t>0BrPdW+keDB zV%D|PIr$vLXMSQ+NZia{ky3+T7bvTb{IbU<`IZhcm)-&%ZO1C|M4Cs5w0~mS$Jo=Q zH&@Xjk8%JxF~WIj^j=_XpsE5jb(BZAD64(zD5RC?tvVmg&8Pee&sp!SIsf9u z5$y|$R5SW0+&xHXCqij7zmMt*o1O1=D$Hwqra zl+9hINHf>~L+B)LE5vvg<*x5Q6^f};U9q7|`7yAYeU-Sgb`8@dNR6RgFOYv0;Y4PA zOT(Xh72$Oi?M|1gCV6}6A?cygtml+UC>t*56Zbckt7{TF{ibU%p3y*y_`W*i$8^KR zoO@daKBl1MJ43NMp7xb#DnZFktHFANIYm;G0_}4~ehz8jS@2~`5haGLlcu1wkZ%0yYg0ONZ38gXo zc0*DCInTiHDAWwC`Kd_r7Ml?rRQE#)N(agCJuS-8^scERIe-s#eHe<*`m%l(>HM2K zD-T6}OtW2;ok_q|mF1|-qEcLvth}5AolCW6ilA$D?IsR_)O+yy`)A5X51xwVcYBY5 z@XHG&*>OLJMUp+l4?XGub?>veaG`05?e~v=GP*&$x8JFw1deUPYZ}1K+(}zv zNEbLFxAnMge^Y04if}ol%J1Nu9rfb&w-#C&zow)3vIG%nSI~vP_jIn1>NajW0bjG&4lzFJC19-d8BQhx|GZ5`7GOuuzBv9)uQrU|4>mleflTGS+0tS*YE4vQ~RPh|JTBD|899H zYUOBY=KR%pBbRqjG%_`{vbXq;9$c}4oXp@iWWU9wk)ap22U<@{NUg_T(3aHV$S5H} zqi&5u)tTFMc%gsj6(IlVQM#piF3!&b?qL4&nUIYrxAq1Ev0g45SV&{!SP*SJ12f*- zy)T|GE5%(`WBUAiJY3yz*K$0>=3<1^O4_W*!bD&nWA$)YlKW#g7a)k1xI80RDZ)GA zr=!;3B+XntDL?6~CM4;hLpN|_@Ya2N%<{&fZVV42F<9A~!)@TLXGurc>lZ7r2rr-r zZ54@aL!+L6^488U5Vc;+vT&T?!zAFI5Mqag-q6}N&3r`+OAvq6OVX2R;ujl}Mzo{e z$G#+wL-P7hZNRRdZ0^rrD8@g`SN`i2SN%6}j{j%H6=g(KSln3*IR3YVpOgj{My?vS zN#dBd?26hWK`{;A8;3q?2&YDcfpAWAa@VAiH&0FHsLMU3G3-OSEgag$=BMUaM_AUI zQ*-tEhi3bkNm}04RSb-^h4SQM&<|X^MTv(3uaR__l)No-DeJPiEivWMSVa3^BOzU- zpu(p}P3wKjvYPeeaz`n^%-<~q?o3BvG#hhP)Ku0qxl+>RM3wvl5gG7wegK~=dH+Z6 zBlP5r#Yb2YXjCK!;RGQqVFjTz#OQXXn-gPzZf)}Z>~3snw-OpfJQ%01r{!x|;dx;o zrZ5GwQcjy!VRK!e@eDv>?(+lew-QVwsaINRTXv&>>I1?VKI2{tR$1KXT84>B?C*optm-m(3I#7L{Jz}o=9=U z*draIEK&DS>ea=f!qrjiNLL~(vFi1QpiuC{ZBge*j2pw{QS?Y_Fr8F~-o?5MhM=+W zXX@}{X#GnGoqt349JBC@)eYe+9+5TRCL=*$oGw=gW+Za3CAakwkyx{`r~hI>%0;A=@zGClAV&8iKlU+&-Z`k%uZiQQS|gx&*wRv%3l&SNy~$UoHj}S0Viqg7O4|aHQj{QIXfg?oM3x z<{WwqDt@C5E}e|;Ty&b<|BYHC%_`bRkfj?pn~o25s8D;12gibDz6@VcR@9uiA=!2a zpEXc)Fkdr7BEX)QOYpdyV_H1pCMB4qrXmCMa4=TV(w4jGg?cFL?8GOi0rU0||B1#( z55Y>638#kZ%X!ARjtwlW?o)X4{C8oKYk}Qi& zrAq>M{{Bw~_U-`8I$o@wOtn{ken(FBb^C;Jms=) zRgo{w5AHYuV-U-7Wpg7`AGyHZ5KZ`T`i;8eb;QqE6^Zt|Y!s1Dl{B)KjaTsdwS;Oe z%J!9drCql4Y=tOVs}4_wAHimcvNF3txCQyIdVReBnYdwN%N(sJXp+Lcbgh2RMOIun z6`R}d_)nU`7c8lZ_(PtpW4>>12GaYx;tty3+LyzS+F`!;B)JCw2@wfZYc@h20^2xL z_*()2bK*ua`4Y@mAp_W0TQ{uMVv|Megxn0#jDkkiO6=(_*oFd(%sd?-fX&Tf%vyOQNlnN56 zNBX7C$^?oSUFg_4MJ9a)u_b3hUSbi$aTE7Z^)Y=zaa8>Ft*;D3t&apW3=#q|8ZZYD z0uchKOF>LZO#2NB8O>3wukD8oM3;Ks1w@yAA0C7*-Chh>4caXwr~{^B_m5T>&&nUI z0ME`J9x$F%ZYMoBx#!dHF@BBy<1pPF*d2QeWP24oT3v8f!E9~;VD@J|QUaOmmAZcE zNLl^hVd%L%?Vqe~ZBEP2#{sWLgA9y+8JeU0bulEXm?)Gh<+Uc?wGZkgBg`d-Ni_(g zuZPV)U8>9b`X05cXSmo2vT_-Y_nRC9aNOI?Q`GGnTFRv8noTQ~Im|?&s1ot)-1Rt% zQvs8()Ebr)O!~S8UlPGpV38@(i&a0;ao3qS{DBLWE?!Yf-wADgDxg1XbI9Lh^Nv8y zXN<3O6!a*V?f5#3-EA{*PP3(NtqynN%zUYdAF{=0tawP9A6^6nJ73xCnAORTRh-OwjqZSoy&57!iKsiF3esyq3Q}!9ld7|-`U|sU zrPpE~Q1t`9R1_TVt>x7RY4V}nQ1u7LJL^RTkO`CO@N!cfX{c`YO*shD>JV}hn1g1e z*P>>n+Q4$t9C>mQ9VvRg&?Mi4!=52XgVZ`CgM?ds-;_!}IT5a&nd04K=4gkz^;U{5 z*xiIWxZM;-K+mj~5cMeF&(EY>$NNR+tS&*Lz2YFOAv1 zKj5eWs0O4jkNO=h+wgjijx@6P2ge5uh!y+_xtI}{Y`%;kFo`Lv+Q z%{@Ho6J9k^>eN2uw?>{W+2{mo;E0zYznx)KuzGV{0>sbVc*6_a z#5SKImj0D2GYlj!AnGx$3;Y?i7#MgO*U0+)1NZz*Y$L^~=KHtBq%xU<*aUKWLa91w z3AZeUJyzTUTmPVCd0b!;w|KxaT2Xm~Ecfi8X_j8H;R+BT#v*-tEya$~n2hU&cq8gK zwGu93&=MVw&=|w1_C2x9Duk4nVhu7$*EPev4TO%GfeSnJ{jLq;!LI3m%G!p1 zl=HEZKqPCL4{`j8I)9vHjZpSr#dQlyr4LUJ2-pmK0F%g6kA~Fb}VeL znuNDU47W6anN(IDOMhyPk#W#6PF>L^$+1izm2W9 z{VkR$m)uc_+4`2)1pqrTol%3Jb8NHo$^m(79Cs@D+JRJ|ZrYu5b-h5~1UVsgIZbsv zg{F(d`GQY0*!EB>r#qA$NnbXu7tW@&^x+goV6(51F@rj}lgvNloM_Hw_YKPrRZj^{ z+nlm)v_`eWAl0M`1tLtyV#NV1)G9yBT=`;EL{DBEG+(SmTvm&K#rE!mtsKKzGWj3E zRZZ8L9M!V?UR!NdoHOc;iz{;YLlyL@T8tIsZU!Fl3@$hB+D--+tke(owY=L#G6%mC za4SyUAapnZJ8h?f!dHSW$#L@+{nOPAQ&)v4k|qv;?Xe92ZeEDNBExigEhbd}hgsYX zP@JQsVu98uKu#-VuI1f3P_FA19w3jC$(R>@;xMs>sm+itnL7lr8Hvj;dDVk+%q@B| zHB9|i=pX6#PG&p`A{+>aH{O3&82yjOrT^7|{TI%u=4xg8uLNAxMrHBKkd`j)n>M;4 zx))AfsB$t0Ev$Ha8l=(p@82Z^8I2;!tu~}Y!e(A1{$RZg$Fd$CRtilxaak$n1qRl$ zb-%ZrZuwkqZ~u9H|A78MW80ip4mk~hP+s2(G5r8EYlDNJiP0{sF}`G*sQ#UgAAI>tyC~3MncwmKK&Ze0WOQA%b^OzXq>19VdSQ)e1`L zXBVpptg6m%A)|;%m?bLA)1vH!Ip}jveppW_X{_380Dw$CAjMVDfYha9?E6SZH@6)9 zru{3+-2?f>DICArDBQ!V5TTKbISOxkYwdI_<1eu3@a+_iMXS0bn5X4y=1cW=Sf+yW+1 zZ8g;6$6*Q2wRIwol$>~J%npXMM@954U}+;O0@?A+m_Ag(=U&~Bp!T8w3i^&nm}{2q zx?(mIi%^0LHv}i95Tl&i)Mz85ol*8nEN&143dy(u1_E;Q z)!X^6y9^TlW-a@FRR?(1*i=XVM27*Bm?m!AG|fOkXN5tBg&cr|u#`%Qmp3B(ZYUE= z{$;dwopLSryd#(WX_%et!s~xUw7mFE?l37Y$uqi}bn|}ganpIzL-jD*+xr(Z4>GM% zNeiJK*9XG(p)w;NaQGv`{uKdpNi@T{0S6Q#@J$7*f>%whxdXyhZGdE3vAR9nAloRT zc&1|N7EL(fd;0f3Pi!t^^gC#**imy`CgCF`gVu^s;w9-MhGcL^v?vr?N$R9(C84S@ z2&^$Uk;9bmZV6DJIkS`KA>X${hMN7 z3A(Ym{P&bcw>bhzh^1R$mSh+!yTjQUcmvCxNgR)#1^8->qwLG^C9+}bKl0Ix9=aOJ z#wr+*;+~lxwU(6KVw_#7jKtx_{fvf-U^W|5r6v`d6&+*|W^WgkdDtl7MySno30E*v z>Uc%1j?OraTx4k#5EC@$!n!h((vI>_;hd=bE6?JEnR9OmRrLj7N(#__yxij1Y2O#zhVbgT*~rGUn5R8&&$O zxy5AA8^^Lq$Bf??51DaX633IL5av|}3iSjRuM<8DQTznUrl8aDIUdD%|3I~mk~Osg zag(*Uhi03$Hdk+QuD5>UyaY(EBVM!kfxPi6PApyTqEO7r}J;_SO6dCPj?kmaXRWzOtwfzJBeq>}Ob0 z3P{z5Yd2q=u6F<|#bNFw5I{aAr}TEY7oDRFXC(P7&oM9aA3@Z3=+(G`^RfmuY`Llt z{K`=sYDgmq-Nm{sIku}PY-@#J^I#(|W((C;(L3st3hkZpiW;u$V^9;(1C%UYOUrbt-l1}$8j*Ec(Q1K+_Kv99tB_UY!#d#Rvn zwFYotr|liq#foCANVfsdP&p6m0TPZ#t#V%_KoV+;^IHG@cSNHEv#2WpE;*#I~`;n6K}SQrmAY6Z(Q3AHd-k|Vf?uSiNA;RDB+a1m6uW?4VT zfMCjGq9MkLE^gg4Q-`OA}QS3eo(c4`JQZV=I zJ_=%-i)Z8@n;^VV#9$$Q&e1JQ;dK|kOp z+^v~EY-ZUY^WAGMOrS>kt;SnR#P`6FW(3Zj&P!xkFM_&}bbC=q0Z_S^fWskH&MHI4 ziaVyPx;yb8Sv@V4v={|6gc!~q1#Vh^gj63vh^jJDH_ND3IA7fQOX`K2h1@o0kMpBH z^-5uk)VW?>sOo|xr`>lA)LJG{%Jf(>2+0ByTSz^X_u4(G4&9nP3s9-9G=I<4k$1rT zuNhCb4*l$-<>_vJr!L0gZpPv+!Mv&r+drCFD^OEK3mNhZ56N_y`YNR{OlbE0=M8Ra zFCm%V8>^J?b{!WbQ#p(eABJEzO0DT^yB;j`kKEsE2W)AbLu@hFX=9{(e-24dW%v)$ zNzpTjIyc$+rV=k!4wpnhmS8l=SLfMHjNmofBzktzM6_B%dP^S2;nf~f%}eKMPkE8w zIT@jf>V95ykvII~4{DTwf4{BLSCY42s-Z zi5VOqOwI^S<9Uc9A!D9FLqycy^t;DX+igf@@@+ItSHc}ieOc{Lm$5hp%}9eWDV;ev zHNCD)N|vJLb=A};eeh#eRfs4(y?{BzFqqb<&+}M^i? zxI3v;x(Ulas5%P#RI;gSxcPbuulJ|2Qx8S*rTJZHm-zKI+4`<7#a2DRmYJvlXGp4J zwwjG_TZVpF0;Mq}-vV%u?>@ot_^;Ol)pH0<%5~6sh+0j2aSr^bev_;nJd@&!hnUssBo_=DiHPc?gv{hJv@^kpZ+(bWc<<}hfuD3 ziaQ!HnS80uQnSUKlRAk`x+4G_DzmIaC+!g&oY@I(x?O~GFz!oQu=Pr;(9E9?V3jUOM*ycB!UP9?K=+cfjzkA@TJTB6#J zn}ZZy%T)LkK*e!`>Y-v`GtpJ9U-HPwW~2tZUr#P0IKei0bf+A>Hp+SZv|GCB+E84% zxcQ{Yn+T0wqrUp*utqeIv&MBSUILsh&*CwgW$Btht{$Y=QlE=$MR(oPgTxJRJCF;_iF07?ns$`vhoonQ zfz+$I8sHDk&&%xG_6##p>K7kEf9x~XRG))W5hhAShi|A9-r@-XJ$tN!r~be|Mc80ZdqDl%%1kQP}f=rrQZwW zMuYr(@)Kc~uutq_7v`})JAGxa=aobyCEip>Z-7jw)G@1@Gu zd26>%;>*iBSgwmz>i$Eni$6tJf<3s$QU}+-Y!1&(;c${&-T(J#(0@c!G3zM$)vuY| zKKTDgzW?v!s4r3J|B?OIKXtkO>s(&#-}&7C$&-*Uvo~`#a&`CzYWpv~gqqGj3gu6A z*m9PgNNQT?%7T1dut*JLNbxG&;>blD1Cb6Ov)zJJOSIqP>PrRN#>^Uy-$Osqu_vcp z`G)g_?96)BgP#whPs7L4`=$rTp(mQS1v;!~m|)w?9LI56>`(LXnc5YdV{8<9Cvu0m= z*d9@MWqV@T)q|shnyWV79;m-?19>aDG!ro-=B>hFwv6U5lGYK>fmRP0cFiUFiOwSK z&#CQpxIBx^G40QoOk-WxjO^7m;u_pupJ{9;yx{g2We!%(nd>pZX~7ET>|T>1(R0LJ2wShG&dOr3f%5Iui{b2a zCdi)mU8&~(vm3#42R(D7%A{1c-|iaCEN_3q z=6|vFj?tAx`?hZ-l~kOHZQHi(RP3y1#kMN8ZQFJ#wr$%L`(^Ka-n;F!x9@K4oOeIX zPiuZyv&}jB_>bOy{R^!-tz6n^A7`-p(iNll&M&e&@Sr9n(IWed>yAOWHRMixv0aQ7 z)U{TX4q?6+-uJ6jZ|v~y!PEugY`ZN;`gnFaSP%};(TpRiKpPG?%}}uufI?o#5vWKx z$b!??60kmxFhJYd=7sXTg?K;*HQ7#2lpn7oWG^->KwGDW7gf!|P%~_Zs>(nqjFJ+s ztUpu5PDjXEUo0?++_9bSrq1!8jQddwK@#Db>wN?#w@!uB36;9KjCaqvyyMSU?^Q~@QT4ZF*Xmv9-?}ltl8C}Wqlm;C zd$)ox>{P0|aa&C4yNcO*?VfVzS!15hkY#@f)c4feSf(r$hEKpgGI+MY51Z20yVrkW z`VjU8p18k)PNDxX==9%}SO5GN{D0rx|CMrTRMBvl``V9-z#@qm*bx{|hipiP7$!9# zNQA~CXvc932rxP-pJV3}NQ=dNzZ6?KvGK*9?zkfyZ(y4nXSplPJc&NN)7IED44w^M z-2-Ggbk}=5u9tUze0(LH>^$iWf&(&jWDFA;0K^s8Qp~c#7cgpmI6~XsEgCxjHwd4+#a+&UFGTzp3F1u5BjDHq>}#@ax8 z>yxCnN&k*gX1ZYq!b2^)jCty7Mvt3d828k{q?Iegy97=CL`KzWFpN#*1Sw|a)}vyW zJ8(KkUDI{U-ERq#Og&09OoA2u(_}f)1T~oqer{x<%f5o*Kc<+ z-yP=^VeT?ASsSdirq;rU??H(R5hHL#gyt)5PFb!aN%iv`J-;Rx_o$Az4kA67#FdNa zk2{6|*#1YBodUtY(82xV!4eiY)Jz1>NM{H)Wdl?zX{(IQq-S&9O=VmVwE9)Uq|*J4 z0_0+p8f}7xO4EgogBEQ2GUw2K^Lgh^A+U&!An`R6kE(J0inuint7Iu$HLz%*vc37L zl0notJ9M~E4pJf-A|fIxA~HjTejuWenrOdh2BMv6KPTdmXb0skEy&Hu=kjTYFYnID z;q;=IA&GsmoI3|or+3;?pBHuaX8S6oj1N1v4?XO(N3KT+;a1^0isNO~(l?ioYc(0u zv&?$w`)ufLP<4Dg`qLBZM3oopwWz}?b+l`*?-7j+yc1OI2-ETH?gHqJU!Wr9EMj$IBdOPN^NJ|G6HG_9 zkzp2?nrH4e7hL4|bTx5m2EO9FA#Z!Vj0M+*b_wX6{~WH3QTTn2VyKV#J1g7s8f2Xa z5`y~p=1)7oC(i{nnK`#o1!Xa>7P?FOW_rsF53~_`d;C@MQh-EW-w;)exg29k#AnbS zx~s~tw3HV(*F{trCSMH5mHjIGNYxlHBb!$aY!zdin(ope_}DR)eAbA1tvo-t_q>T{ zCRS1Kgr?N&F{SPe+nTb?&(8Pef3M{u@gcz})YT9rLWWjV)I2*rCfK~?m4C^41$6JN zGRytov^tcVS(es*1^=1la&vj#X)3Yj*$<$ktz@L#i;)l z<|qbjPl7xH?fwnSKEnMFxeowkmHHQ2u24M5Q21+eJoR-j@xRwz(*G0fCG@{7U9D6L z^*~-i{H!GPm@tPL)c1D~graOBB~E8vPUvTYSKOse0wAzJSpaFrVoB@UK{N1xlJ13% ziHi-g?xb>>vqGRqQIx;&rvHIooi4I+e}l0yRi&0rQf+$bI(@zK;66%EWw%jvKj5d& zgqZg8QR`KKYDHR7*_8u{dijwZDh!%&4+p^o_G|tX-jP8^H(Qt5SSLK~8jzsEkYidT@vwMfL(454nb?Ac`WigfWMT z(6B^MSfFuWty~nAwXZ_qCuu?nU5>d(c=RKAP=4$-?-wkDMP?^ZC11yPT$%-kyneD87@S-NJrJdM7h5ZFp7W1)OEZc^CK=!;!odHj2 zWa*S8S5^)q*3~j=6A5Vpb7>GYY*losE5(|kHYY9V4jgV_dXDiCMtu}Ut30R-(F1iZ zb^oxnk~T)2?EGZ&t}Z$pVF`}!`)2@F!!Sq@{(5booY}7#ac)ZRQ7;+J3Rhyg>gwt< zGX>UL1cl_CqO;3zSrXXp+)`-NyO-y>u7Fr#Z42mpDVp<(2&%SC>|!Dk!(5!LvpT9S zvtMx3GtRUb7-|5qC?yqDN{2g6npIk)d}KXfT}glbW|YJ-I`ce3vnoIv#v>TGwr!*^ z6IpVqa;F~Nys@=rcz~R@K}2kVzuD%?gs)^$?KE)zHlI-D)^K)_c&s^oyI@{z@}TG` z6z;)2QS42dg-?%rS2Ym9yhQ)#yzeaK-{~J3?AO+;7mlMkj=dco*$-~nu*BQe=oZX= zq-s32qN*PQKhE8Qc)YTG$TkXBS^meJrX&Jfh5o>a14)T>)!RO!p;2ObjQ8T=nC6Zm z=TY;GBtl|-Ot{Qg`4XjuEYZf3$XpHL0WCLbPAnlOEj~H5$XAvWdq1EPz?h$>2z|Y} zdg}OoG&Gnf_cQPiiRRExIvpj;I#;sCHg6`eNmquy7h!~E1K%ycU_s29k9- z3-Pm*9leZx`Iph`mxp5pp71RFtUY}4p3OV9dPHp)_p)ek^d;!>ZAK=`;uNN}!g_2g z`-+Sg?RG<5+gaIS=qQ`0oY@=tXFeSLOS)2F9 z49cN41H$m}^xpY(b(uL6r1T%@VL>{Uc+IGcniW$`YXMEiZ%lx7&3^mewT7!3x-{dn zK`;ZJ;*#9xPWqWTg6*s9HJ__5dHvSd9c0y{oCggLs18~UR#MJh+n=bl7dqzk*!VD< zBOk+g=BERO)c3`48@e#vzko}^Z0$)O$R)$Rdivs3bMWcU>d?Vf?WY&y$BnkwK}JtG zqszXCnAPIygG>>lCE~5HP^e5v%)gi`ep3K``Ugk_kuq`J#6+|sB-VoNF;$7n3`WA9 zVUYA2ulqt_vT~4oHS@U#XqV=;&PA#I58?x1B@${b4^;Sivd zZ|AU+8A30_2D7u4WD`u9OGiMqHq+}eUuM_X?2l3T;`+s(T8p?PES1fu>f|?CO_>9> z`e?b|X1a^6Y>r>cQ9crSr;eVvWptOf`Y3`WENG^-Xh6?*+a*0eL4%Z9)`jP(O>ZhU zi%7awPAeR;_|;Z4FPBvnl?A8dbE~Q{vX56V%Ss`w@H{JoQa-NA_h<2K7ZZzZWAkq_ z2IvoWpU}NB6V#e9X8@`}Yo&bfnj37GAH#Qo@I1-2j%e?{%}t@{J2RZc`MVM7GidS? zqx%$foM(|XjffqM0@xK0XM4kK6(xO-u;ZWXkkH+Eq9%rF=Y@fp<>#4Vg~3QyPL>Xf z9O)Dnt3_DF!GWxDlPi*(-HWbR#q@@*&>kkW+3U~kVVhgKN z9HF=5c7p4dvCX7*l%TiHvIb>2`IMdntEP2mNp3RZE9G`bz_-FoZ!$Ebe;0=)PTEs1 z*>94^(@qd$--Kf_POwS8g*c(Ly%NFWiMQ?ryn@0%*aCS>n#peNDPa-c<1ya?Kh#qq zE%?Z8+9}Uvq^pcb)zt01q0g}9^2#-4RH}O9iwU@jcN{Yq{3-V&&A{t}DBw*3*KT1) zGs)MJCwzG%Jud=KIVWyfU)4=E#BVY54)5Yqc#~!dLd}6yP4)?r2NCIhZWF&{glE8- z8dPKXyIkm$Eq?gW3m0j#EYlWhmZu?6Pi))x6)KC-M};`;z|VmnUJRCG#^1^6{1J#g zLRw5?Ujo=wkOt~0)yo5{ z@gw#BQ~dnD6LF3IrG04Q8Vx%K2lf3Ne5D*PB*mN=NS09yvB^3yV*GM6iFRc8S<`FlV>8{& zq0{ZwL~ZKxbp_^I+6_Is2>W7-;>DmQdx!Nog2Khft8Ak?7zb9<4_O|HKPxr&62afp zgs&wa=1}1lk5?-PSOL-B9&x?=A)1<5*rC*u)7@X@@)>FOTa`1B2)+uCh1Z-}E{JGJ zznJj`AQpY*B9cQ9ASzIgkx}J@!UB~O*o&;f6O1~iUO>_$Bn9LdWaK0rrZv29B}>Hx zGjxJmgm5wmD@&n2X`W0HU5m(oY%~>RvF<$TuUy;=`Z~D)k+T|40%SQ!J@7Y%OnTLk z4)|VdfNx}yFJB@{gNSEr?m~m3hfuZxti>ie(=TG)sBT3$AxN)&kkW_3XyN07D;5R%iRs^yHnrGjPT@A3j4-6J&SDfnUL5U;7eF!DYRCV8ew@u!)1dPYNE;ZG$sV?0}fy6=3D z8BG%5;#^70T?mrW?Jj#WaZamcVBiyU{U{e@+g@F*>-VPX#M9ic;8W$tkd4LySo6I`Q$S8#JIajQp_+ z1aTP1 z3nDHN$FS`mYdYt<%~01a$v$(E9iqz@)EXS}nZ+lQITuHhG1!&n$Xvqh>OsBLaO=NK@9y%^TGg z$Z5HHA;fO1(Fe(+M5oR+n8GxV6 zXr7R6&z!_ad+6FcC@Q*}JcWDaX_yJNTm`)AT1}$CvCWw*$M0l*fM;PfYxz}62l@C{!R28ms|m zd~(?65}UsxTfVch_+b8_a-0)37QBtuMqyE%Qx0U0?dLahhFK>8dFs&c+&CNCt~RwD zv9b zwK{&pHBwjx$-MqnIGNZ^#`G*7x?29gD0@TMbaT0aUH4uUs0I|*Pp(Mp*qBu~ytvg) zj?{8fJ|uTe5jY_30LQP-ap+)L0(Lakg^N8L_klcpl4%3Eh!)RRpmk4|pzqD3cgFFP zyTKZ7Mrgs}SoN-a;n^-z0vfp!G~NpOdu=?}8gCpvGcIV|TpOn-a?0kK;K>B5z@kM% zQ~S!y5$K1wF;doIqA^qZv7ToKv*MRs=rzW0LaM~0HVYlon@BvpN@D+TZ}%XtMo>6U zBvw{TPt&Z-9_>jSR{6Dc>vsKgPjov^EZr@fsK**peqK!NG%?&@$zNptFmni*%(h%| zoN_BkC3b5`Rix55E|E*~Z$(SLIDKa0v_&gDGGa)tNO2$BB7{a~9h~7I+~1P78R_e{ z4wr?|x(o9%1*Jb^ivxEC`rZ;vSB>Dck}tFGT88cDFNxOWCo2i?YO#CzNIa}R-sp2@ z*yW9`D{Q)u&_c$@82v%AYyNotPVLqc`ZR!gZ#Sl;>pv?HQCfKWCtl3NRa{5-OS+8z zN9iK+Kano~*8KMT5A^Ow5rKc7I_hIpZKajE5#+94E+k0dFBFzVEGvuP9Yly;nT*t& zldd(ddTgst$W{C}0B7-7^?Sa%`;`nNqn6|WP8WOYmG@TX)yAtXna}6#+SNCrr&iR7 z$`~!gxEgLF&0O$UIE^NB`v3!S+BwvEq_kdKbkYXcw4@U_$>qZ0xF&%65}NQ~MGcR` zBnteE)}5oK`hK^xy5t5jtE;GhN%&v2qwz9 zmD0WtY8HKo*?lyzhE=1=)2B|Ro|Ccz5sK=k#mbLGAe5HtG_IGTYcFBv#v5l$o&f2` zM?kg2gVGO}Oqd|)o|tX@rn5}`dHj=3u4(x(rVYd;*7zj8c%)*S^gHMAGwC*y)z$v_ zk@O%5k0PrXdru3g=D1ZeDHloasW#F}&Z5K!wsNoPKP=#vVTgf$mB3^ zM;4`=ZpYQhv~Q${m-}LQwd9lKV);N@(^TBa-o3}R@!n5H-JvNU>$Hpg=Oet?KwP3p z(E?#Vvp3Vg>JLIWRfa=2uT2E3NlJ;a}Cy6OP0y%aZGeem#E!G_2&*W}ohSWyR?oE>KI2A-bR+V5jWZae{JpnS& zdwN z-BOs+EnNw2x%I7bMZSvRyXoiaP87=@?Xd-Nyeh#82PDtUP|dToWw(;r+WY7L{3rcJ zu?n-MUKiblai2=$v!`H~kAZ3dpW?D*5*%umdu4huEjA4$MyNfwdu!gp{76zony!G6 z&zTjceZvK|s=sul$&~@rJEu#1om$*s_%ju2<8#4HRnGsQ@XIo1063}*(Rbe*1x2Z|068t`c9Ma9V^pix zpi^BfnBq5aLRZs4etaDj+Xz)m;|#8_nBea`9$;;L00~MA-_mUkG!zlWDSc*bHHHw; zAQt~}{gA?-ntogVogzPsI%qM*F#?Q3lnBDLAY|KBh6ob>g&;(2Kn{BAp`u5UZdBs# zSyuSFYufyid{Fe@U9CZZB|Quc zF}MKb03IL%JWw8HDLU+ z3i@*_akA=?r%U|?`E5i#?vh^!bqZYxR|J_Cq*KsOON}vQo8_fyu8PDd^F4=^iFtH=YEhncn8qDwvw3dgjAmZ;+1rwopBGrEFeZb(~r+#uDUAdxc zW(kzxJtK=e#?{2WcFqo$qF1$!xIXSNg?Ey_PrgYAk`=oOMA1uYS7SSsmpGf2$;X7j z?0;SFF9Su7eWd&eB`oBzW5{Ac*N{j48`^lO~1{a@JFfA2N>AMGgrgVF3& z4OtxJ0}T{rtSs?Gpq6csua~R^tVHS>JOo8lz_7OVXPf1qG2=>PI}GcC0e+KDfRE@J zV3>1)llHyQ=a>AIC7ux5Z!?F<&D6}+t@le$2h+OGx7VTUZ@W*0Ft|D)kY>@aG%&{< zMw&$~q5@0fLVquZ%{(Q18KkGY(f~;YnlgU~{WZpCc$~uz&{^jY5tvfg33L3@Rve$5 z6n*=#ht^5tK{nou0jz*i(5QtMZ!qyOrf5!UOjq$gf_=`sa+gyxuK4)syTsIhd}?Jm zzN3}!s7|2_!mJu!yv-ENK}Sqd0+p>Sgxl%1rqWWnId+`6vGV#wGT8!hrXblXixsTT zJ3!_E&s-B2&IVj*<*j4iO==wu8)wG)Ma({KQ-KDMn_8e2S6HW!orbsCqAJ;->`>Fr ziHH+lPhH293phkG<*CmUmSA>X@oF)}*`%qQizn?~3Sx^{EZ6c(L%Ya$Ps!Xon6WxK zm`)gRx~tu&iPU4P2Mn5g#%@8@5R4t?X6M^9^vz5uqFe%ulB%nj3wovJU@x3Fe(R{R zIO9?V0@x;49L(y=gvvXd7e-3;xj?HvvpE*}b;)Jk(a0Q3^2>G@*Ky|jU&w(CGiYFl zAn$SG)cM?=rQrSc3#By|OZLlkoi%9ILaQggCY6)VI33B|EQq2)Iq34_`=JoYMeo8n zNOx%wi$yzViD-5sLR>^LP;aV29z{Cnx97EQ>$&74CmOvqN8atHJMX`XJXy%zRN@js zBmN9p_V|Q!AYoESBFxtaN-F@Zg~j5-f{Oav9o$vsp?bSGFFBXe$Yb&Zno%ORuocCE z9yNYR$`;KdbgkCWKyhtWKv|M1mtkr7vo36%p3^0XPEpq?z^e011b5|`=q z*3LaeF>&P2#qtPvnlXiG$~{OC%^IzllqA+BR1{MT`MX9A4BMH|p1~D#e>-%Nn(xY27 z4iB>eC@!T#1d|ztJ&vwJ!B8nfyM(&;#o`&phk|av*{PAl{*Xi%%Jzcu#MmMRiR8{A zA@K-+mLm<`P_k#+-Ew-t$*lli_T$aB?CB;EjAFW+xK9WX|M(PyY{lVump|2Sr#;g` zNi=;2MGrq`c2|DKvsFDo4YN%^3Q`vJR1r|+#1R5H3sVpf1JZBr*mxtfi81Pc;EQAT z{KhNH_81(lKc62Yt>oAsxDlQw%hP)D&Vm$Esznl0_Sbrf&B{K0&JC#!cUAH&>>$`h zuW9;f1n(~ufvM3$+R7WAdP8k~?SG%?j&+UtPAa0@X(hV%J z=eXxiN}3t4O}Rl_7Cbd0FG;G@-M8+i)<1_d84E@?u)SirbAw~t)f#!*T)MG57<^0G zuSBXXGcepkx4VW!SMX!(-6qWSu3SFyUoNryR@~nSUoNqz|8j}_`)}cY7dP-vW5~ZN zhtP09{)gLE(=D*U7XaD6>^mH2356z%1iJqRU8H9azSq~T>fW5Dy4EFeBhi02GbVkV zytSH2_b)=(x4o2rQE9xt`AR3LIwN(YsYF%wQ;v^I%z7?U5f9luKA*?}`Pe4CyI4v1-=NE79ipHO!?hpB#DcFi z1W$%DwlT0AWkKV%q2y#PR3WVxXRKC3p#WqN@=Cd9i?%!LGAhj`ot-50l*Xy*Can%@ z5gSYt@a0=5w`EbZx-pam*}ImN=>$cugScX3HWO<4ob6XrbZR2< za@#ji<{Xz!=l>SNs$p}@$7AB88wDj#GL110$sV>KHLMaAUv1QikD-8d$uL+&t~s$I zB9cqYFBddY_1lKIO)VaiO|Mj(!O;yoxPSXxY+3E;8K2R4baYMvbzXoOzV#Ptq{w7{ zY&ns|nW?Pc?Hp(Opry5`Cq`ahg(wFlgY%lz*W9c%9j9?9VHyCg4l}~hnznDoIbU?8 zKKYr-0lj$pSl0I^iR$_{qPxq*c;;ld1}0mq8IswMAeh_$+5+fuK&0id*<~qq9Sk96ajj>Y;9};XEZNPerzkxZRS?5C@m&lCy$UGEU zr1VE$Z8VxIz!fET{;0tkN49c0|3D7AIJ-)) zP`A~lK~*nOwPDM#2#IMdv$f69f2gheEl$Ooa=J`BiL><6K@ru%R(pUiL!lOnn2JqE zHJ7NukRCmKx?~rG4$rR_7ZFu9#GbWiS1@D0NfFh`Ra=xfOQ9BAzFZwjXP|GmEX3bV zLTvM4o~nm%N4OUkYxSJ=BNTNoV=z9_q#_{{fU82T{XD!lDof^&-5uhs|< zKJJL*JdFK%!i>;e#;TH&}6Ru?>|0 z31*fTDFYt3w-^|y0}#nKT(S_rml@-XPRI{(09;mqsOvNg3dx)q*=O&}Z3t=g?%Zz} z*MNBgz4wfH-Vshu%AM<`a@S9)u46q|UC!vuSQ8-Hm2S7MN-%mul(efC{MPK81C*(7 zDW@lDujp<|D0F6#>NkEEE+iGbqNXT_g2g$E-Djr)y1mAzeN@kLW<6LRBHy3+iht%r zsQ2bx0?b6s-Yj$C`Ye3%Bb8&1>|99(;Od_gYKS&_6?a=4>+cn)T38{i8*I;Tx-8T| z`3bgbzikR(RbNTL%QsnN^!>Dt^mR(`!)K7L7rVR<^&#HTEYJfBKD_pV97=!C3%{68`9FQb!rtu()L;HF>Z}a_@gCVZXkKM%Xk}I|wE_>%zv~vGsJqT5h>&VYhPOX60 zJ&vjnxf^YT8U|A?D8xxQgG~xaekD8TQ{X2lXLJ@~t7z5$cdAugbwH~#a ze{xtxs-Ao~ED=6KNrow)5g>Y32nZDL3CXM|#VM@dkzpqVVJXS(6wcAVES7?C-*X{4 zDLSuU+`XvvUcOA0&c#{4<7DR|pI^nVM$Zx%jv;#s9Ii__QF7zMt~gD<|NEvM94Tlik|aaL`gY6lE>#Ie+789JhYgY zO+sm&Nk=$7#%$<2YX6xmF-}eDjYvpcjEF!ACmZ}FJ;4;L(d2v2qGpa-t0`cZREQF; zGXX@Crj9DTMo25OU{n5eDW!NH0R&DSR4{4T<)tVy(;Pr9a~pC6q!ar$)R8Cz$~XI3 z9Ys;54cIlGcWbk%D0yO%GE^%V0*15?v2P zNEBPJx}3%BX9@z=f-IPTY8KHlukl~i@Qo=Qjik83GfAf_<4&-Y7$_A5`D$my=xJKy zp46mq^&KLw!r3p%+$uJgdG!NuvkP$!6^!sB$$#;R6J(nt1ba^u=}bG!RsvG3)*`ry z#aNh;up@QlYc(c?1^z6Ymc@p)$N@~pGb_`HlM^jEY+;#rce>gm~MzI!AUZdLpD0)dul)1kbF3|dY5EH?N9V6bPgba!D5bnl=kc;B{0}{oE z*hv%>?ke@Q&5{py6%)z!t$OOay+EzuM5w;Jn%%jC(=F)4g&a(_c{{L`AG>--z27hL zBIWf7w9IuG9Ia|f`szGZN9kOg>! z^LrD0=4VR;2=TyI{HoRjcE{ls0zpjY*mS*f|Hv_F92BB$mzPGDL zC#2nA$cv6`MDcaakKk<~$j6uD>!bkClNsY|8}ieQK<>F=3U*KcxPQT?#?6E#MBqw{ zaey|#A2HGzAVdWa(#hE&`VWZ8^#aYbm$f^Hc3|nGLmW03h9a+LAgv`Z0(%CWpa8>C z9O22N5dd8w(4qi`mcapOB+>L8!=!LdI^9Hu->~RvEz_+nQr$K`j=dzV21gex0PMMY zcm9$&^ePbrA^$Xp12g>GOx{BPN(`X+s_RIA9H;1?(k&n~M z*Yyya;9>~ys?*zk?17(R(ul&6pKYMJda!}FPbNL0pWB*{zkwi|c3oGG?A->sA{NJe1c7d< zJ2FQo&kM49L(sX!a(CV}*+=PZ9Zdd>ssu4HT=kHiA`t7aH6O6$0D4y@0G5!k0U7l zl36O7DpWAJ-vKX_FU<}qSV*VP-pTF2{P6zu6pyQAi%3ox-R60K#~S(48P6se)F5?l zL&Du_dHbUGhYz51|6j|{;ak6T_t!Y;_&>Tk|GQhTe=HpTi^C@=s{F4UO{U_QlrSSo z##7sa=GIlSDEet{&bCmQUz5404k}nOBivF*XETZ7v1u!n`t|oWikku|qPR#XnL`rh zkr7UtEBfkhO^W)*x?3$K$7@Ta&cP^I*}pKInc}b4&KVPBDJwh_w9`!bjI~L`O53Dx z>D8hF7ycf5_!}@Am7R!an7TFEH|Sj221UlG7lz6u9wZD&1~Z)pHH1nfBGNG@=_Sa! zM5W8E)L-!i2@R{E&;A`vjDhv=VR=+qmma_-^O$8dZmF4Y*Wt`3T}n`sWWP)(Wn<~< z>F%_+Ylq}TbSJ(O4I#P{9~KS4R9*V|1AG>%j$a#5Ro^M~hqilzw!CP9vem@+p^EG8 z65!vl7L}|{R(RU}@I<&_JTf2xzQr^C#rwgC41iQ-4C0N@Ps=S%SSUGqzD;;hcSl&H z3I`QCng1zPU+zDKf*MQw<9dSahs`QR3(%k`k}%IL&w-Yvf$uG2NDWNu$vKlHC8#{XU-@c$14$N%%B|Mip`)u3Fzyt^MuNey)!Y=h{K z4k5()V{AkPfns1vmN*Etzw-q4ri&^LM0I1-!Wx*+WU2fyX=l4N0B8Pbq2kO-pUU{_qEs~)rtSq519NWKX z0p_CE@Ic4w*)PoiRT2P#Kg`9PfQYe_+348uBT7M>rP8#rYD9vXMFH^`b$gm3vrf>_ zeOGO{z`WW7-_Z=_o)jdhm>Tf~ZdBTe$C;?C{VE+P?LTob6|^(FUUiGox)vi6{mAiq z_FwiDJ9$4g_g@nLjMUg*90;fqM$%9t8nno>tPitlA#HJq$otw*cZc1XytZH+wS$l} zg<&lhimKtZIyR)JK}zj+tvap|jrKeWk3*Oef?yR{4fIaIh5Zm;bB9jdnKh!B>8zYK zc|?UQzz+%mmDYtwsZp@`ef9KscbZc9eNEbS8Eapj2_V}(D9IRA>@97{v5w<@#ty;R z*@a4@t@TioIz8?$0b%u-1PucSG4{LyZ*(3qVjjuod`R^R&hlO>9SZ|KEp)OIH_Z3 zPF;(d7vs*UrJ|tkX;lH3oLl<84EJ!5|vL9BdFyP6Tq?X0|KXcNZ#>JJzM zvnaGql*C3hiaZIowumNEQy&?er_sZT4Y>-HFDFnc2UNZA3N~5>ds4niF|!Eb1J?r^ z%+ymL)=}WdguMct(GGG;tP`H-I15NT&)6dL5<*A+8mwRw=Tz~hPV@4v=ON9Tl(@M) zFm!kM;b0!buZl$aZ>yi|u-hpl`cn|j?@tPEBj5uvS(pv! z68;Arvhh|-?V`QnbdDIxAhhuYaOiL)ji*(#zE|)g?ZRR7XwmQ`zYh60V^7H)wc(zB zF&U4Xo>FhN54#eoe$cTjlRaIXgF`bElK90drPY*@N~Y35|t|LQ#KghD{Ek z{mA;ARCZ?8jCQnJx{X5g{g@V-rK*fI`H+-0lC1P3jM2IXu?!~^RA>}wP$yrFsfq*z zbQwvkzM1^XVV8V1qwP^-1Ho&~#szv_D3=qWPQ2@mNRRr3*h~*`Mm+m!u5J91bl=>@)bV&`1AvHvzA^&>n9+B#W zsW>Wfhj*a%S8vX6?z9pd_D)i2(dDLb)4!Uaip#6Q2Ut@EWs%r{Ra;q}W<1Sa=VHUO zzNxS?!(?ACPA8SulD}Y)hn-_|XMU7QYv@!>YAU9>ziyYPaQ3`?cuBZwh-k5`S}J z+oayjALg6fKYaRHuF?q(z(P4(n?QBCh6nuUP!WRJBs1XKq}$=@5Ei1|q%>foBB{`y z9V);}MCz5%4FDqPjvKMZU!>3x`k6zuEA+K+L484wp*&LN_jIA4<1MbOp~_RV!(U0B zZgio_Z}_0f0=qwSf2z|tK>p{$P{i!4=$FPeUIeQ)9uwFBPAUG}t z^tTVYFfv{Hy#)TsG7mRVUS9^{iw;jX`m61gOxNYWr9DD2J*S;-VmkW^YTB;EUE}+T z=$D5p8$9j7&A5Y5WPLKTGGb%3_(!8RWZD!%f*G_!gq~3&M<)YT>>mdX2VJMfYtqnW zcc1BYCy8LjH+1$82#OOU1sYJMix`ymgAyz3Vp8plN?nn$=D!DlIYm*A!U$lR;QHiH zHLKiyTdv}E@{f=od=bT+q)tq(txKp)oiN8_OGec1OdZ|*Ln?H zB7a%D$or(Z)yn$sjT#Gw8OFelb@RqWO4K{?(_<0gd{b7Rf$)vKOQQwYR8*q^>eGew zE08YN!F2<1e1b-9hrVFLn&chj;~YJBItKZDg6O4O@2)9pz<}yN5$BjK|6ShUDVg&P z0OoVY-3jLj9s%Z4zXKwN7u*{Hb{zFPFB=o;E@6VU4cFQf%Lk*^(j-9>u|H9EUQ!>(yBQh&cN7KkNM66KO?SL>DK(B$oPx7ZW^u;mL~^I71K``b4ZaX* zcFmoyFoydFX7fAfp+ihvXtUyn=G+sIEpjT#O{=vHOOv9Dp0{{KJ!B zZwmVFkldc1HeGQ%^bU>g#wgbt+a6ycR->p6jMKdO588t`qBdC8RHRHvYWU24Myo7d z@<^K_u0KqFO>ho|#Sh$vRSL%LESW2p>s1`0atv{RCTCjST4Yuk5Y3hIR@`4Wf#~|~ zW|!M%A9g>z`msdEWi<2CJwjJnCr`Ft>5L@tn6ZOZyFoar!cj`i{&0%5GxMtAg`S5f z-ZFP7TLvl4>ax{?X`pj{e{_09|FSFOXNT6I|5GSlSLHx-e06QnqWw!K{-2pl**h5g zhsl)Ue^Yk;<8J?cGDRXUD5~&(3sDOXWEBK&wN-1ZCeYF_(Q-wYB6O_N4b_>Z0@hiw zz;8$jcI_)cv?JEb8~SJO-rdAhA&)Sdv?WkjsBgOvJ_*sx?ZA4gc&Ti0O0UO^RF}i? zRAy7>*QKrQH~1Wg?q}PspXHwF7s7vnVLV%=gTp=5&-!9~QF9-3Ku?7(JRrd4gCF3p z8+OoSm(C|hj^+E?JVF{t>vRMx`dQ$ZOHRXLXYU*tHt{jB<7GL^SIdA<*P?*0wwl_W z5Z|U01BiodLeBg`99`Qe4%02!vpT6iWzVqotV~lbM8#Bs%DgE{GOVZ#kp#iTu{P3h zqitt;lLc_f^^d0ht(^RV08b?qOAuP_`|oXb-MTa2ZJ=1Z{Z+-J#ZsEx!F=32$(E1#nbzvB9jhHedsvJroEUaRBWy@p2l6+l-Ab7 zI0dC0$B4p-oJzX^4&#Vn!o?%^tWtz3Whe$Wmb8g{$Q;hiPL`JUVyc!9c`qH)8f9|3 zqM0e4Nt`rgMDaK6#m$;crT74zLeTf|_kVBE3M7|#(#GJ-xRVk&xTpYD7)gxK#9GK<14NhY#@9nD3eNuCy z%<=`ZaGfFcA&ZWlN0t0Wg5ErGYlfM*hIO*j%W0nV>et!-R~`%xaVexlwcm-T3f;~> z1Y2~SkQ~^el-yVJ`M_yoQxOItghQ3;mUX6f}4ze+t zrsJNZi=jb%w7RG4FE1!v8QIa}k*2$ks!OAt^T9K%;SE%B^Cqt5k4$tkT6%>>)|kF> zNj>iL$#8MJsglWAX~y#X_q4PhjdUvbI7-GP?-IEKdbX|`|T%Wq8=nMCbs3Qsr#xz4YQpAyG{EA!!;eR!M_4#{S z4iS5kFic#B;d5&^qh}epM(wx-p=0P8yKY2pxCZTL1SMnW-V%=>p7)^i3B$@i)uPkS z;lujh{g%P6a>&-b6HCr(t4foTS9s2E`im>VxhmZC?YH-dKBN~*(H_BDs)@z%NZU&k zkv9+2huRQ?iYoqZi64LVNYCY*-$I(9pRQTtvU_)kv<)(oRsNTbMD` z75lkODRO8m_fJaJ5r)PHn|63!Kwd)l}!Jr{h7(XcKV{YMKCCD{-TFRh^Aew z?X5MtuoQc9sMvk_AmQRQk;0Juffeq06#;k%2T&=1&nuRe8AD)?!Y?{~{C;9&;S__j zoS$(+yZKV{BUFn@D=$EnINltmtU;H2T+)6{V?A`+I^QYaT_iUZVUnXMbMcKoHTAAP zQd8}dmiU_}2zl63MTorF1hQE!07LG_X_)J4gsJN+6q{Tkrc>7AHoUxTpPa1}XA4N0 zoh`c~r$&LJGdLJ|CN*bwAaY9tZZbn0&91rt%{GUqLx-=+MqWR& zk`huW3l1h3hgZS1*v^eqE6fGJ@l3Adr?<5ygWb}-e*QmAT2s+ zS}VY0EyD8RokxlJZ=_YiL8&bZ8VpvnSd*ELM6w_q%1?76tx7O7MUjcpn1w4-ZlK-d zSb%dj%Gu!}&dbm@nUK(Exj+Q@jnq;Ip7rO1v?5XcOe2>)i{Pw+dC+=@Is8%jfARK~ zv2iF{ws4%7nVFfHF?O4onVFd}F*7r>V>@PMX0~HyW{R1=&N){zbD!SarynJ`Cw47kxn`#K~kM?JkU1$t=Hxt9SrNSjyTCO zx3?}rm*!-pp2(FmX%<#YCN-H3n@vny9=W%Iph8aQTe6I&5a*MSA2CDUXU%%c$*2wpf94n&J-l(OS+(1<2?L$PV1(+m6lJV5l1;>7}#6*`9V=g;)Qp6j4qmJgpz z6Ef6$q5HxuL~qQMWM(TH&V=_sXOMBCXExxFW^n81dzE9(3ANXX$4=eYWY^0dPOaO^ zs+n}=Cld`2@q+F~5|}7veR7$&x$>1*yAEejDq=)WEfzOKNOo6x2hEO0MFv+`y0((3 z-~*U!7|DqxR=F$YMijqo6XlOD7$L3B3>HMXxv-YbeQ~t=T=9@yV)KDRyMH1|>Q$~) zpK7(-=d8C@qh=sxISSJcCnPmA!f){!D&x^=X=0r$h#6NSBAOLh!Q42~tT*V2#beA% zX;c!a!|Xb?M6yeSQ4YXEp*ZFOi0Ous*NLrJTmGR!`us8vTTv&`|PkZ9**RTLqu1k;b%ulRi>eJb-r7TD8S*+P@iysNpk% z7_`9%J;NG+=*E?}@i~KvJPrN4Y!p|AM$~6U@gmM=L(PJlTqOimIbTf>69SDElny|t zBtIZO!ARf>HpY}<7VeLhTA~jJPtzP@K+xxnt56N?18s@v&pE1qzfTEzdY$So!&#}% zmMve6p6(9^J7(|ivkT2GM5!L)8w@%Ij(N-M+)W9fkWJ2m2=HayiX@oeJQah9hb_U< zy)qJ@70}cu?={KQzzN2b22a_>3RZjN{InY5TKIa@n*jS)O2h5Dfjz|1y(_?(V$L*j zkJ~m8z~A2E;~dyxgndC8kh-;MkMpITof@p!q`Iw9QJzC>bn^)Uv|SRpea-*q=gEsX z=x5rNtJf4KIhE|g((V9x=g3$dqLn+(hjlW?h5QJHIVU-~D3{$W(0aTk*B#qxgV*%& zhOnftvfXjPXD_+lNCkO2Pv`Tm>`a%$hOd5rIAm$g%;{Zy0bgeJ**s4|ac-sbPP zF}1lT-gk#oe-Gx3)$Zjb^i8!F&7BuR--y2Z_es~ZE7lEfiJ~jC+NR*@WwU+3w}9esjYfwu)*SiTi?U7Mt_Z;DzqHB1#oVnN@ zvQbyGBs>!HBbY?vtHJa3W4J2mB<#u&9E1V~WEvWKS~XR^isql^2H|gCm^614yr7)= zoVgb(4cUh91f}%A?Z6HS9pcXDi?3bTXN+6b6l<-uk`7nONEvy&sF8h%_9}OMe|}x| z`(t+b$Z1lH0!&EX{-prQ1JDvL6Pf^tPMGsa!s)sG?hP2~-OgI;Yx7OM||Oc2y83wX|5pHDWcyv+0hPMCdp znOeO3l>P%FmLa!0wtPXCXD%&VM|!hi_mkz8qA8Sa_Y=*pMz^-vl#|%Sj6LzE*0@fVMPRp@($`K;aeP)&!l1u ze7eQf;G1vH_;!v(I}1lAz0_cn2qc1wjJmthM@f?)Iih^n8dtw#C|t2;LQzako4Gq; zC(Co(N8?_1U*=d|2QFzMw(uTl+oPPU)p;pUuh)#Bph0?V{r*mKW`G;@+8Jt-9SNWg z^;wKY@ij1GUlFE(lqCM{*GgKR$AB`3~e{xX+^V0F%UZwp0K>B?+ zOO;*Y@BpgIg}DpwiqvA>b;{xR1DxfHCOPY#G^YAk{wjHLwQX*o%$M?N*u)xxE%1w3 zQadr99{us3Mb|8Dg{arUDx@pqAY;S$aJ0KccSLV=bCc#%iwF)MW2p9EZpA}5sRbD7 z7O#QJl(k=!`M)mm3yt}t`(sqg#==@7S%K5D`5Ii~NLEESg)~1DY;bl5Orbctl=gM>lrDPgbcnP?2X*}+U$18L>ldIY_w>KKgcAR6oQ8w|ib{h2nBfg@ zbOvhS|0dpq+LIfu7}EP-Ja75kN^%k>dPo={(L&9FI(Y~l1cVNh)!6URT4Nd_qJkN7 zw$Y1mQ&ZKNW~dM@*hl2pK%OPX$nX6llKh0EYk^zZh!-@k1iWRQo*gUe8UojkU>%Ek zDt;+?G6Jf82H7}+4xVSXZr5&9;e<;3cEf&fq}V)MwYGRO_go(y95690yYh>zOJ zB&LKW_K@EJXx@WZQ$M8?UJw9=qjMTlR#T)X#9`m_I&{A9`9LS)^;5Xr!|F7N^r(0R zx27jBt50QjOz=!#F`q8~w1}ZmS4juc7>985Tp^JfrEU0WkU!oQ-Mmql7yzA5`eNOO z#X;q&R6~OC)rsN^N=z_PhPiHX_QDkG?pH^j0}J;=wf}A4`BSS+s^F_mkKi=AJO!3J zg@+vv#&Jf#9l6vbaUhO1tEmI+4$haXMIGRqjs)kdpU2NE%$b~B`4Cm%qUE&6_pDjt zg%>jS)AZ8@(#LbHrd*naZkr%|q})Z9xgS^9#PO1Z zHp`|VW~MG`4|wUK6R7vT9lOQ#OcZ7~EWsB~7D{t`ZAz!-t1PinC1}>rO=g!Iyirn4 z4@-#_k6{ig%vQb3I?&6WMMNfdbB3z1hicB`_L&CL`trcoi1}dlkOe z*59Y-*==V-?q@(>BuQPw0>w}9cDs6^?oZ#!ICPrra!bpBTJE8{ntH6C#v^JffgA1v zAY=_RuXeE4Rm}lp9CEO$orwl2m6ee80IB`7Kzt={iRc~{*$c1oeF9BeDQ+;`3-gBR z`He=h;DgKXbA!9~TP5WyWhr-}kB{045~iOaNPVuspndScS+H-gZJ6Mgu137Uy6}Aq`CJU?@zm!~=|2eGS!y=BDm6eXE!ollET#Gyog`4K60D0kJe`djKGG*3-|i% zIOgaW*DpZ#-TCIo{IZ}M`l(zQUZVZ`t>5ei$yjv=c2fAXo8&TsiO?vXVkJiH_Z4nq zs$K!{Q*vLdk&M+9j4Ms87hd0_A&ca$aii${8;?xGryE|`>Q@nb3XON}n4xUpt0wq| zG4}vwUA@)MzC*Th``0$fhbBu-9=wx|y1{y}+c`j28RpmJ_$wvmcKSX9i0!G}80db` z!)vz%*}8j<1$?t}hMyBP_i78WHTM(?veoxy3$nHM5DVxsDR~m^t>j!fk!sG{xW2XD zHoi$F=q{DEyJksz!rR{9_mZQ_pS73AV2-l!i+97mKX33z`CVVbp$w0eR za(MM3BhEFn<4L$@4at&UgOMX7oq#6wI4ber z^cZz%t-o|?_a&1rEW{l`Jv)x%h%Slbz+4z^L~M0cHox*-`o(GK1M7w%{&^+ESNtQd{BTt9%stoOu1I5~ zrS`aP26j%kK@Yo3RrP09gS7(Qt&s8B|sFb;5xN*J)YOxgN;@-d28nq~q ze${oM(56MSQ?{)M9LjOwvc>$yX*N}L95Y(em}~R0#YV+}Dnu$?)VG|Fri^ZeYyNkS z!KP)dj%w0;EUpLVRS_W#k90ZZ#Oz=qnMfm^PLlB|X0mKaNo{4N6Q(5|gPxLg7+OS5 zGOvjejl55+@hwtf@HxIUoQ}8cQEI&+6Pp9PB8p&5@@Oq@6yZBsCfo;7rypr-E8j2qB_m2MoWuYei@Czr=oES#cCX$6unp% zwJb_`jEx_6zKdyH#0XCU39BBwBLQdd_&gqGJ2e?Y`1o?yOGCRB_%9y3eI%nKgCvtA zJw~y82iK}HjJ*c-?Jg~(PRrYa+@z0{?Dk!aP)y5_k8+2Ac%Fh?8@os(SFB4*&|iAM z31SH`KiV)w4b_fpLkCYj3r|N9S2VNPb5K|ldRE%dZdd)TN(pZ&Q737=o7gdc@Q3q& zlESf-XfRe)sz3Q|o&m7v#N(~#qq~Z^aF0p0YLXsP4CDKJ_BIt~=90wjcU_~rNIJ^S zGbh`)&ekkyaWC*8TYvZT;nz`PfkZqRzBD!tVoKUhNgNp&>cUB3h$BSo?i}v!pLREX zyW<}^k&0N8lm=o7Z=l#Ox+i>Vkj_LOaT_FTilS>emj)@j)c`5GGY_fQ+&ivfs%voI z0y1T!+O0tOIU0b@=+BWl!oota1%{eR1daqu4LpK6ielImeFd3i8GGEL&&*MH+jbZc zgGa6n7+i-NcF*_Ea5Jd64rr^k8ZTvI-29zpS7q3_#}eXw&`EyaQ0k$CL>z-?}1mBAjd)IgRX8)s#1k%<5Y0qC@Aj^== z{WG8L)$|uqGur}hoCD?!zi&z`*U%+(Tzzr0u4q48f!}4Pa34ZxxRxo+b%quv+&cY;VE~HRO}`ah{Eo{A>r2L<6q7Zq_MZx1RbqHfl_?yAr`$21ex!AWInf}Py)2;_Cq(ns z6mi}noJ@eDP7S+_|F){!vpKEDF%YwbxopOCQMZJ|tcp>CZYjTjE_PIWtZNbLiy(>< zy4IKBX1~r*=l9n&u0(m&h%HdrX%F|W0{nl~|KU%a|97eN&!$yLs!x7@3_Ix?H8gZ_ zcRzuI3kH3v-LH)$w?T$1r6o{^MezO(&}!A?8?#c?G(muPpqIh%+Fd$OU>& zvO7%ay-?hR_;S~^)tY$ilm0e4JkNOYJ)Fo$duac7+I#`dv;g;uAwmZ@!JaemV)kWY z;zw^IL3yFDb>$~LNKbh%Bb|(G)LR@uIdoVj36Gfg0BTuI$0VSlMkZ6B%9l4f^RBJ^8toD(m-A|_Z{>^S{BLPnaPXw0 z%*oO)p_1DP(Mef#`0tjEDM)#Lq=AjGuPqz0%Nby@1Xo+oRcNCZwFjp-37T_Dd0tF$QbURo5B2vR|E=-g2e$4fOrf*N*oXI)Y44(*r_CL(%~${G+pF#wI#Y*eYk+hvk=)yF>yApT`}m;+mxYMnrkXO;Sfwa8m2b7_%*r` zP+Lp|ou1YRqZ`+#`^8cVLdB}lPDf-0vq&h0gQai3swbL`vyxIZL9i%Q#Vb;%aWDKc zNz99-*b)A`mmr(C-IRH&z49pVNi`YnYN*qw(B?Nx5-=C4yH?Kq&{|WgN|B3w!-iqJ zWF7eui`{4cO0G&O}6j^r|3k+GsyJCl$Rj-TQ3WE+<6vml}afyGq zQ%C~+DS)08WPqf}XZcvo{UX34$xzee(k&uW<%%Hh3~v7Kk;Rs2{pN+vC>TDAlh0vkw%-J)w->cXG$j!#z(Qp~!i1e`?fQej*>+G?Ud9t?P zQJi$YD2U873f%FZ3oGjuKu^Ered{TbvuDH7Nj9ewW7f6Xj5{>K`T3!cE0fXd#?xTK zT_Ab2t$hPAucXkS6Vkaa076#!Kyq~&T)vgioWI2zF|}0(y>i6`hOl)5eP7EN-0ZJf zPw5^y;EPTWkiTVN4$YjZYX7O#AAe5+5`2pC=&PWh|9}GeA!ErFVI`G2bg_R-L7_eY zEqICsZ`Br}HJI2|wS5Lt@aY8R5X?lX|Bzw!z~=~t!E4yg-knni<7*Z4%}|mMy8)(9 zh9M@@P`lbkLEOGaUtE$$PWo*g z+D@Dy6YmVLnc~k52?Gy1?(hP(JtFP>JLEnb5IG)g%*h`$N3xd1Lj;jldP4AIhT%fV zkekBCc|YgGUVRH|GMvkAJHK??$_KqZ+`PL7zyOSJ_$nxofBSe!#rr@+g|sGLM^t*b z`#{+_7g4*rK~?>Bw}Yx$7rC+ux(4~_CbX~vzF<9k0B;RhMlyD(vJnXLvkD-lyw}%DhNlwY3;fdOrxgQJmT3Lp4u7(|xhJLjAbj>M541yYi!QOUbcnKMaI3*OYT5yW%Y3x}s`yvZjFanq}y zX*aVaUA(<}x=C)X(yghc>GT~9uqK*EjcJFo{5W?0Z2(pbo<9E6N9$@0CKJFmx%vP2z3sorx{YP!q9ry&Y})H9l~5VOTA z7y(Yk_9RjX<3Kq+4)7~tx)3~k+XC_f;sa^}pnEJ%UFRq|8Vm&%&Yr}sYx#c5e;P3u z3kqnBpytJ3`voQ0d9Yj(waEk3o~PLR=wMz^%_%H99A&JlzGJJ3mz!zw^~N2h1*WI_<${uOB{t4U>4ng_*$yK4Vx0e*W`k3=;p1y7k|2k+u830y6h& zu>aBJhT7e{At4;n2;<2D#CP}wHg5~PqhR>9r zUvCox*C++?4nj%jQX5AH0cxb7V_VTu2{HO7%~FRCb3W4AVv%7ln~F^ua}fJz-Rg+B zwk1hYySgi6Nf#wckC{--=&~7IlF=H+O-or8`nboWqYfV>M=2}O2gifHi*uxHWCJE& zuf)em)r%NSmV?E>Zqwv4@cGCWOClL0Ba#7bW+9Fy=JsSA>;i3F$IGN4{&?V1cz?I# zX1p>!VWKa!eH{I6FxK?dcfaeJP#EEAOhm;y|2jm91@l5Y0M|13U#|9l)%^X>A@bi> z`;TDnpVvEjLbC5GYS5I8Rf)uI7Xu-6p)GhyJ|vkaA~gE1i=h#DiuyE0ln4*nbx3;e zPXv;g${6$!54|k{nFy1Ii!Tu0P|lE7uJwhEvQLH7FhE_?bm1<=+yVo%Y5Q4H8tG~J zbV^CPu!?tUstqftP3+!6>@Cj{1yW0d78IK;i{0r(=+PJ|G>)V-=(YJCzRkyLQMl)i z4S_EN-fo_4%f-{q4J79ERS!;+;YO(rdy9tdCPfBF1hV%+(%pVx6ejXir*KA2pb~P{ zK^-M$+0Jwfe9w_y65HyKiMw1-Y76XZ|Sfef!9 z__N-5|8l+mJ8F@CUvGISfD)4{lOEeYFS^{=pGD`JQ(H;3Y`74ypJ~OSX+{(=2Vn4{ z4}8s|2}>Z7l`-p;rroR42BUoh@l8za-w`?<^x9s7c)*=}d-V2#VC?1>Y*@@eW~C28 z9YF(8;Vz6h5vfglA`jy<;f_KPX)&foWM*}CJoOB?_9W$89)}Ft3*PYRQy?|&4sd88 z;`{)lvG`4LMm1=Lf3rHtaIV=3LyxrFRZ{Dh)Ap(%Y<}W+_`%wV%bO|lntNrNXPIZ3 zXPYNzztXmPJ8~uFfJ$}$TH!vE!~NqMYPCt9(5fg(bQJmuD4QDCQ^{mQqIO%H9V`cE z)+V}rsJ}euNS)%2Ek9mvw%gYScQC6)A*W;m3SiH9^7Pr8L5!y==qpAAP_zmGnWe4N ziUovZ{$IkP{r@ZI{GYJs{o^uA&er-LS6NxHQ&OJ=QHQz;4o*zF>Xb0@0$kGAPY^|N zBSI*}kwH6#S$US0xZB39d*3y(0t4T_z5g&DDwM+f<#pxL4w1uf+3^sw$ngpP9`g5H zAHCqUB6XTJ(zH0jG2r&6`)HbkkYJ1KE@{5dHD#=&x%tcBrF(^llzn?9rX(3`$0cie zp7M7{%^RqmCj{gE6Un#Q8b{4zL%2C}=x8O~tj%GWP)YLJ-;RaGkz zwK>(@6uQ$Rh}j_>v!Q20k}8Y#R$zRLnu(S^_K}tKHE>8L#XTy}m$5P@ zVS^@7wUn%7Yu;)Exep84bbX&}+%@$kCJ&*(y z%d8X^A*>*ylZG~7-V<6SyPnnx&KZ-zj3w90v{h)eRch5aT|7uU-(G!5{{8Z_<~8-S z=`_W6xaM?8k^S_RAP4f5gojEn0Mv@iJWjs=v;x^Wc?%uNHc3AM)Gls|9cqQ_C^lEg zpB}1}Y>B#u9jYDKI%Ufh%9HdcDOb+l7YdxT8Q_nH3@gb<+OtaP-Ug}{yA^@VOWad{ z>@DHXAazxO{F(;pN8h6-ZZGIxf<@~roTx5+$FpNF6y3uPE`$Ww<8m5MwSs+94oPCwXUMqHH7k0k*4UFKMRc zwmO+jq`Wl$-F%~{?4(B%A^`eQ|D!l6LlYYtVuhQh!$%8gc6B*2;?DM5lr6dQy^|h% z-{%d>!$Z&g>-9^3=BI%-8=Wt(2TBPbOBT*0Zss`DmZztrB3K$On(WOL6?sg0nnua& zY&NMH8*9u3-ft5uQ+Br2qbUq5BQTL#w#eu;bYj}(=^EPo%yrG72EV({@dC(sn8a}L zdWKW6UCg(e1A1|lg#^cGVJo-WovT^~j<#z>5!AZRrs3v!gj9{x11B1Rhy#vmB$!=i5?3(B0sx-J?G?iW7%P+avGrBj0 zYh)N~RLUOx9EF9ch$7v2(!Rk~%{mpS%Coxr9&5HppuF4BTt2QCP}n2xX*4()O2F}b zRq;}iG7nQwWC&-vSD^tAmiLo8*U}Qz;LFSwk@fUiBoXFdBr6j#^s{4-;@2p*z-rCh z)0$N**dI)+i^<1kYeTuHX}YlUhL&t=9V2QHu^}zSLTX2uxG{)QQ3HwJEMa@!g(<%y zM+fltAJd$6vRP1^b?b8?-IccPL@xA%p3J$`NI{Ve%Nbcx3i0d;eso@UQ>vuo;(xYm zE!cMOk(~hf8JexXG{^s40y&BrMO1t@mEF8cX&4ZWeg#>oc2h2fI4iJ%FKhm;zKE2A z9R|^dZOaeC=B<&opK4E2r)@`B2%adf#TtvL*3b;)3;;1_1l|}EsTw2sgvpx|;{KXO zA^$3ZJ}uz*^=|th#YBS#S(BHu5`Ad*LgZd2XUb9z6yW>&)J2H7vVVy8yyqK63Or() zYPC@r!*`%=7?scE)R9T|98nd;kLZ`Nrp*jhY9INyj0n>}eZ`2#eGmjnXU+IC`Bts= z7NN^8yzm2r7z}fy4FVN!%kcm(7B5h&pV>&M{86wcjt)%YQ^fGU=3I4QHmylu@xRJtkOXXihsYW04zzqw{4l>ifaU6UCMwzlP5vaC)v>dCH4#cEV zu=3)h3hdnFo*69q#EmZ2#E05H*1bu_$#N#bD{UVn4b_fPkX}ig0d0zRMFrtqMu7}R0Bu-0 zAYSx#9yW*?b1~E-9@}$omEA_YJ3kI6*j-6V+c?r$tP~Nr3C{i)S`a2hV7suIq+Go_ zpjtKi72!)4h-Pq@QL2uLt#dh8J|D5%%!1#Kah6=3mex(BzHL-SRRUedsrNm#s0+Fc zt<2Kg{>{1WmW;dcCGni!CF7dBJOe2!qJpX$I`$nq@34$h=NYYrF`nw6mB54*`*Jyz zQu%Q$x-g=Jo_+wkYNvb{8D(nh>DvAPDKuupo%0P^s7LmdKMZ^7%pEg=ZNnJeJDw)L zP)P-UW>GzE8s2id4_n1T%$qp>z%Q_E_L~El>$CyyXbmQ}s6$LX%Gic_#O#)R|Ko*5 z`hhXOTR*k4m~vhysWY31^kv0tpL^5~+>O5N4&05QZC&^W2X}!G1pDTkJ_s(}?ri`r z|M<2bJi+#r0zAR)l>>av)|CW&&d!wue9rcj20VhpBW_3mZnVQAFK}qNcTk@ZZs+K> z6>hZCBX@|M{UdpZodajj_9|{?-*y|WtfPBo9~Hb`|27nS2^T3>A!lY!lkHSw%+!|hP697bU^ z?o-d-{5r8(`)4B`zDwF6IVX$zxpyS-2pr9~bqWgnWf~W^=qF5_^z!Sox6~ebn5fb9 z=E>ITJL3V{Et}F^>TIZ#say&R2Q=wWvR1@re2{+UMa*`aJZkL_G z7FJnvQ?mx-AG3jM1BP0(T-XPoa_M-*{*(Ghqgq;O{#2KKzs|D9xd11Ns;xL~PJ5t2SJe~o1jhjOz5)2q<;iu(^65FduF zjgw-**E(Var>O)3tUF;H8s&rCYDAdZGgO8dd(crPMcYq}Ij71X+XLMf$EsuKiZ+C0J$B5&ndBwA;@7=7k5q4GICYE5Bt&jM*37zu8EzDCOf8$2j zS6b6osCn#6m3Y`IYw7W?2Z{GvKy303nY98|hC>B*||dbaQGAXY*Iz8K~Q^r9L)QG}RRzOIy7U5GGHs z1aK;r)yRMKGHi2v>h2Lej_L4lMi-7460LU+7LF*9te3;4!)LU{_)-uFHW z^Oj@LQeUOSbMj1w4A(0 z7gWDSkP^Q=-1c~50;w9gZOJ{%F7;?1yfCn)D`rJ7-a+;gSPr$8Z2c3BdlPU9Px5Vu zzD5%&^fV#PuUzWeRReoSjoqmWw(gBZ@4W5ysMdFfTS2-H8uyd|q#2yw*DzczBKqIr zC&`9Z7Gkvq-s!di$P=*0G*~+QO>bqbf(fiD_|M_{p0ym(FD)VmP{#d0u(g+>SN7`8 ztZuegZ{lJ}C0scMF`6Fw3~m#W4QHs3vxM(pdZ6yEe##T*$0H?uiXJZGyE9uN>9EaU z8!;UE>bfdfJ;La!((3YnkmR*8(W+yaliB=Uqx}XRvVb0 zdh{Z-V4L^~Z)AF-3_}9Wf&1bmv4OD1tkuS^-RRA-HBB%J<+iIX7J9U!34EuGDn%w} zrg!tf&nMb<2yHe}vyTIx^(uB#R!8M()`4?0Y})vv>eJ%b0@sX$Y@JqpOgAY-IFx%6>0&uWUI_1iH> z)gr8pCeZrAs)qJZH8PCw)3Zm-(ZjEvD4u0gA@jN8)0d=Ou-*XFwKZF^1mI{SVr3`i zo4tr+y?W%ola;E}N_i?+(lw-f)rgK;+80YG+z@i?WaD5C+1?mt(U$4N6H*>)Ba4g;E6E6ETK<%+d~w(i z1r}ETRWbNi4lBBWTsAi4-Xu~lh_trihVgcTknPhK=lT0uRIf!;k;TI@*E#xxGs<-V zTwFx4)}K#Ki{IYDu0YmrT|U z(b~rw-pn!%?4nS)3ar}$5Cb^dO`&fDdZl`|O#Ad(@kVR--a=SYVWd35vQCo?duH6e zHPj}-6toyPmm7zk%_>X4RPEf?mf(LUbCpuDK-;uqDBn2^x!65>#Hq^P0@XDEC!mta!-t7gl8=V^hkg_((y^M5q;C6y6o{=0xL0=i0l zVM67bIazWzd3h7IHxLPRDTnl-M9twOY{q4AkhWm~Fhj3D%C%DcWh=!rhmO%$$NW9P z%jvRZs_HUE?h}|bGVJA^9h7KHAnJ9E0s}P!I8JBJn>^SpzjyM_5njASuDg2L>7y_U zPajp+stc>k0hOFFbzaCyR>97gUS*bWz)8fnQ*|Yj&RHZV^K^z3+S?%5Rt;zhJ{Nhx zuE?+AmB&$9wDUo?Eq=34M3i?5mgD72vLtAokU2DSN_8_^HOP_F=QFl0m5_xP0yGz* z{#&;nf{ik}=%Tcdn$@(C8pE2^Q1_D%2rWmt=r20EAHEq>LE@oCnsNsZDWx{!wAV>HWll#kkL=4zene zm7^|lR+TkDR7NuJOm05{PDRK1n31bHU!sfHGuzOUSBKXdm<;;o(N#6oy-txhU{?-g zgy2a2p6o5~9s0rz*rWmfmva99F~C{>8Sok);ND%Ekn}$xYj$LjR>}zZ9lqLgP4qK0 zOu&vP9}W7=%JldXY>9=XH8xjgB|&AbWq3{b`1<&He;zgpAgs%3qrl`xR_q@V?cnBO zRKJ0{2%^s2ucp@s@Zhd=Jh4bCnPHi`z0cpMaYxm*@YhBNDiuWy`Go

|H4>7o{0BB*|D-FUB+9LL95Bt+o~g+Ozx-V4XHd2djbEsIP%p6WgGVa;AGv;MmhK z`H^)=)bs9I<>v+-w22%(AIp~_d}~ZO;;8o$JDX5Qe#Dw&D@W7aLs*Op`;C+_t6Lhq zAhlsze{vA>z$TJn78D&4Tq@5F{V-E%M5Xk^VuFpG$>Qe-(E)tD!-P4Py6EQx*NvJb z|C{N4MHnLlx=0*{qOg5()y>v^mw-l(1bHmuzg0!TUzB3q|Mw7Q`_B>grx7tP_kZjM z>DgyR8T!S}LaLO9^C7_j2IKpUfXsAdr`J`L+}_ddg74w!?(G_iFb2+l-1Q<`|502V zi2&#BWUpI)f}|1hQt1;Zcar0l7W`$Z zy_Wrk!5+9j+&V)*UsgNb*RfE2r6^Sa_u9xa33;SrKIZ^Qx%l+lIptQqicb&$sg8`F z;=7$cvuH#bE(8Z~;TWYhF=dORs1st+26bv=I?m^q0#KyrBKhhWZTpkRlQYzPPLUVk{_Js+*tfr~r0fN*%>UnrEB-e+=>M0X zt|%cdA|uSi%=vG)%i;h-JNPK$-1gf^1aTpKt`Kt{G>DL-5IRy!zN~WC{+0to3Ch&4 zE49g-pT7(#@imAyYA*`0GFz6drPSh~?#tuaP~Yx4-?vYvpt~7bn~>xPL8u3z-ES++ zKXULO+Ppwt(j<>m7UF)65!)!rlF)szbRUg6F$ZLzv(Z`lwpcotVl$=ph?3Btns4khL_BCujxb*^d+!w`J>y-3{%B0pfXxnB3gBnSVH*>=3YiuceZ(6U^!SIl@&l848`uWKNu8F06&{{Ji?*ctzs5C?4I&h7xMTvQ?#5VZI-di76biGj5F{9m(vC?*FC;bqG5 zlB^1j7Jqq6^In{B0-4gQ>vdZ%bq!EhT?V%H8JQI>?TgY_JKeC(|g__!twdr&kk^&|o_ zISV{4L>;`g|C>X@HYWA<;?`v+0gCq$o}a*p`)>yECTQ;=6xg3~YK4dAIw_H{8){2SUap>}^W0_uU|4bOX+lSyv}!>2>dR5H$PMEk_cKjonrL-q96)-lHPi^#^>n7Q@Ou~ zf>%VFo2#eMhzVLD%?#E|F5QOWC@Y7v(fC#S<8HSeNC{DGYzOk@Sy1Q5ab*S;swm;{ zhM8NzBXi70hybZ%QK7+fe7{nN{lQ_fB|6joKa^0m3X4UG!3I*o21p45ASFs~6@~u; zCB!f5V1#J_KuQdQ_AGvU81E|N=#VjQgweV(9&ZH&P(efoqyQ|4i0U5*K9p2OAXst_7~yTyZxq zIs9R?`Z;aU@+$I06db-DJB|a7hNhCt)c;%yENG;4Pqd8iJ^U@5qF06TqsY49YaC5xoW~B$lP8gW~O4U$kU()+A8%kgn_bB&0I@4I-oh$6pAe zsP`3mx4t-^0?FP)vP^*YN*zix>E42eM=o$Sh5+rs(tqpdLv|ryl$68Y0nAB7qIU;^DS$SgJv20Sz< z&0HK0*)Olp?~kCd1Jr_-g9mIq-JP+$xawO3hfXaz{*jP&cYx`Bo|^C@omX0oD6kb} zPPqDUMXLHdGqR79*UIrUsvzLbX8`W}RXo&UOBIwkd0}lF87&X^3~Ue?r^EPxyx6#6 z3}ix^OKOsaBPU!1cAR0MA5iE^KO0F4hE8=$!ZxNpF;s?fh0t| zN)`h#R;t;+TNxqco4~MVxf{eAJUA{VJUE^)ZnLX($+}q9!&I$bNxN9=>d~!T4AF;{ zNFH+CQ2q~ob;;V(Mf$>9(o!f*pQ6<{=&R`v2LwLCuvGDWV{kyK)d0HdjPB&j)S z9jMO$XMNj^q@ttBPf$&#D7HuqE630dKA9Hl1{qFtkTI>xRIBc`QlrlA+Zo`ZwAw$7 z@}i5H*c}EW7ds_>=o|9?mVf3*Pq1N^GfQN;Bs)s)oHkd?-N z?|bAR+gFNp)W5Y$77;M3f9?C0hqc4Shark@w8>Ddiwjjy&-cLdVfW_`&Zdq!saT}# z3SUTUcN$fsj))wx^4hN%%q8EGHK>EwZ+{-?Wo;&LvJAvZkz4?GzkXd*uX2N-A$EAE zRe=S|lmUPw*WyCEmJ^kE_I9Um%PdCIvLxLXD=t=hPD&t!0S4>$)sJgHtX)B(y1Zeg zs`4wbP^Gojd)y5z;R=Kb!TCKnFe`G;HoKau)@2z6=R=1w?*Xj6Scw z`Qh}gaetZk0NJ>>@}^}p{H7YmFmzT!NR5yjfA-w)g^EwY(%)3?_`d!#@2&nX0ERg6 zATm>S&nI$i_f%)5P$~=n6!svipd1nW`9*tvqBhzn(6Q7AjAS7l*U(N4K(A?o7cJ7g zGst6la%F3oT48im98CmsXq8%Suw5adT|3)ghg^n}_Scg_n4<;E|4sN=IR9<;Yf0e< zqP`CbFaA93*eEaB3J7N$ycd)YBn5{Jr_-T&R9;wi$Vwd#P78}oc`vyq)9)tOia|C@ zh=oY-aRi_AHk*8!yxYG!#`=n{2g%IS)&)f_8;E-F>+?tZ)%g*RplqPutC(0zfU+g!@Mn@bZ{!{SQ$gC1$Wg}cDacR;7zOq(5Ck1U6-@+_99HD73m{u+Z5mEo{${~_*&i0nDX-Z< z`i~9;SU-5WF<$8Re&5xf6`cHTHRQ_W`3vlW`onj02sDJJ@BNJl6O|YuU*-H}yzc%%O5j;LLNSOA3F-VS{m$oH!ur?wMbiy!*P%9kJ##2QM ztQR$N*%lwexvXU1YutX)a8xwH0P6#%O954$E87+IQ~l@S04x}e6?MDan=XEbvA?1K ztfSqZ9Iy{3ED-j;7zEgu{;dzFB}Kx7`kr5DG^DWDR>=WMa7NsZbExonJ!*$5B*z}O1_KBYzGPvnx5wsvg2-?Y5 z&|Y)t;Q`W-xOLvm0OFFIx;SZ1x0W2Hq0|A}@>uClBG}(LX;<7IPb8s_di+BH9v{@= zbhw0R@qS<;X!D5X!3LRdJd7uci>)cf@RR)RH>(6Oe>)QT=Nth3hXSEu6j{KQ0YTAd zFZFJHUOWVngUPDp!s!|%uw_7Wu8I+=9(08s#}2aJHqENz~~ zt^hF|$jR3#C4R!C)r*JAsJtr;k(%V{53>J{x3>)Hdt1`B6Wj^z65QS0-QC^YU4py2 zySuwvaDuxBg1ZNJ{>k3wyfb^=bEan3)O?@{@-20(UfsW5ec%19wIR`IDF#?1C|h6lGfB9?~gwVK)F8(Ky%9yoRgO`nNMXKgY8uiXUjqGLLB%` z>?ZxG9MZu?6t@jpDE~+VSZP72y={lVo-*fMIl32kAJWRFoDECH^L9g$NeY)8lg+R5r-tfR@*(N=uj4x9ifY1(bDs0Pv@CTR|VoMUY zSx@tS;~(t<4ATRLYU5jEIiE}yGb8gcsEz6^2!mSE zl&iV!m{?(8fe_0Exs)|olDFOO_M+QBWDZ%e2}~{;hb(KR?o?08$Th>TSxLzs$=0$9 zH}M8p9^HdzBAs?pD|w=7V=?Ae}(r4v?^7AQR@hb z&r&>By&ATKVec25Z(y<1kop0zpUpM4J`i`yjq^p#u~?c@FMg#oZgQZvPGFMGxZS+f z@hE5{@0wYh(c5EV7PmE@dyzHkxz%mtHgz=?Pd?>BescGkngHkr0TVbYY2Py5-Hk!{ zz~6R;);i5D4Jyz)JK45}>>;c9H0R?@iCTfJkpQFpZHJIjx6N4za^vY|>!A!9c7$W- zH50};6z8=!92jm>X-J+#fMO@5a-!2d06O`_7vQhc6B+SkSz5_{<^R>w-jGFm>k{~HKUJtcQyD9&yZ^>mn zxr{w$GLI{W`?0 zrVRL6%Ch5fe!?IFRN>V&j&xeXZ@H{x>E7hTl9DS@lRlJa^k;~mSMpmjh?636rm2~y zi_2QU8aA6B6I0ENRl>}U#GH(_4YVdxHPTJ6Yb(ixWkoz-1k)mpA@6p@rm)kFr4Mg~ znjt)NKORdJ)#;JkC3LYs#B2*g zqmwl$TK9(|&+OvepL;(g-`e$7eP^BYn(DQ9lXIYw^o7QRWcrG+FKb{9|}p zeW|pU-Y*0M7uBt#mk{Uz(XE9qhOdS%hp(siOE08f0+76)C@3xxIx;#UIx0E>8}TKs zpS)jcZ)&f(A0v<{=q4o{4WDe)%Xo{=6~fQhz`rn}s;7d)+<&4XHy5n4bNd!bkhQ1o0^+};El zgW)T2rcCDDg5>BKG~u-UI;7u)YH)t6x05$D=rmHfEUS_;23Y1WCi=aieEHtWFxJ_n z(9~~>(6PTE^jLQnKZ}HQUJHyuYy@0+=b}WSSkAol4XUxId^z9Qsc_w z6oV!Sl-391#)azv^)zVm!8exIImWzuWPQ}Ee~w`@+SG{aOU&4EjH$5`|5vj>)!{v= zP57Kh?^t7y+O&>41`@lR$gX9AJvtteJ&5dtD<0IS$JR(2FMrLPQWRNA`7GI$D~9|On{ zL=iV!>HW@lCU#LnFY;j?;z6A#%CLBIJ#BV0h#xrZs$LC>~CUL)RS?2=M&avKA2GmgOV}8wN^6 zvzx@(w?yZS)q`Q-i@}<52@W~mx&uYM^FXtV@Ma+#R|;bTawQO?wklFr7_YW!{j;4Z zxx=9nb5lfy$0fdcClhSzi)cDL&GsUY5Bo*sJHFRcW^;ncItg5@C8Teqx?o1*_8nYj znn&irBnsxZ}7U3wm9=LF8~I{y<40_6!I!1QAHte1rJyoYSbnM(tCNy2~(FNFY1 zo1b&n&NI}+e!?4eH+2MHR55$1(*~s5x&rtwHg#kVqG&AXxSX zO+nb~zwF5vG=@lzTXXJOv6kMiJmIKv1n*ahZK8zVQ|FXQ+ij=W8Ep{a6`L>3T08#iZ+RHgY4wB_bvqipc|kbHP&bOr3b8XGNXX}?27 zH~_P%xsw^75EQmCba1zGGPkw)XGtgn1b9ROHTrM`>1ntNw626!jgN`07HcMj9$?Sz zlAg!bn9!Vhsa`EcbOl&DWoXJ|lbF;s+SbxlId$Ni*3#KJ?4rwB$`ZK@oE!b0>0H zxsxG9YA$6YdW&CJO+5IxJRl8ad&SALoi~y?14_W<>OR4)UMU}rGF?c zs_DMz5&`PIU;cdmS}LRWzrgCxS3VZHe@RSQ5}5vzx4C6Y)m=k&XDC1d8-KrBlz)37 zCznX0blYq)z~Y=iHL9|l^S$hk&$xz)TLMo8zlZoV_koP3pC0cYX8I8L>sHbc6KR8x zuYQTqa;GiG)%&@SLNXb$gzECUAzH&=vm!4w|4oE6;8j( zqke9EBTQqo1?bTlJy3X-<{3u~`V6Vj7lsQAAEr?JZg-0gY=|JT-&S_47>5HwO&52> zOsa$8;lkl0;F_@$AxS1PI-h({XC@~fSm2)X3}}H7CR@*&ivi>m0Oa@q33 zDT^uE_xR*7Y$s@!X^UDSRs{I$LS^8p?LkUBg*MBq+2N|L?GPE71(37t`5uC5nLGyu z`)9@OEOGcm_3Lx%-;(<~BB#Gb*{@Ffzl1ja&oB$CjtYa;Q&bmZ0*)6mFz6SG9Iu;$ z8OqCQ915Iv5GDu%3}s+&7T6b5o=Q)3oq1=?{T8O-U?U)BR6+8$krvjXfmjzAK9{1# zQ>&X<^^?zy&r@KArD9o{*`2voU#D(+DboKDX4?-)p9yhcZ_xb5b*ULqr_f8vRHg}b z(}PXea~vxG@}@v1p=?r+P z>AOaSJ9<){_IRb>aa6MBz?$Vg|9(E5*$n3V6=q=n7S`V}-ueryKW{%}bHz0kWNx5< z-ct4D*>vJU>Ch-~~g#dh+6Nh^L`YOmV`|>}TFPLC(2!sWkKFHs12N z7oyK=YBIrnj6SLtn~u}koA(#K0JAN2{>ui3UD*_B1$xgsLr`D|(RASP`tv;%H8As!X>#%@mSyH&9RrOSdL`!7sIh8mR zTd*mQGgzl2feZqF8KHPe@K;vQMwOWcl1fbLv#PgR^N1P*t7s9D2wXho7hYP8TAGgJ ziau7cHi)_M2aUuoV^*#%6;aoD7dA|;$VddN@oJutavk3#0x{#?ypDyND{nqu{GKVV zNa+#Q-=b%-O0SPd9V>(uYH$Q(vKH0OFWjZVeDIZ1qId=Nqw6Llmu2LKmB#UFKXvBD z_F@j3pwV>g7A-{=GMWY)_7W>VRI3#eX9wD}E67o%;Q;hzS9Zi&HXyY~Bjm2}+KOL~jSpHW zwa?P*UR5cJ?;CRJM9ZB>qg*_6;e@B!eY<-$XfTe&S$QH@=L1?cyWyHDA93#w6m(Oy z`l-1R@$*Id={$(N{8Izhe(dSKBJvEEtUsp(B6v;p;7YazlOk5{9pRtvsAId<;*L;t zhZBy5Aa_R^;$rYrUh7A}tMhOH=C#?ns@QqFq-(yWtLG=6O*4#}q#yT~?{uBd5GFJJ z=&V#$8qsIMiRvCgyl4*^Ca^^)f5H6@1@U8tJGX|-KxrGwyt`mU`nDit|LZzr^MMR~ z4{J_zR_-M!ix2qw&{zGqOm?^QT!5(f4g84Jt%>~soW{Y+eX*(cs=3F)Prqz-l)9B6Uw<93@O75RN&h@17JwBu~Jj;6%QI+rQl^ z3jHm@b^)(0KLLAt{&nsa{2RF&;NT~sZ|G#};I3$A{>POvsrurJt&H*x2b*QgF&jIJ z+IVbW-jN|1La;n5AQ@jwJZYKG7=-+ZG$G@xFeA;`ghkqm(q9&N3vA0)eqPw9gjj;V z54<}mr2l<)#PR%;GGn7Cq9=8lbSv#8>w^0s6CjafbwB5o<$~0M*9p`2hQTtJF>Iv| z_5s!0ZARiHOx}&g8sye*GatDhiu895+s_?LfLcWy<$OV|>{)R+-Nu*Z*vYhCZ;Ot08A3QB>Y9-0<83q?lN&X|WbT9kp5hH#U929G=35-^DDRp*^;0LvP3BJg{TjbG; z0_JUpfy-jE)wOybij-RgdsOSk5eHK?RxC5RACG=VY6QoMJ%L zS!C^7z=D!?s?Q;I)6=hLNV94b<)xQ`a8e?OYy*qxVq z-|sd6O^R?=#nHE>i@RPe9;>(V1Xd@H6O!Kk$X}=Sm%)@qu~_8 zA(g%nx2s=!tSD;o!6E2Ep0QiE`R!dzRf^zy1cLd_wq=7{S*@l9Ghah=s>-%UV@0!n zSJhO>cUcgZ;vtv=v+!@G&-o@#O5-A6sKD(=gHi*Ajr5it-K8=PRCWbE`Fff%_w{bu z!{(qIwcVY=t-B8+%BMb&bSW2DJLpmrg zO6!FNJ>kFawb20UaHRc~iZEl!}WL1-QU6^y|pMhy_(FKdZChoT8eItPNG#hPM z_59hp%0aWa2X1j&>E;es^vKTv|k0aC9-Tqyrx;{Nd zSu=mzOp*elMGK7bf8AxHzSo($#sjCN22{nqp7xi=IE`g#nn>NvLTS%t+FWo z$yYCd)Y&SeTu@MIM7dRJ#H3Suq^VVO1nUwG#~TJy3P+Q!%8+v41f!Y0Gj2y3#?~a1 zu``H2V2Ex2AK;5S3sd5J+rMZ}eBgB2i*djJb2GutQLR6-ee8x)4;a$U8`(bj(d!=_ z#a6LrK}FvwDayGysk>FML&sC8{{djv8yig6syZO=#W!H>hBwd!qig(_9?ajVIzXRI zKSme)U@5lai8*`)3yTDk@W=(&ud}sihy6hBB{~4<#XlfUW!Z`YFzJOENI~ze+=25- z2Uz(sW%dWaT809(fZ374(pHxy97(pAE%Ldj@kAB3hIi zg%l>ae>ft(Dl#3?!K$DC1&_+mb7>A;eYm;0gpQ%zKddbK#w{%U(*36-f9S|fAvP^# z2;p}+@)7kXf2HoPW4g5r#7Uy!?2VC{;_O0W$dvB{Nz;-)O9p!+e})Y9Nc_wg?4GeOk<^B{2_`Wpmp6`Vs=XK2ghR{( z$6=pjzmp$yl&ILPDTU&>YH9S!c0jwO;(~Gs(7zr5VMr)vN(Q;bXJOT_vEuG7?XR1y zd?jY;sQ7}1ayjr-CRCI*)|Ue3l-dcmnZS>TTeT#73a}U%XGlp~`b0`eff->}UBW5! z(Bh`@GK@;5yCn6C_%%M2o^jy|wogx_HWQWHU;#I1ChfKZ_vM9G{>~bzn%iD zpsEo6U2^?9mP3H#DyMJmAZl!5?4S?GvHwi5St^!_Ya+G`N7NF1yNg9r6P6|s%)94fTxSb2`&mHDG!#SY*0YSwQ1moSF4rDNqD zxvh%y=L5l!=G5=du>*IW6F1xf4C8dvB-{RdR0kG39g~=#lTM&wU^nKwX+8D#h1=;N zM)-QEvOqc?3$m`tVm{)+>OYRmmw)VY6Xu+sPd~sb#VU?#@G_xuU_hhtl&a|{-jZ`% z{JfH~R1qwF6QIHG*o1kL*6}1~8g09ZYV3kK8|M1Fey4fXXvNU#wV3-A+)A`z%te}S zw{q4owOZkGSP(jgKC-#`7mJSIcGD&5t~|?ZUE}g|7VIsRr7n@EQ!T~m^r?@IoORS9 zpCc14J7+XiCn)9lLPGYlg1>%L%9bhAiJ_a;(-rFUZ@K(rq}>DEafR5NZ;6ss7Hx@_ zZhTO#QNmGvVty>roFUV@ngQ6%MvMQon}*+YG$NW@kM65#Z=_?q-uh+*-A0UNGv3m! zJh))toTjPk!%LZE7XKyQU16xJP-H~vCwlT-Z9u(F6V^(#8y;Fgu!%%Zz3Yu&|1sg| z=9!34kNw?5G&DC&?8iGUfq*R8S!{W_aj9^5hOyD(9b*wuzCl-^)!j@``MC(Ow$|wP z0#Bw(4%y44Qyu~xIRbw9Fh^5L?#!Sf&bucA&RZ9ZZ$5tGO{#vvw|acFrA|q;bJ%G% z!Wlu9YBr&68Rg+p6IR9a84!{J0cxPt9+Q16g}UlUtw=F)BWslEAf zd+eM|5u>1nkJkI4*v)_`-5(^5CI}ewVaG5&(Zo((Zi*;GOf)T?$&5vW#oLQH&0_au zYXCZE4B@!pBU)`DHqux8m42%-$TM;m^U`G8Js)UtjVFDk;0PI{?{JU*sn|X!_K&}-@zP-qMP%RN8K^YKa)B~-n#U%I0oj- z68S_LF$E|ZqE@Gv zr0Yq0J!tk~4Cs|;CGgXKG{?^Q8D{(5``WDg6a3eG0uCxKu>vU8&Hrt&uJ|{Kb-?bg z|I`$fakjFOb9DUU-Sy9YfZ~}95&h6378A--6DvmzjIl>DC> ztK#aj=PVtH(%wkkAKxAYkv@J41i#FSbX}#Er$-lL<#xU3GCf~+G(CKYsS*7^Qo9~Z z7l0^hblf`iDUy_BZnh9hM1h2VqM&PB#FN4|d+IuE9s2Riya0it^lfz;v>}%PTdE0l zTXMV&dfklR@96PNw5<8C6v}Z(G_2!F_1Uy(F5lEPR(IU5G|5zNKuD91k)fuk+qP== zP@||zEDkN*=a7hP_BS+y*+d%F+K>XXI@=NsMTVSpG(pcXi&ZI8+U%-2cRY&glE=SS z=39rCk2|77?5to=4yu$F&88nRb6VK9jf^&jTaQOXF*ZUUx?v($t3Vawn^W7GRcj5g zqj*z1E5nqt)$9Tdh~3YV%P>Zo$mT%HAIK`a$)YX%h#;-+$%LanBM7>4yPr19occ+u z^bP`j#mIV1TNmaG3v9MD<5z*nVJ|)KsoL^~FrOeqcyI(F0fYs*NJTJBDQ3P|0*zm= z5ClCDaiqAIcq_s%#4xdxSS$HXa$tvkFyw}MN?qxef81QMO2QA@m`50M`ht2M{D0O6hqXE z9=9Fy&92yA2jOC25f0yGcn)}Q6j!~*@JAuzty2<>h}vU9q!FVwNv-9C#Wj)(y(g+; zv%Es86XPQbqr36DB0{YQiwdLRuGk=shzLW}6l(J>4Ea-_Hw9tO2})zP=j9vJIc$6r zN@+_=>P7>Ct3_cZeLSL@T%YH^%u*%9CE#NXpl}Iqlm3dc1MoilLqL};7T|*XuRn_a z&J@aD;|%b(>mQE~|9o=z!%S^{czAJSwrD%wnX$c^%-Sx`NghT?D>^}vgE=cO&73&r zdwK3Q_@n%8VJOXD62QU^e#*Psx3lvj+rUS`nG;zIjYA1a*FHOq)JR@rNoq>+%JDEs z#iZ)(LdK%e>op^`u_PJtu2my+8sDUeqEyMhgahuBR1R`;z;vh{- z35g-Qn`yWa9v=mp16OE-K(pXwgVvL%cMg-s4Vy%?YkHOMkrR4cXq0`_qeb%7yUj%E zvgr_nTxn9fNC9t+0bpvdXAsmv2m+^cOnU@((?7HDV}b-uOh77Q%@;PFLx;1bzfEP65X{q5^iAbih?255h_1AhKBl)tkN_^(iY z^{W3uA5v~hrbICi}4UtJ~^m))cSS6ISzPK@7pj?GWIeVyIrl6oSBgJP0+b8 zI@AJ0>Y@M=vhQObT(}8~=b(^H_(}09%lzQ}Y#-%m2c$|)9Yf#h+|rL={*iqvcclB@ z@st`YxeJ)KhPec8Fxp4?jg_tUvDy_>SAS084wVw_b3|hIWJj9HAEinw zUkG5ZXbZEz`+U_q>R_L&*O}`{gCq%uiq445Cz2qWQk~OZ&dmjG_t=eJPy^ zMhT4?TWyrM0XHy4j6}xA{en<+JmQI$)P7SuJbF>xLR8ix{cvZ)#46!__V4HtgcSNX zbBS5hA{nKSDWiL2Gmy*6xO&IMF|@#mHe-gyEPQcRc+hj>Z9J$iYR|7~-2y)nCLvVi zAAi>{bETh#A^>M$;Q!<-FthySEXV`S!l$=IA=)+)6~n5k)$$*LR9{v4y2+B!%fSf5 zWRdY&GQQUz8DA`S30*gMK{3tX&EP3#LKl6ikh4SUUcoTwUU_oyeSNz^>ZMtPN~O^Y z{;ayuZIH@7FH#~3^K>(ppbbXLR&jO;(6=uihjwqvjAkz!ed!Pq&;G6jLD^2B%#sT+ za6o8|#(#-_VrV7!MtzRK9@}3Ow>t|L&vY;rxJowC1J<-BmXU1XjUkH8^R74>mrsZy zYqh>aZQN!TKyz2C;cz0f$UKvWU_M=r{|)AF+Gv@8S}a^MtNF+SmkS;gUKqYR1Pvx) z;lS-)EHxHf$e=$!YWBq9rp(;Z_XS6^?x)U@xaLa0fv*^wNw*hZOejvgT?2V|zo{dk zFlzW-8Pa{9A$2-8zRy1f5!E}fZr>2K#;bGC@|obSRTy5;0=>YB8*z$!L@rwn60q&< z)QWypNV-)5S2Rwh_aFqp#5PzBH_uBkt-KaN!YIUzu_YUC_v{m;tMAwr!m|-${{z|P zZ&O}~F*U)Z{69#MVRcN6;{ce(B9Hch8%4r3Y<2=0cUD8|6P<4K-PSt3mDe)sT88KiCEM(HG@_*B<+!Euz_xD8D}TM9y}W=p*GB9Y#Q;6#G-$C-yZn~NM$8Fo%`m< z?1!S8>kbC2T(Rbup`%GHJiM1jryHfWpc&E(1RvoYgkNRXkibZ1tfS`xqa-*wCnSd3O7sW0(`h!k>H_zN*&zmg7Mn)54Y9W_cX z-E6ym^(1q<BpKdk`Xg;xU>fT1sa>4siTWr(5}#N&k~8_6Uj#jDY6-dA>%u%xpiW+FccE$h4eh<<+_-7Z<8W4v}Qyhf{k zz0#rrbtRIl2oLYbG~zZPsJt|&4Z zN6$agVe6}2S{UwRWm&$eF$CcO<}kg0z*{nF(2IIqP;uX;zptz27CQMY(F^)e?fR?! zZU+4P>-ziej34}k$R8w{)Xen&dtu&iQFYXH0ua#qldQgcp~gZ+`YKGb2J#8r?vp5t z^{lYQxaByda0dfD6Qp(ZrnN_ij=9H7Ky#o$*q}KKH(>F^=0noUu{Ud1{8Xh%h_fEq z5&UH5!+|H`&E`bLg9?1lW3S)`jUg>olXm*?s1=(D`+)YFb+zr_=_t$fANGd5ume%4 ze9DH3y~UcKT2a!Rt7%Q99)2Xp(pKx=HXF712yh{4bDtSDW~wMbK*EZWRBJ5OX4}#{ z3P+lJ?#fmC99b~GeJ-LzKUF|F{$gStrl$o>Zo+^YLrg_21tv~5gIE|>S{;<+V=eYg zdMH#qyxa<^*_rs3e_?jEP^nUQL;R^=FB zvJu227!mWxHbTSza^o21E4u|$V~BNZzDbaTELGmj7;*z^a%6B)R=UBRMYuR4@ZAO(FX@J1rsK|4%~UdU_Ngjy^7=+&tQ=K ziCFH*i8T0RM!ZV1&Aks+gwey)S9I1&)fr8yRU5HN1tc#9tUw5a$uk^E3Aqh~>3PIv zDm>w!Ium2!4g8d!WJaM@z!xM)#I&V_#)l>|EDr@l$t40lI`}f!Ln-Kda_D@18$JEm%++-=YqY?uzbZIb65s1U<@_stXQ*ymh$47H= zOlXgA5oZlBqBuF9=W&+16ICYM?Rg%KMQyo7KRfOGX@-xvKw!~GjUWyu=Yjgg>_-fB*-<3J} zKuGie3nh3(WawKeiilBjay|;fxVF+1DSU@BS{WRB#b^<{L^q2$2jD96eM!P-*c6%$3_UucsXdM_U%_{aJ=c$^$o^EwGtC4&@N7c{kF=uAo{A^iPgvA=WJR|)mmJ| zTyhqfBC(oGqkVsUtm(5eUVh;pp{w(r+(I*Xr0HG!9Eq-7{nMoFhZA$$D|Iq1wQFIx zDG4N?Jl&&UHX1@yicP1StnWL+u@pRBjcp!oOO=4v`|LrbQrs@6+K%ZQp5$H6c-G)x zi(!l}E*!4IC7y7OOd+pqpI|HBu)TPjo}Lux8tJXCoH51js#$l6L#)2iv5>;_9JNdn zAd$aP!f?E`#)qdh7pZ}#P9=b4) z1@a7$gQzmmt|?F%QAJXX@H4)CRiHB>2XSReEq}iVWCjrku~l-daK8%V8j%)do@T!b zBqvd)KtCn17U_-$WKDdo#4@>GP4JYx?Kc!BJm>6wSb^5$Da9T{h;!N?PLx*al%%t7 zYNb7bF%PSZiQ$Y4aYSN{!eZj;v@z9*0f9DVrxU!g4A2^VIaqU;85|M1Ohb02i9OxefSG$OeE?knYW6*?*|Ya`U)I}Es4o7U|HT!g0^(YrG$9_u-SriXPB zm;KXHGMQ(4X47~V@BD4ftMpi=yu%6Ls~OE>p$6@dI+?_K5}DKm2p6&Rz!!-KCi(Pj z*cb8NLR`n?E^#rmr3l<=BFF7oA|>g>hoMMdQ>g?^>yhsmc2f!V6x@v0zm%8vA^Gx#+8de5O%sbZV4!1pm?C}ike~E;? z#IW&J8Gd@qj0E_OpL;VeM<~JSM7&tqfy2>1aU~2$1*a9JVe4OiNI)QgXLtfi2;maj zMu3;{ngfmyN7OaGriKTzj~peG>b~fsN!|>-aHAWn+K{@Zb7$VO>09F3A16yFkUBkI zO7mI^SlZTyw;5vPYK7&!-FEQ`8%;^WHg)hHbxr%ZE~w)jH>#TY^J@U-6%zbrcn-r; z8o2GiL+a1vfDXG#RNE1F5G|ZKI&L#A$|g4f=(03lONSiG+k-e@Fzp^3`2{BC<3$wj zRW~SJX^Rmrjd>Jr%y|^04yC^_hSD zR#4Dmp`jt;%JxFdXDn7@>sFa>!ImH`&Iwr=(V?r!jeMY*coYrUb1mPO$t?>&6|u2k zjr^?VFEdxj>Gi4HVqmimzL?6z0BeqKAFw+r_A5i#igW?nIw;ip?T~+lbBWfIb#;WI zExKxv=L9AOc%TYHp&DASAEqnjAM=GZk*sHYoGXo(#T3ZjSoLJp$-TSKmPN|pivB)9 z)}nFxvwSTClyG^2+rRIe$>-v(@KO|5@+5wdMEi*P21&^%x0yQEeOp4jPcqc`G$@7si-=w8i}oCCJvKfdbSgdhdz>& zVZ^ZbWPik8X3%G30wkM*g{~tkI|QBs{1%gxE+rwHR7MZOk|TPk^2*(I;Wgg}X!%_K zMU>^O6Ymb0Gs5tpg2{(*EI**o1u?17q+MQ5bk|U3xj4athcFxA^!UDg?lD2zKX8e? z?&eBJ=+e zj`UCJ!Nc5xo?qX6Z-pMbhkz$75X^s9S#tl4XDz@`zp|6L)gKk*Wa5@8k|pNtQ*X* z@8EmC#|06-81mKVe&+OgThGBJXF{j@!wCn4&xQ`3~9@-BXCN7Wuh8bzo~IAmw}6B}h7 zG%L{7PD`K$H(8Y6sb_B;>w82-FmbuCPOacCXPZtTA%(6OP+LS8_nR=$-)d{#ZNdV z;0ioYVHjKNI+N%M!|Cb>ZM#!Y(RAf4O$Fj3#lAb?>-!|bS!;*-jJ)z0fPd)WaYEuD z6nb~}UT^OMmYB_!;$m>uMZ<(nYkbLsM1`mS%_~M znv#3wd26NM#J)-Nwo$<7(f#PEOkYz+29_IX&Z=q5kM(Dfr3d<-*9e@>yF41acEA6y%t z!WmBGV>(G9N>fb4__RFUlrYcFz|6O`)_C#_(R@zU{)zq(X+S2^Dh>RrGjtU=VSzWS zmWMlD$6Vum)*IU1!wiDAn`$WddruVCe4I8N-E#Qp68OiiY5PueabDmqz1UBYfRE_(XN{ponh&5v+M44AzF-FiD;`P2;G5``1%alpf0a8zP>;Le|0x(<%qX<jm|rk;1{hbx`q@ot)yWS+X1}fNnlXRnW<@%wqgB|_f&zC32L-o; z3kMl^mR=0xr8F}>Sfhl_lJlU|#+6RBU>;W9=R;Jh>E&oy9?stTf1{)J~e=+a<%0bq};Xm3Px=ib}+ z&55ZKYyDpHaMA}8-^}Dsc;`-n0C@1Tzu`?dn*IlP(`o;N$9w>QCs1eq2RtKg06fJL zd;EXG!ver7_!FM#0jDMO1^^y6u5_9OE6Fc-%a#9thk)$y8(xrJIodCHcB$5=BmaQc z&_nnOURL!s7foH4!07B0Vg~@;%YTA*;8{HP-^2Sm%cTBG*KmOSMlDljr4Ka2o0OiR) zqr#CNWARyi49L(>CQSyZ!i)+1r?gZKPaWdxtO|HhhFt;{Dyj zgwf;;A^`*&#J>$To&SxS@{f1Ve|b%6|62dWU2ssoQobsuVC>nXfLO`*EDw!G7Yn75N&$t_Zu#xy99dtw6C9AUlkedyXvORD)%Yj zQ}eU4WlJW=&J~NeIXXFP+qsal)5s5oGxZ*~P(>+GWY;69`m)8u9m%oxagebq*~t)Z zPh!-sRh~7|uI?{>$`HMZr;HF5Yeey*u*ZTdQrgK?{r!%J+beTU@qb1Q z@R0aFpk@FcgirG(*wir+b3R|g) zoJ4LUwZ8!E^%;Pgg2MtdcU2n++k{@Y;XkM~Y$E)kCZlSXowBTxXEgaMq46F8654;D zR)TUn_J2nW@Z$F`sr}RYr|M3 z-SvL{j;0-*SBJfgt*0)zx|Hrv5-nGa0uCsA z^2(*{TpdB;APN=;3GeS~ck>rT`|WtYM8mZ?1IQs_C$oa5)JCm_UBJIY!`Oftk{VD$ z4y9LtHgEaNx>7GzN@Fp}y@LI^Az{dvYyW#{|0^}5s+qZim7T4v)xQKMEeizDdxIK% zyh4)Ii3|h3RDdJ}6eA9FS0IpPTvZz;IIYw)mGBCmXwMX-5QMc?Ttun5j;a})q1N4pM;W` z)ThNIdnhKHlmZwqs?As_j;hl$13xH#ietuHnq_d+qrMOBo^heCw@ zVkD*9D_14IV6F&W-*08k&8S-z{G|g8NHPe4&O(jdeCz9p1b>{hsA0STiquG~RrolS z=Bf`{(nPD{NBHAj(QvOqy3xi+B<67{ae&R9lDVWZ(Ri|ZC9LQI2$#3+w8HY(;sa0O z?v#gzwYf1pJ9|eFM@Zso{Q3Dp)w8H!PTSHK@0)-XM%se}*w7YUu&e$3SIUCy>^6$y zvK7j44-R&B;+n6Ec^2ly`ev}pn%3`xmX47y@;}&TzrVh@z7C#w88aZX2s?%SKt({g zDhr(!8Wg$>{ekk0G+%e{kN`{wCj3!gFoobew3SlN>gnD0+!4rTL^PT5Y} znwS0A%e(DF2{YdEqN*X~Io2|p&9+&(SnNh)DtBSWzAemD?2Pji?A(-}89q(kFuoQ^w&uE^^0Q9U->(dN@N z7!IydJU&Ol(p->gPC1LR)dS-FSb~r3HAL_w84!Xrf>S=bKbrtTWNy&31|j;ep^Z0U zA9dm5sX7SjC6|AO+qY=)!U6Ol3v|fJAo{5gNH3&f&2N%CR5$uT@LShAoII5w^kFb~ z-6d;%{&7XJbe&(NBFO7qRmpRfShQtkIlO70)2-Gblj|a))0TxxgjD$wV!-ZynCV4C zfw_D&`+uyx1#DZ3wk_JE;iO^4hMAcgW@e7V%*+jQ8)jxs8giJK85?G1Zt}hNxq9dR zr}wsWkDe`Awq-3#Udt24oMQ~bpeV>kN(5zM$|DBq+z3I$^bnMMZN@mW9Q8jILaZZ` zGb(4%*~BfZ$y@_d{(xPiD}(SWg^{H`4)5iDLEt0q&FE3ivIQaS4kc2C>-Btw+|EY>76SNVx*b8c-8ce>6KpkI)M0MhL0{qOQbK0FDuP4gH5NHJ; ztJCfkiCYR<7h?{&( zgB+PZL!f_x0o_du|Nn>6`cDog3~)9TvN5-J0-;m3iU217=(|k+51g!+c%8rPmp_aT zitS8I)AR_vsOAInN(iHK$!Ow`F#`!pET@xPHO$OOyVQhGFz&!!6latQ;8#qy91d=H zKe!La`MUV{z?S=2`Xuu_dVemv`7WI??G>r_mg?1@SS+!vx#o%K;1r33KKHB)EyfYy zZp(;W%k8@+nk`#I!1sudlfqrzT=GDVYG|i^;{~nxpVRu`bH&+oLZ2H*FEHC}u~s5} zKIH*AOeMYdbAPwHs{eXpsu4Nu5!qa5AvM5jPlp9)mP@nHxETf#ZlZ1fbm}T@c~3a` zmZzMQPqVPCgA~~{o1+B}3!faq3@-&w4R6_6@o;&?(x;xcco|Lk2IXE#)1}0)`0f>4 zYh#Q)$6;j1A0l5wM>Jqg6!jEYLJQ0yGf#ty+g1CbF z>skU=jA(KLCA^A%Z01D&)06+dtkM6K?vgZ){m~9l{M3^hg!LJ4nCx~)!oZv8kR_=5 z3&}LGNtm`oi6g)pDmAP<&+n^$st-!f6`RLzJjP|;73NX9u6{LM|28#UJe1;R^%3TG zBsgtg?xs;O$Mq*SEi293Y{PxS(_F*;&*P%)C-19AtWMnO~>G)`CvZ-hXJsXAj zGc%3hA1!loj((a$wb^GbHO)n5GogA4b4j$sThE2uq?$N$Q@NBOSN1H8r2GH|F%CD6 zjHt;}t=Q=Tbk!B*AF3kJBaoirjq~81mCiPl3pdPKb>qTX-DVPMB1O^p!Ms|vBZY$3|4}SS8cLKFQ+bew*SWS&i zS)#2!LWLMX>SM9al0`OO-dn6Tx(l6f$5vD_W<=af?mpq+3o;TCak{qun=tSK=~QdL^sett97{CsKKGZ*!1T zl`w3*h(~ukP0;hy$TV@L%V!+NvmD#jFkCdbb=L)QSIo?wIMj*j#__b;<*jeIZk^k9 z8&f762VJ1F5Yn&MZq2>A3ob`TvDh)>p^tiw$s&wtHRqf-*;xgUHNF*UOCGYjGiMVQ zom$B+cEBrP0jxhySBc7GcS0qqglS#MbB+1tVz6@X{bD(~-rH#Yyt)aoItwRV!A3z> z3$&mE2huZ}V= zJcxu4otbRsXLy)syGB0%1u4oyv>yefk0hQXHWC}fQMTU^xGkvXPd4UR=O{N$7q<5f}HmvuE9mui_m10TtSq_`LINPF#eQS zt{DcEjZ&NEZ`j}|%h9Jt-*w)0Y`eMPBjSdCy-PFu zRdY83-0ycN0;!yh-LpnFZ>pgUQv#6s++IVy9@u5wcGfwK2h!X3{cGApy2S@s<%vmM zMux>vORE}oC$42(ckk5}=jwq*j@99Nj}I18J66a`g5&OwW|-HgfomV&d0odJQz;-( zJ*wN*uiz49N`T-fYHO`{uU+MS$vx@|a@-XeNE@L4x-z)qDImCBw)F}>0ZAH&L=^wC zTY|hDkI49XS5|;{JIh0;7qguVKq){CAQB)4UYLrzQfwMKkw?QnnPFcJA*H=>MMphBq0NrGu}zBhr1TB5C~0MGDRTRbGTX(E zAar7ce!paSmI84i(8RNeA$`cBNxT!U3gp|73{LvVeUe6&cmUh4vVPzCI4u1WLpz!k zXEr4!(e8%GV2Cu5vq^N7cl;QBO_WXc`*H=uaQGv6g}cXxoXCG@zDv(CLma_kN75To zQ*?fpEiQo9=GndMRpmiD>UH5kI}6P2{9aKs?Ba^~k3mDQ?Y%L?yUd->vp`flbKvo^}QKa~iMPMKepeAQL$nXHt$RyrGofmh8CKdBI|_ zpnQPqw~63+?lTl>wv+m`1qzPWk55HC)f3&8r2HH^s{{!aZU9BDIh2zgm4fUFPW#)N zuJP}IM9l3+CK&HR@sjHOLO z7}PK0wFk1xq>kJ@?ZN|DiGILfyq%fyE#d(KX9z#!-rT6B(SQ-0VS)TToI)nqpH<

5S_kU2UNm8@@t9$ih__hZFqPh#Ou?<+J&krI4nk^-z5)79VBj=`D<%sX( zk{Jn6p7*5975L@^d%JQCWR=ZcZW=)%Sp1|JU-59oS-rizrv#dt+uUCcH#a{%{p^{; zZorPl-U#0oMp!cP$oWo=9U5OYgwQuKuO15^Ye`a>t9K{Z9`-J*tl5`Y!n82mJ*ax- zHK{#uWuQTr(_PjN(LkN@phcN)$wJPSeOiAg?}g$w8zK z8aF<%+Jt#lA*zhh1xKG<@C3ibI7hZPa)v@Xx?7~8HPt!D;w2Y=#UOsAmyLD>PyBAt z7pymXe@0KZn5L@{Kd@vMk&tGW!w_zF_|yCvh#hO&h<1E|H2!d!6QAb*7rJX)_=+qS z0ax2KBR`t)U8x^Ix0k!<7;2-}_A{C$6H^E;l(Ka64%+9#y3&5V&j~>DEfPX(4>TF+ zJ(qDqu^~EvCFZcH#3$j1d{iXY)KQKf>{;*JkmSj(CP~R^t6`c;*C?H{j_?LF*B0oU zN{U8Fe!`w!@kivB9nL*hYQ3q3PpN)JeQdKRlIj*5@}vchCT2)@U0?*=*a8D-lQ+Hy zGth-|{-pImw5-QnKP`7h;NO-9r`nJnnY(a^Hu?^72y8_y`%7jl8Hwd$`PLn?_qb;6 z=gdS_ZSXd`x)p3SOA2F1iDuuWS;cg6vJ{p4I)aYxWTxx!1?R*qp?6=0ZQ_f@Ys0Ga zgiU|shPIa4Al>&>M;a12XLvtR_%+2`&f4D_wW@8 zikSJ1B3=s#2^)$f)RGGc$Bb=3*J)>vn3G_4IOg(fpdwjGgMiR~=r=~_F=DWGosET@ zzw9AJb9mQfSjW~yr&Za|`ZlHr+npD)KhLYn#n}tRVTNxgF#uxdp=9H!xSL5?`LtYF zT~5zai_UQZka}BeQ@udf=a^Kfr7<>0T*k*c0r#o*~6gn zy4NGHDOqLNOh;2nMFv-+T)jv>!-l&2oDgk|g{|lS+f@24JvtZ#wg7dIOgGs`4Vfq;90@Pd`H))cBq~Xs5|CqPU#=xR0;E5KN06i zJDm+WuT8Ai%dMH->699XFB_$G7ea2Z(i_Fcs&*XckS~ zS?>R29o}v>H;%oK3a`MDtqi_G>4=FpHF;I}vi^L85_;76op36v#1U!b_dJqp$B_C7 zZ?RKJI99UYE?6J6S%3Jueoie8!o@GchMDdTs0)8Cu?D8ax$YNEg)L@&VL|B;=(=Sg zngf{uNh@`jLXk4ruSu{)Ec9jc29d5md;d1V@W(-!^Z<3NVgE=!7x+)QR#6q9zp~xG z`qd(}bB#4s?2jT?Im;jzQQ!^0Cu;^I}Fm zpd9jZ$1dh;tXPwo4^b#mZ^m?5N#rdJLn*d~qtZZdqzny1#c(+=e}^9yEvZ=+@Lk>W z#*+&=aQ!^w?bdDBpDv{a-=M0LlqF~KUV8wVo1t?d>&RwvYwAAUHi=-el4)7?Y@tQ# z`;e?}9iXL>-aOPbx|HSm_u!I3Q`j10B3k_I z+unI%nvfl0b@;ik(s!6(KVwN$>D(z)1>`AoKVj4Mm>39>=@eqc{9*_nrqCQpIS3-u ztFkCGTN`R$e0jiEHxJo#*|$yyi`}|l1C^v{EjweCLClc~6&*wW+9xlQ68tBjXuKrmEf6S`q6nAxX5?uqHlr(x8BL@HAxhaR(3=V@doNRN`aF; z_MG((yF1pyuP|x{_vieDY3(O|djADVfcXEI0EPa;=m65dwg*9{{|XScv2}L6-;hPk zd+J~dzvYi3eQQ)y83+WYMirCR81mfDG~LX*{l2wC_4G-ACepYtJkZwdpo*=&IcE%` z8{9sa3+vp;GGw_eHSwf$nQOyliIV=+Fq1r*SDRYr%1t8@F}Ua!@^ZcBq+VUFG+3re zn!f$mk(04VP*2W+8Dg7Q6s9{Hj4^F%O3;QS z&XU}Gz_t`0kCq)z#-uW3RtEEvwS-Xu+t!AvSU|obG#E zX?HZK#?~}tAME9}N5*!yN8V5<*Ei$RCqPw9UOJzFnw&tTsUqCV)0HvLO4>WRg3+5> zh8NqM-qznl4;%6TVX3>QldfS->8vQ1vqRorB%5bNP{@k>&Vz>Y>}5aR_&>G#+mrjMK5^O?>GUO=TNJKWi{uTkxB8K65# z``=NV2xjI+x9x_z zk;ts+t0(cbdXL~x%bnAvT3Yj5raJP-^mZU&IObn!3+2dKCs?9P=^P}=Hwxj&9ZIgx z&b`;6r4W(OZbyC?l{NojH7wE`7aQm>Ez`lN?N%dfX~gtQyIRE1ZD!Luc|QY64KVd6 zOda5YrU*@y;wwAqH{=y_H$qZ1wd>{nwaHeV2TN`kbMBqad1G)>Rq*p69acMvtUubpyxT*kywAa@qt9ag9Z@Z#IFOPTGR# zRmzGoM713f;A9mYZe*)ybYAJFt{5xT0pkm4V;8KW()YUL6%fO;)vQVd(eWD=1a)Pu zLqUzdKf=zv3Qwnu8%xZze%0_7e1le-9et%gDIe7al-uXH5MW*VZx$&|F;tvndX{Cu zdEmVh4QQO-lyX70M#}wE)g5<$?ZXVMLRiB|pUE}C6Q&{TnU1ZEl$jYulcSjotTZB` zP%HIlkEHrVGbtuN02O+RO@e^M#Fx3v5{fN?Cla4W1a+E5!yv3bV8$mj5K^n!(0h8#{p1eZ9ICV^j zbOolhO__Pfv&L?>z(HLZK`!lpw)54Pf_1Re{#!mr(eI7V{*4X+}4tRZfaN?c?q*OFqk?zzUbQ>ezej8IU`zZG8UP(g^U0Xpe z?TWy${Vmhk%(`B%1+h`}HRh3NoMpYop*avCd+G{26pLlO_eweRkrp{sgDF%8BYL+3 z;nKRt)dRM#Li=YgLSGhwGkt0|-q9nVcYM05*{ViJPzgHtqJtT95xkVnWH&T)l;G>RDAC_nQS&9SdT~D7O4Smy9%)+5AO>2y1w5ZP0XY+k@_ zeh-oKAoREEMp%5!>S8klJ6@6WNCt{{_r`%f^Lu6Zz}WfeA-kA`rR+;gT=DdSq)Mtl z%$n9YXVgVzjQPt2`fwK1FP?LMA1K~2VD_V+e!n|aZJ4sH*jsM+=A2{uB2lSY@8|hv z0pCuIUU%~`Y^jAl`kg*a~IUg)H6+U5;W+i+9{xExrv1#S=^ZD0#NarWamDl6j zk&J^Y6f^YeXH-8RRXyU=jVTFPFN?KrT9aG@P`GWS#I|r1u&Tv;b6kJ-yk1P=cW}K3 z?78yz)2XY0Q&5K5=|qWnaCIM4=lQ0TFKbgUm_s(&YiO{B-T1j z+K_<=$h^Q`a7(Q=*dIAt43>a`?%X;C#-zTod`PR2lfQnAzh$MZ&@Sh+yDc_4PG^C0?alwfxgj| z6Tj1|(;ne8(IOEE;U0;2S6R_x5#g>R?p1quO)R`9s;J8{HD=H@D$6q>jfeN^SE2#s zu#x#Dmf?xXjuX+PUbB4khR(V(mrNbnftd{vfz6D26S%7lM&%pSjkPKPDWANG8FuVy z2nwL$i4-iajiPl@ARWRRucHO3a1R2Kv6W+7c!~OeZ!ou1Z{}NN6*+n+9<^2J~z53_vZWs64cw+!?@bFd*SnpKi)euBFJw zXN#<@9<@kIA2HbuRd#;-efhcVJ7EVMIZ& zXkxD~L+#zx(r}&1WI}dvc-rO9%<^=WH;;P~64ZJ1=5K{1Co=~oe7th-=C+`E zm1|u{TYxVKY4>3)IYnSyr=r?2|AnH8Tv>5kiD;-K9!V8XMsC|$T1Q)JU|qYbku(Bh z##~zURz$ULTScJz{5M;gphW+0r_sWSt*rYkty4^tS7=sCu{l~st@C91d&e@7YL|tl z1yw4i(`v_zXxaovcF7XsbhvUM6ZF|&js~upU!1D0!k5}H-W&7Ei9;L4^Ki@lU#go9 z`DwkB*>k4jU0%-ohEER4WOX#!+^|+!E=<4Zf_#sL?KE7d>-DY4Ok%i>Tl9$CMrX#t zgLv0WyE6IA2CJP&+@gRg{e&pqVrOV|2K{;@t)lDnI|1R|V(XMUeklATUSh$b_~)YfNJci;24BC)h_&KIkyw=k1}&j!k6 zBc^Svsx--VmBo+ee#I#I{DLIxcyM}uo zHnCzB&qp^9IUlTK2i%Fag9O}_e^++E4PmIvAGxO7q+?rIkH);>JNY2 zsUb^;wXy{B>vIOLIYHi4kqG}Wg~Qh0SJFJVS9P>td;bbLtJ5D@wV-6Sdb52JX=Lk=jsqM|wHt%6n z0N#u?z8_8uFm@FyBPW66Jt{^)7?JG>&rN)4C-B4Q7EQB0d|5JsDXfGsZe}-6CoNvFhG{{@j%$%m_>2c4jkU(C$M7;ekVK&cci@id|0ZXojUa%q`_&VpW=MOm zIvZ`nXI@nuGKEwXp-yQN77S&z_Qv>?Jt+EvMLDh;{GGxucNgwKue%xZ%KU`R$cW4V zXGBX^OVp^)7_%$yu=%cCcB!NPvrl1CYZ&rPuN&@Lx|0o5n8he__6-Kum)ob~ zZ!1K`$Oi}hKtWlSBDf^qlxaS|YPgw7A8n92${4pjt6c0ymt7qGS9Nr#D$t>(a z0@|bKjQcel-cFF-G&RSJv<^4M2PQ61ztJrcKmV!gkJ$eROZtO#)h11m9wj?IwTm_0 zUpmn*!!FAPWOdYwix_esoSJ8viET!=m-?w~W>oP3$B~pQhwnjk^jyNNV)utGGVBVG zPuFEbf!?4lz@L!O;X+5sGZ_Pkx<2-%z2NPuGSA4`b*aoxB5onSBOo2mXl8*f9rQ{t zD}xXNuMj4FiaGv1x5RTN8pOxnlYpFBnvii&*--P37GdiD2@oRY;bLlMVrn8~=LWE` zGyx3#XO8n|C>FStKxsDLUR0xULY(qx3@*doWfu%f}ROdJoatF*$H()ip*Et97|8*W*X*gdNrBisI21gw0XGo5>K)vOH0=xwQbb+I`uk=wEg47;6xcU)r>DK z>lRu(3Bv=EabKwUkXM8%J}Ye9RSS?Ral|A2@O&v;gq`pZcy88os*Ew4OX~Ju;opLJ z;ChfQp(Xm_;tO-njN`m>+hmwzU=x1!V>H>$Ytwn{mNgATe{Ir*9hqh6-pd!^$?j<7gL()9NyD=E^6Y zni1=mdPi3c-7GN_8ph{1#x;X~@jRRm#MwfQm>1EY?oi`FCXlq50-ZyrymTq< z#+yz}wWn@Zw=0iC=mKIS=pq+wjIcA<3-${tE;*Z&Me;Psc3!YLtSu^`ln325tVqXF zv(vtv91EN7FSFgamKhxz490r$OTS8PqIpl!U!r)?4pCI34KB^nXqFE=v*(fDP@tqu zwM|AlkZzC;-ryDX-jFF}_MD!xCovdS2TZ6=)RpFaMn6zo26S2%Kj1Xq{8-JK9rS>_ zn!astx>PEP5q^+xQ0ROZTfMp9IOTyfVC>*lkn^w}0mP6C*y@V0C?IO=RvH45{;0)} zGZ>?ZOSlp=1q6hNi;=Q87N&{IZeuhdm~Sd76TM+Es{Xh}ZO-+0<8BZsx%7qg~bz1AfYj?c?2W+yKwu(@*mDaXRzp@5ytvJ;g-q&@r zaFtF|juzWH7ZtqHIqei)dA+&__mB6lcQ{qLZWbOtU~NRY#lW1w8DN2QTaf`3;ML6I z6iW(>Wr<#WObN18Ir?f5fb6{wO{}<^uHo$@r6D&blfLOiY4g+{_#NnC5P?{tjKKxr z+ji)4K&%0T3kj4VABd&6$So*BQ3rS=Qs5WvK!{oWVcBg8Ol%4o^#qlD#GVa%gmLF$ zpzMc{3kwhBoG;(Y-evR z6ot>Lz#3EV)!>>5$Ofrdfv;{h3{{e}zUYA$d7qS0PDJ`s75WtzhQIw7dh4k5KkUsD zB!2&UnLC6n@QxNV%47m9bpJm_-9btD-~{U*h!2O~38vA?X`wR*}xZ7vjQj zzYG>qA;qZTNyU6o7-JdeF-@WSO#K08P`KJpwDp5!k`5+9k1ZXD^f=k!JjwsKG4A*J zzE2x~PdH90%w%1>i7J}oloDmm;-lmvlDm{f)!L+C%pTY%<*;{KO};F%$m^iMA2`2P zzFx+WN*~Lk7Pe;mEg#@Yf1+uZg*j!jh`R0!Ym{(y8X#7?|Lm%L&r|)ozN*OqyK&Vn z_9De#9~`XWgelO4tNgylZqC5FV0*c~BTT`;N~909r(7$2TrXK{-Ah1^8u={sc=qmk zi2c@y!WoXq+rVMxXI6lSnUSIax~Qe3w}CkAEZXrQ%V!&Zgir9w#|KAVcqp(?Mp%-W zCci!xPQ{%Q#ru6@sSVyo*?nOP<&LQnFe)@*Wt}}u<9ZIx^0N$%kse3JBX~?8P*c$V z%244y$k6lY5z&1r4kwCiuTn5#L@}-{MfB?Lx-bLnW9%==^}s(~bE^MI9ik{BqQcA~ z3@{gR0kH~08UPprcP3}4*#Vxlcc7nfv1N4`!lRam}MTM%^YL7?eR|t<62Dk zMz~aMG6gaVkV7=YHCn<7+1jSZ=sn7g-Cf8W8CK+% z%tcfV!;U3P8!so9WF+%aMxwTg4P3-4ivN6N+fF>>KJe;6GdVB1Z^$l7BfD$XlnnFW zH_>yL?Pab)IA5Lr?YV{$k^YiI@2m48&CRCuD1v%uCJG*s(cmhXPvVGMx$4Cn3zau? z*t^(P3P!C8{#2*;%B(7s04u|H!f9!AveM4fh*j&it4h;jH-qLe)OjaQQT|sztqqNb z8Aoz09QXDShL!*CcSUzjeqVmta&XgA7Tacm@<4L8cI~p7HF=6Ac|c5lUYovpzspkO zP;s*Ib+GC3apd^Ku9n>47ow@#iiG0QgHUR!xNWpyxe#drVmq9dWMU)Fp$(2>0ZU`% z6f~C=@%_puXI7c(xkV<%oGN8hqA z48x27$##E5)3Q{LV#hnic#*CY!%~oE$}}~B;nY}-81uTv8%*b^3-4AX;^aYzSJ;2U zlWKBf6eF0A)lS=3>>MQ)j|Z)uHcWCp<0A1*@0Af~&BfbKU+nwX#r0mViw%vZWw%V! zg|3-yTpR(aY?~y|_Mc=Zi&kG4R5Lq0JEArO@T!(VCam|S*^F>w2+ee#8SKyq{lxB{lq!eU5-S4~r@>;09H zr%!L_gUmxeRguLb0ZKyXKQN+=w1lEd`6lo4$uZn zl{AIzy;tmgoctb0@CY(@=~K&=UK2^HHLWt{ge3v094;UU?SOZ4HwP38)uX)ekv5Tf z8I#MxI?nbVF%Eke*&zirxgQAclDhOcT*03v0^YB{c4%LR@eQLx&ji|O(xkT&hNKeI zNVg5H=#+a87+yx_EMRpM9+)%@re!I`t7)8Yk$mIe_xHdSu$Ymq-xUO+s{72pOb>gy z)+@rQhk$jSJwzW0z93-C3G7x*!8jF`e`7RT1>Rdh;a(`YoxNwru8I}xo_++3p>&Cp zhld+breAE&fb}+L<_LCYB^?QL%7n-`P=e=m*DNR3!pE31lHu6N?k`! zDV%mJ`8)3;pjOUTN+NB_1!v=>-qm|aYe8DdD(}zU&IlrJic#V7i)LP?#)M%PWNe7s zeQMSiW)|M`T`rqJy+QXkCAp&ftxeT^iVEjl^HDam+Zn#4xAk{x6)f~cL+A_^ zeH%J^#Cmwt^Wm|S9a&Y8*QpsGu$TuerL*E>%g+s{sUWfbQe57!z|vdRL*sg+;C{?( z@9Y#50K+#-AXZyzF&ZX3m0Uv$jYj`1%Dg9H8r0>|MxPC#ka&h``>IQ0?D;MCvJqXK z-CLPon?M3V$VS)?&z*E7g`|#PVC^rx{T~z{uJfov+#L~NBD?m@#`gP6>15eY4i4YY zQ`l0~jE;}y)JFO&)ko*yy`K}rLy7_){00)D#9cONPg?74szG_40^faq%C~SBISB1h z*#Kz`s?VbxJImzyUkqFi@fCFaJt~=F36-z-_LxrraN|9?V62)BwOlbEtA#|ISs@<@ z!D^O^`}TS&Ws0M4G9}oi()Mp39+5oUpNisH^U~06EE?Y15YhkqcBgy&T={hG zuByMCPCAJcftOf9o%|kt52pU71H}w?fOt-gDH7-7OH#`A4b(Q<0FLm@+uy<@75e(h zPM|K`4Ae0E->b6!sV~|8<^2C^m841o*5fZZUn~e(#;6{sjIG42)K9|kr0Znl+cdGY zDv&t3Yxqtg0DAkg#{Hy%B(Rb@y95e){<+UyKMSRf^@d)@yI7XsoO1D3klvGGYlY z&(y!@SEUy57@t1-TaF{CM@Wq_pQLhdr+v0Ctl)S0hA|8khYW*@W+|@A(QPCIOYMPMYA=41acl-kCg>;_x;Uw zT=f!LnMC$(nn!|M8=`L1n=T2K)A<(;8A}uw*za&!FU>|Xoz|CmhjwQ9P%jMQ`qm#* zC76f6d}grQmqh+Zg{T*Bo%Dy0g&rX00;F!*P7@+dhn_T0Fc%3?Zf|lng39X$qlmd( zy7e=9?bitsz16J=5$!@9^5&=s43VO8i)#SU(ws!bI8$@`Pf@QLocQY5_zCG$H=cEY zQdnS9gGB`@E7d5%nkyu_+j{LyaV3l9Gj^mkih(g*F#!&tx-Q| zxdQVYl!5WpMY3ok!`Fwf#ig}bYtdhxCWQ{u&KfjfGIY1o~ z6aNeeuX9oE{bBtnI=_uWZMBh5?|h@QKPjL2tia^;SGg7$e@meH^P6X{FQACA@&(Fx zh99?)hZ+e9p>+PwHXoXsIo#2kpk_<4rNQ>D<8ETi9DjQfk7{>oS%n?k8K^5dEvdAB z@Y7*hK$`f-`0hfe9Ev~xa_1n)XJcbkU;R2yR{v5gDm|8|$T7RaH-esH%c_DaAGCpA zv3*b^X+5FP_VqhXXd}|+&JS%)N`4p-9$vIM*?uP!1{7LRpqPiK zhuC}+P(4_oUmE2LNjBpS6bd79opgT;i5+U4c0VqPwOA!uoqj*Om<{p_)s7j8ADCKC zg!@-twaPrEpcO34y7r!tO(L>RU@(^+B3T`efl)kx^r!|9PJGgU6ds<@^=8#)Dbn!5 zTWqmh_gVM7a|E-QCZ5*LdBsakn(y*EX;CXl)NvC@-bte3;;Rt+t!@hjAdKPVohHuw z_Eq>evUY#JS~pZ@3aK9)Az7O>XN5G zgfXwqDl&F0SlZn=eq@&um(7P1zA^d>RVA)s-(9}*)XeMmriXxqgP5Wq zBo99{ni~O+Swx&RC^(I!`a4y@7y0Z#oKO?pAN(vdwHkvYp;*R5j0j^uIQP-gfiV-h z0l$L|-9glL;X!(jqUZt8wn+sJS$q06J3>v8Qp6JTy%!F=LrOFjGuyTu&h0f64!cJ| z^d}M44YFPJb}ey&jovHu&}Qa#y+Psj0t6bwWT8G^gi8|-tiCoJMCSICZO|)55s1sU z>F-EPe8X2lusYWO*fodX@1^I!oSwp1>E-V~Bw?6cZhGZIe^)l)Au;<%3u7U&`owPs z2Qw-3@pTZ8BK%;=Oq>oKnq2M;OA6W#yY>8oaU$onrEl7bZeQec_Jw z<0GCC09lWw27~d@2n`+4wWEW+mk++}ia7MgoO`0+s@$g1!a!$i5p24j%rID%U+pVt zB%l;3Nv?qYvpfy-J)9EzIs=>hE)_&-X#{ z3$o5#%-Eew?-!+LR@dZhsqAdClX21j%h1+n0UjJ#SU zKUhapc=d%P^=!Sr7(pp@Lp>UEamFsNMYE=LD-Z^!P`ig~X2t$)h=cIMy~`9{5*i0U z6R!2dMIDATU_loJ_$nr>2_&!ZR^SY%G_-Uzcnr~hE`teq!zS?2wfRFcdw@MQ$b@`D zcHL}a&TA1TpGMyvEbi81h<>OtX~OCGq6XeI_1Hh^!ehJtlfZJ!bbiZR_mGSsT9%7` zEB*p=ZJ(#!I{<3*K4G^scbhFiH2|7P1l#d8*xF&Wvd6Mqs9K8_7JQSwX{Ns4dD?@B zI)^`qrg`Y%TLm$QCxOL>RKQ|Ba1z)W&A^3FvZ7>(^S!kq==91|ehO=eG2KlN`b00W zI|Xw>&lB6!&K`9t8aPzTD?0xe|I{ZrhW#Qu{xJu80!*4Gc$_|Wq5X3Uj9~yHd@W=2 zTvup3WbWuf{$mjF`Qe?9?dBcx2f&;v;?mAdr6(J)F}k3A!yEr2J@j0HK|n7ji-e=j zFkd0Nh-tZ>c=Zs6SIm4iY+iaMO*N85y^?3abbds7CM2$5d{6mKhgU3?tTU(oQe3;8 zl1h$OxbP;4tkX5n4pV-3 zIX;2NS!@zwB-7Is;n~O4S)KDxBoEmodh}aC2>gCm(KnUugO}^5srj5<+b{-wY!NE9 z(DR0|8jabNKW4t*1_i|5?a8js(TbbN-qTOVBYs6#`<3Bf*E%5l$&)6I5EP6ok@ZTK z%4ueB|6VV|j$Vq1o88y&@wZtSEJ%^?6ttl0hV@Ss*8fy#bxsdqRsMRF*CfFHuZ?|C9P z7pLpalSvm#k3*CJw0E%Ub>oFCArXFSbHP8uZp%&T}xw49r>L>W)G$a0B z^^>cXP6E0xC$RzkcRKEPS%(Ze`#FR#9w>oX9~X=&!E$B}{0<$$fQLyXit;f;o6N zlUX&)%|zK;Zer9S-!VIydu+0dK?M4kdd^Wzg_HzUYs@OP0Uk7@1x!U=i>Qr@)HFLC$COEUuLIQm$e)QV~Yi&Etsr@h6 zyTxOy+a&HI1dV4lHc{Q$N-6|PTg(g0Lq^Yf6A?)|sVvR(p)-TazWJ!UwoWu6$M?2+ z=-h7N-&(gC&s}ieNOwT$C+V#P*P0tm4=yM8rc?(`ndxQEo}&bY*!IYJDCu`@X6;!E z-BLl9+V3`!Knh|yz_;Et)M^eJdBsvmQ z9_d!slr~e{65u}jK`y9@`^Kr2Azrsc2)=r#WYKEGcT7sDo$7GH ziWPd&jtSXp#{Ij<`_5=hEGFZKS4uOVdBZGI(8vtYFd}C5LmlT^G%( znc|3LNz4)QBn_iB2qBQ*s9+-tOCQTlOgJJ5Lr>iBcwK~ygY$UZ5)J(%48vfIt0Qbd zklLS)jCV)RBw}y=0s;y5d9k~pT>_sPgCfQf-m)thw9~E-2}wTcp)EuxF=uvcKSb5> zss^WX!ifz1j*$9gYJXh$SU$mQ(*1Y~d5B9HN?qj|{2e25=GL5Ih?r8V(d!4>f*LKt z_v$P4b@){kJLyPW`2XYVEt~2JyDjZN@F2lGxVyW%ySux)2iv$iY~0=5*|@tyaCZ+7 zczNE_Ro!3uRQ34>t5&W1USp1V%`uTu^3vkT=mZzmP?lc!Q?96`>cIs(C$ZGZVk8+j zcG7PCl1V$p-8An!7jX6NeU8=Q=0d#d$1h3S__s-**}r{T0r>ZOJcKSP4@`q~#3KJ8 zoN0v*bJRznRtmM|5h9aU3avN?-oqYsWCYYE;d*6P9V`Zi{$8MK(6+o37#7w0#jsg{ znEUMm@;?o|o3TlHoiED=@a6UV-)r>$*M{DISw3QN|GRS%qblRFppN!ozo!|g*vAyt z)UTMvKIBvdr}8WCr#7DM8M~9E3Jd^)`T$n~TgTZhV!Y$EsTievL@;S z4B+<019MCnD^-`VhwXRV`RB{94y$>esXPtgI#1e3cDF+am-5*C>+uoF}cLQXyWzH_+HE1$8tnB_YS9chsmZ*6w9JROmddq*T#|xG2 z<7cJX+Ki=|Hy>>|Q<6Y#RjZPs8)bP|9*~oD9`Kk2CdAG{oszEzI=Qi!EFDIefD>h+ zrW7`0xa&%D_a#rS0i(rTYX3fZg}o{JITV^fzM;WWy$JS)!2!@OG=8ewBm}hu#X%M< zI3QUG8!8w#Wp#1PmEYlCR2URvF39z!BCqDApUKwUE>lif(%8P?XPjs&SLj4~5ZHAc zKka1Benfbr+LPFkOr}^RSoDks ztXNgpRoE};pyL<$LY1C5M+k$3OCVfNK=r@NWn>DE#1D|LD(|Bp?YJF;yT*h#_=XJ9 zBUm8r;MH75m@P?rBtfDLBU~k=s841aySRetPgbW#syjOahcJhh%O7qpB^y0Gh<_%p zcMOo?;^QaA5)cxybwwfz=ntv(-UdufcVGd=$d|BCCUH!LgTGjr1bVwZ2&!2NBM1m; zdZYgV`0ItECTRNWdm$EnvU=>O0PV@z6#hLWba!VEa z9yXDM&UbX0OJOyWM$f0pTgu2h7ZoSXbT6t-arq;ql?-u69qXnUkwD3mtH& z#&Tn#L!)ZSjK^DQ=f?@v=@4K=ffH>O^zk+nl&eS}47+A2_(4k}DdFZO!;FnXhssd< z(?Q{!>@L*H3l<(S^`O0YyfYD~vQ3H+i3BArdxY6uByS)smOE~(AYp>+UOygRwCI@W z8w=&#)Z^+|wz8f{CZCpi&V=%P2nW(UUb}BBxMH)?Gcf!$5 zowi!S1gsEJZw@VgLhZoavK~t)iMVw9CHwY)5!5F+rgZ@QV<%n1G*cgU99wK^iI!7S zmMwWX3>?~u1)}5vhD_buA}Y%#kYJe{nNv;%5$Xv$n9UY`S&$Ol0Ml>>*9_@0YR-dW zO30=Zhkc+bQ>ztzmd1QxVMz$ELc2ESfhh5K0%O+dY+lWuso5m7gbkY8VK}4B5(~3# z_V#w#yK{`hQQ#VRH1rij)#QmHR`7Mngd{N)oK;RL$F4L_e-MM-w?6PS!N}FgZxz5> zCs6AW?5h9%AF zgL3AWr-9Gj>x~%s_phk}nt02k3deOGdpV-brYD!0GPVx2H`(o(vi3Zu+sohr8f`;TE^6Uz+{R z$*XktI^*omh1~|4Ta?Z&`OF`XQ|a!#n)@6p_&s-4?NBnyK!u9RN)vSGZA5XyJ0(S6 zqpYEucfJR8+&>1oT3crM}q}x%ja6?+zOaL$3mL!-2nq z2f3s_?3lnU@9o1)8#aLFD%KI?njR`pt%fPkU>T!~SfEu6LL|MRy*Tv-iSyV&YNAI!k`Hz(TWRtMW* zq>;JCq~Gl&A{qqjH<~_V^rzqV<|W&Q;-%OZ=VjO@f0rGes`6#2weP<+-Ha3%eSn=| z`pch`%j}gfc5SvfJ?^p7$$T})M6ST{xA?omuoJm~+YX&)^q2;oCk_A1!MSWt|3Q{) zj?vwBask&JJ5S))3La;O0q2eUJHTEU-xaK2Lv6RW49)F=of<|Ffg(6YJqkPgp~{$c zUZn)x4OSQk7Je?Jl7FoBAvH&-=z?VZj{0#XwOc*lq??V*w$(D#^2nYxrOFu@+v6L}ckC$FdrC=jQO&;3MsucZQ?atr zVJ$bt7yehTIrOLUqj#rH0b#Y<(z#h0aHeqVI`M}zVr#H)$9c5qneF){o<>RAOvi=9 z>`qI2vD9wu06oYBl@4(!@qxW{>c+eiv-v6$mIOA+4K1zRZiw|IxMD?yo+@{r%RfyO z#=*gT&$l&|%RLShG>U?rA8b5h1nJ`_% z)@O?$Dx_WXTn2-ND$S>#`aQLVZ(6F@2y*!tZV#JkMjIDZ6Fa#kZA4+9i-Mj~GLoa# z_05(M$9-gAGAQMrJQ+eS=rRj}xb0>S4XzxbOP%cZ5;bGhJe?JLo**FMduN}Q^JTs7iX*r=U+VW*T$E$`y%*{4cT7!k0}F| zSUSGqJ#Ca`)0@@;@eIxMJyfy!nUUK&$l3vLB?`1mrT2#g_#n#v!d@)frE^Wo1{_jerLk0E|E(&Z&fS~h2&gLOXH7CTc zkwMrSU&L1BgxYHgP5RMYbLSoFBMTXIR+y*+^e7!WewM}DP4-B$BST?R$}pNTiGchU zkHktevWQ-bp~y&H93AJj!arJSIkMvMAQcwl;)EHN5dRs@GcUN9Cmwt)qF7|>5AOcj zV#T}T1j1OQeuH9hs1r?U2azBA)@*)Mk4ahjGlc9;D$jNCQ_C8+ftJlZ+0pHfHqn=s z2kdcA`=TCJ?>MOApOi9S>0z%_RI0a3c3#`2UQe%48}*yjQ?75h%DIS)B{F{Nu>FtA z7It|sRfnxlN9?(c)0+YOrO5`GCNmO$-oEKKm@oWS9+*!S`S;_m+BgL3zth$KqaL>A z7Z>p#i`CxM*-OFL+RViDztnY#hLxb|3i=2A#6#ECTk5=JxC5ie?sy;OW+KHpViC zQvXRxOv=W(!e?nu=Glo$<~12f#uPOH5Jai%ZO@t<(?b2gYlchs?7**v`Rr(Et%*}N zW&*&;IL?^1x}@@`udAT=&dqO2VlTmiXyF=EtDc@0ez7IY8nYrB1&(94qAI?s%ngbc zj>w+XgYDUP6fK4mDb|oB-I@kt{1|zY5;>}bVr}#*3Dm~m37ph-wK*nlAWDcNAtPL< z3YN1vh#ZK5SIHv|uyUxH#Jt>dgryx#!`7m~Zq7>0HtmWYNjIvfuQT_VtroXBax!mf z%qhKHrIk-hbhlYul+9!)`peE{W%+NK%GOVZIVX=Xdez=OHx(6)Bk|EvN-xH>w7`c; z(Dx3}EsuwOr}%XGwB7ie#bdJ;=dTBC>0_#=@_D$W65a4GIv*TqkH| ziRgcqXjUC?3it~R_NJp~7+WXd)Mt3y>b3xV?p;W%4I|M%0vb&7PuP7m|E_laS5Ot zKp?g_T#xgV{@ibAwpnJ1ic-j1H!hOpL%9eqF3?tP_E0}M!25pw`oo#oraN*4#C2~y zzDa~4v(6(-nr$27IUU$k%x#XjJU236+ ztbhpdJgicGBdN(Y8IGYEqiN%4qTpdOY*qtIXF^2cq03%bp6}wF&LckSsD+ z={B)}YLpIA+k{y#QNtKT?6?gd}=XrdhJkV1oC@l!x_pSi3+6~OdY^0$-gqaZSlYW zxJ8bqDOS^GWoC^mF0u+`6YB+N;466wM`1%nT(3OogBMXS4qL z(p%kkRId7ZMXk=SaxfhEUOwviVN5Or>San*^Vm$n-mj`HAI(lg#AjGYio41rNl5-9xtj zjRvu9?^_QYNsz;6_+2a(|CFNus4W^|CXtgK)aPNE&dYMEhD`-bWg1K-l4YFT#@xpO zS(w4^8)1`l;q`l%bwT_|8#`tKPyuR3J+Xh8dWsHDI3@2+FzW}_GQA593$^(EOoBhg z`eppm5v{QoEvxa57o-JXVDwGcm4W|b;#mam}y`AO^R3XDk^EC=}ziPBY{N$HE4v60sSU!}1eGPn6>RbNNL7#i6p zr9|flk!XWfvsbtrODvCVF#@KYGTYYt0kdg582}#_`@_Lwf~zfSM0>uClW5aw7p^_h z!BL~ruV&%dIAccbvWK27vdBmAYBGxACbzzG)A(WDiwVOyf{9s2EYy{zSc}KLUfey! z`41Ooxbei2_ooxDSL{rVXhRyN)w>T~0MR3xhBzyoS*1zAcgZu@~I>FyEhvx zDyq)sVID+h;#z^PMy+|w%8*TNNqgHlEaoNt84dorSJe|9#qDB@<<~3JH3%UbY{W)X* z0P8oYAfHKLa#P-eyrXx-&pZ`HXv|aAcJGUB(_|ORx-rP-gv_w#W7h68_u{F6Vdz+LxA;kt9pG|MZB&N&X=Cj~_}( z?Fu3Eg|Vig|984g^ncQ!{a?E6|CDUmT0VvGGDTvwAr`y+QG#knJ%5JtIAsfc{CyN!f_DKlYSuSnmE-o%T zvv&3kE>|SAjSCoVk?Sf|6ciqDH5Tuu+N{73~*w?x5ca*t09E!;}v`M+FRr2vPH}I;o_DQPD}Wa zvlaP-sAm~Jqp2%+P+~fLQZy}Xa^I+#XR67)y$6WMPOhYEVZ*?$E~WqYhK$KMhj95A z&;2f_xcZF}71lD3J&4}W(Qd{TRB9$6cp8xe+GG+#1Q2I;ER@?Jmfvbx$^=_!7V!BEq6(J5SJ~s6HA(xj{z*OAE*Knb z2IFGpxKbw$v{ZBod$@7tXeE-BypKV4W5rY*aLS0jmk5##p9iAJx<1pYY*?j8Qec}{ z?oFq_a>-W4Xc*U9PHvH?NG7o$OScZAHOnaN7lj}2qy6U9%XGlZ|Bu_8Rt6JIfF*l7t}?ZXDPTt&%>gnmA1lHhXsv$?iI_CR+UI zIvW?%jmS!@JiscCP-!LdYYY6j#izwY@Wy6s)5Lw zNA1sc=^;xzQ8#wh^|%}a(wd54Bd=2-9oC^6*-{k4WY^bwQE`>?r8PrL>^w_c zddQO|Kl@$f)* zI6P^S84U;$&BBgxduKw`{DLErZdoVzV^5MJt0RFxTl^# z#a)WI$0D+nlxuOAYImR*5D!lp#^Mqf`uGNtt^wa5)NniZfX;Tbr}t)H18mEr_%m14 zW^BWHwI@QGqTT)VYRCASn32}=ryUX^Gg>2FYsDP>sOjttC~SKgn0>6-fF1KzHoIrF zB9yZ*VXE>2*Q*>Q9}O1wgZ3bYRb1K29&GykdPn#RzZ~tUXPRbSh`(yd6h@#@fRGIi_PwSFBxQ zYKAbGuKq60a_VKxyKPc&&1?qENAmK0w4s`_#8sjlE8P0kM1IP%BW0*is~Ggf4QN*w2A!YfozlcO#oA;@S6bch6K!?w$C5z3S;N@w`Ukf#or>}mf-MkjHG==U{}Ss zWo&O#^;r2eZWk%--+XE!g)Y#W@8>bt9_C!lE>E;RI;Kq(*3k$Sn?u`7Mnm6m4G^Ri?C|5eO& zt0W~&ObTa%%&_y1zXzC{sh290bgN)ALN8b?cZR^AGQ*%vmorkZgZPB^{3&cx*W0#uQ- zn&yB$eMX-Z;7;+%c(0l0*pTXMb>A)#p0s*y!4@^?)WLLVKr=_opq5C(3W%i=xVDwA z@lLKpnHp1ba%P&I$-QZ}(Q@hEA9V}iTB*iekWU<{v6p?5YFLR=>ii(fnlcdV9=aau z&t?DmD`Ip@GyJ@$2OpOR2u{2c`&;1=SW(d%FS)FjrS>9@Iq<{f)tr{i_7+>(9HU&! zf-qapgdGFELswya2zNv`B^8)ql#$DAx+!Kso9k{sTs79(3d97hQg7@%*H=C;pd~)% zmizWxW6Uo(mvlJiP!0@*E?n`s$OKjH_`{e_!wn^Xt2Gp&x~3in9@lC$A4O!n7m+t*x(6*+EJXi_$kL z0BEBe2)dnwoz5Er*q)I(tPhHQXzVK!%Pd-H=HuR328lUNk5M-UvWPDecGta?_;lcTOgSVe}0%B8yEjC;*VZJaosV!1CuxU zF>U?>CUr*@Hq$8+f?x>88McFL6|mqX!GdMZJZYRhB|TPe6Ayg(Hocz{)<2;*vgmy^ zWpN`l3;5C28o!GNaKWCY2~4XGG-3jY!OLK!GVAJsm)`gSeqhm?zI+1_17t)!VHhxX zjR45+;V^NGypfey%TYI2>@2#|H%d?$yZ7)0KX{J&~5;&*s~p&M*u|7ke? zPy%z!soAj`bij4w4FrQLaCc>OyiO_vb#-udvM$G{5k|rIw-EX+)q4eu0?Q+IswW`E zclmc*#Erz}z)#bcOc)BSeyIz?JhmK@h+{`c(2Cd#sy@*`u2VbA%zmkuXJ9!)-QbV5 zq+ML%u2B#sQ-7UENbgRos3$Bs@<-$f<0k3ApSlDiJ`noXd#}W#SD3S&>_;bVghR&OP$%)bai}os4nK~TS?9j+m!}vd`1<2@C20O}{s1?4TrA?^8|Y1`+^cc|ql@8B^1%ZI@^=TEfRJ%#6-{+D zF-Q(z5b8HYc=j5p#YU&U^Ewq~-ZG(b4j!3wDZJLDzmpmXY}q+twEN`Ieuw6KZ<7F_ z;_$DZ;RjM*|KzXUbqKq`NBCSo3iA7QA@-&nwi|=EqO~oQ^^cM;Vk&6uhVe8<-j8Pr zkD_Wss^qTHN>$V@&Els7uUOa(d))KS?cH1Jm+|<^DiO{;K7>zJa1~zj=Q=wazt(ov z_bsALo^SF<%ICN6Ytl%&m){i|jj>`q;6e4VLc9mm3yx*-AR&Ziq4(3d&at3d)v7d$ zwUGGVT)#Wy(q`SgK*wIJ8!zhDBs-Mr$81mjtL`lb%L|4c){d*}*hXp10pGR~RN>_8 zHmpb$J2RTldE7xzGeTV=paAQatH=)I8zj(z>B-E-=%@<9ll7a?hG>ZYjZ-aLc~Gvc z^J?jZOJ6B0k@uU(Lyn_dp?&s`HoQS9Mthy2YudQzKH{k_rm9X6m zv^N5%Tg;1<1VjyVg76wAaIpcA4o63-MXg>s_TOmmus<<)f4OeFC!L&dlwLvKG{t%g11LiC~b8lZu#LB6Exq$;M0)gG&t3Cw5pZg1rD+>PCx@ER(<(N(jvQI) zk`|99s(x0Lt}ZA`PhHTizoVIUOYd*KSZnBw{ZTW80A{Q2QkZh3$hkVj7PIQx)=L-^ zOY6DC&b~g(c1Kwwyle2f)4onkj+iBG8Ups$x5y$uR-9+LSRyMgfshVt zFiTBK91^pot*%BKoMF3bvDU|g9}W3~=M4#PfB$wJ+bct9Bh;jXFHA^v}x3 z)84IN0;+dWgI|IU>%g$ghqt)*+x06i;!2%!Wx^SDl5uOkX1O{nQ&vpH0MF8yiOk&^Vjz9%30%-Q{TJ+r zY3YdNU+4hrk)4XEEp2K&pMkyBcU*m*bEa?=Is+2#TWzUyU2eSQcf@8EtGwj{xm)Kq zt6LdK-iqX(Ck&pwPQdQM-DIA~ujkf|vH%m~cAa^fCdZg$-E;)}rj*QLwk$AW#(oI; z%}at~pZ`BZpQWZj#Dx6qTOjp+XVJ+1k1d-2JtF*nS~bnuu)eBGO9IE{i5y;Df>@}8 zRo`Jkv`{dFVDrquVo1NE2!40NHrG!K9Fqk?Mrfxkud7$PwJKI(R9n$eD`r5LfZ0WD zJ+H6({dx9F$#MCU#UW!3nEmtIANSe$yy-IY70u}~)9&%G;LzoX_boM2#jF*`@3)TV za>+P@cz@|wgO9Oll#h?GmcNY{b-B|Jyn*nRa+o3HQnFBaohlEK-=>Bcra7n(JWXnp!YO6LpG zspfKBfzet8pqQp%y^{Iz@R&rk3RX-w;)j*F42`f`l)#DXi%&MP&6JtlIXej2SLfy$x4>IJGOl+COqzJJ~5ZV_Bu5DtV+(M|p0!)<#$|b-T z-2kSeoEyF{_f~``a-83ly_w@3TMnr9-6pX>Vu5vRSJx>%R|qHdqGe$PEcraaN_hBm_wT6P`uAEK6R>&`sN)aE|+}_+3=7=)7kL{z7`tpwcG&!Q)k%h(gJVSK4;HiGY zXxbvr#4U)4Z1E{|mO#y82NNG$1S;0SFifH1W$x23!wytdam_7mm*&$Lj>YN;T2E*9 zmBlQPjbV#ayd=3O9piZrYPpXUYffFNl6;7JLs?{RlXd{9pl!-#l2NpxMe~Sv(>Tt) zWv=aGi@5L#+2d0SIO{yyP=Q{%@mQi98foC{Z{Bp)_}gzhs3r4_eO@ix`?%k}YH5$D5?ys-1V&$yr#X z@?Rup;D@Yg*MrUR8$$Q0rzY_gXi8%c(7COXP15DF*h@%>Cf5)D>^s1V;a2;$F=b#$ z-qD}?%L7htpJL9RpdJE4bb&$$ZzSC@T8muR);^q7ßZdkskLT*s~Tr`kYnY*Fn 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≶E<_qY=*X-O)amIvIv?ajA&7zZe=z!qukJ7IJ;Y9 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�E+E!(+ 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⩾D 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

w(OBx-Lnhc{w{jhk!OUp~j6LzIaU;NqbjZ7X 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≧tZ9h(IT-Hp6UT)WZ^%d4KKq0Rd557#Rf-2Ux) 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 TdVF#8jH+4=*u?j^1~_zAEejfaeS_o~U@eLj2T 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%0D1p>2R?I{awt7mGsB9 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%0AtIEplA2haVz`>Ia;!DtIT9eZ`lnVxD?1!aC{kIq zti8id0&&@eTad=+Y0Ny`tq~2T$wMpU2n4^gKd$K7f?NIV`m_ zQ*2})ldIxS@FPI2BE3bAf6gm!bnq>gc|z{4eO@XybRnry+;-y_v`)J5?E*9?qBa_9 z(wFahlam>M-HU0#Rz#?4y`}>u8IF3%32kpFEl7nMYen^8f>~b}@ z=rocBpHJd3>o^{f_l zzU4lvv}sazU(6Z!8&?{( zHyTiG@T8!qBD5zcL!_Z~#|6Q(z`AwP$LFFM$u5d>X>6!o%G%0mbzsQX5F$8@*TV|? zwKgf90Op6V;Sq&V9%O=zJy#iTSl3;Yl5~AWLrgj;{&h`EwSvNBnt9EZidFTyZJlju zi&>wgdNof4d70&Akt26gn+M%C4^5mEubP4`KW`$nc<)$CKKVDzZe?;EYQvU5e3T`! zTIqw|_6dO*D6WzV^qW@D#L!-3Cka*ZLcl-<=x1_g=|-{cX|fv$E~3qB@F)N0d-OF) z?ZYrwwlmts@sJiOg&ynH#Kp)0>lvu9rWX?h=?h`vd+us0KvQcLt-GYzs6TGpM>#6o zvj_b)Awo(mwYV-5gJn#kydg=minZPW&fu9gK!ic;s}0BnP!b)@2-Mi$if9LXW% z-egXoXtCwqlh zMFyj>2`f%?+e3iV0D6!D7&MJ=sxS=Z7kOG;G!e85fMc|>E+_OdW3KLv{%fqv@e44B za`zm6;I=3X$3`#A+%`E3!gc{ng{j7eJjanR#*WkJ)2_zOaa0euqTC{vgr`ibMo#ivxd2dXBnItbh9z zgwMR6<-JE(oBqmZX-F+b<@l)$Ofh&HDc4`j^rn=IAOX>#wWqisCVQ@hCx~$snu~_^ zk|O?+jruVg={%zOrY>EB3C5P)S}spG=|}7Hd^NpwY?CjSf$m~xf|dV%EW7FC`^PmZ;{mNs(mPXk zFpHvPKQ;Ej8pZsTgi?rDODw1@vBVkI7IZozB!Tt?QPk|G1;pC#s4@7WZW610YP38# zXS%2{3mCtR0}+ZIR~)g}2PqyNf$RgijI(^s)1AeeE3~rnEEIxY?+!gGmGQXLCG$zR z^eS!a9=WP)BXQ-0hMD&8@R(e}HFav`vRf_p8!6>)SF$d*E@KyJbc(Mlm6gL*w>tWi za^K#N`pseT(%JRf%G652nia~GN@sCqv%0tOI5@d{$6w;=)B}4mb4?&FT{$(~<6#zs zPeJk6Kfr>Iku>9a%qbLjgCy*xsTCQ1cdJt#GaX&o6|QLNR&>NCtfTTt-I(WgAistl zFpBt*KaozZD}$xGc!BXAF(udWCD*;W{NdZXS{|rh-Bn{ce2Y8K7kQTq{WJJtqn^0t z+WvKSZzZ+6Dw_yyyz_Y4P$S3@2B#_+WRGexZ)}H3k9&4IOzrK^?7Gl|xRyTG4udX- zG#{gk=&1N!5gtv_^p-}}E;&jn(n0ZL0~0Ol%F|S4|7}a!3__EJU)D}$d2R~&$a)Cx zv)+cft`57&C9&HtLe$rg1E5F;k!SLOxrhMe6Z9mb@`JeN=G95JjRm8|LI7ZdTs&BV ziNg*F$fFd5*Hl_P3rTPTp~iS0*tcykeSLO zWf?cCDp?~XtYg9}RkPZRYF32tH>&;?OKOE8V=+QUj>We96(={RxU7!$_fJf}IBhHv z>`B=0?k|D@4X6k(jgMOmae^SAZ6x^;SsTa5olTks@yk02ueX}bxKO|}^(3TzTWYvP z*l5L0Fc8$Q?ZLG*zePaih#DF()uvyDcK31C*~q#yweMmD<>GKQSQ4WSn$mmvCh5=P z(T~Hfg!;@h=`ztNcRzySo5RmQ*VGOmPBvEK-Qu!)S2cetZq3{BI@2RjT_;%XiX*v6 z1`Vqo`aSAs;{!#IZ+}MfK>#V-b3l9l(DBMLs*9adNWIo7o}SH#?+UFc^it^0rULprF$)O$m za7LrZOmR^--qPkGU+;L{ihkr)jJmL6M5^i6K0yL4Qa9Ozp@b=gF+rLDC%AoV1|}Vo z#vc2WoU~0CkScU|sGld{huf|&bmgjJYKp4z440X!oHr9gFaWjxj?&>t=u+gG;P#+F z2p(ClOI!dd*C3in^3j`vox2IuO3G@gTklVb09lP_kr&Z^7i4xkZGZmFa%g5~vVKn9 z>A|54yR8eKeT74gZ7*rN6&V4KXx83`eS|$EDa_JD?neGkBDt?$zhbG{!<2vl93WsQ z&}z5q!88St;=sDLo@FudE=qHMbXAOnZDP&Qh){$fg)=zBJ2LN zs>~i(d2mRl)yj@>7CW@C@VV8XBpO4cQ<#QTaNE1l|IHaY)J_9BIz9$xQIt!w>(&{f zjqSb4|JRKL^!TBtVqY8!L1j>fk!e|AU5Qn5;!7&fuhh&S;d`m30PrRkEN$or0BaT#b!ey<0*Np}C zv1yraal(D7LZRY`EbWrtKc>N${7ln)AIz5TKh=-Z`M;9Fe|2~MEsf8erp1taFi&(y zdMZEJRO_nilr3-onL=zvf}x zne;p0LD_EvxVpGKueIy0X1u*WtV4ZDx|sj;gneg;YG#pym78iQwVvgy19S}76r7X8 z#5aTmNyv^e;n93m2UinaL7f#HhQ=a+P#k2T+QIl@9+`**xodDMI$4c-96cZ@1QRz_ z9X5swlcrZaN7qJoGTT|K;xet97qqKVy)pSp07F!fT^ty!M+k2@4*j^^4N2hEU z-`@#$w`dyH3$^mv#l&)Eq&i@1Rh_R`QfpE|YsOc34Fdv)W>I#b@s{mhl1MCK#?A#F z{Fc*-V(Gj44s7sKi4QWw0wipt{ZfeQFlmZ&CHG^}MaJi)1wj`=I&zL;NiAX-jJLg%xe zKzfYuIf+_78WW1TDfbj+X*cX^obI~}i#{N6*|DCGO3I@_dZ;b^LLsCH^G`0V@+Vl2U|u-7S(YWdU75jP}b3*m$i*K84Mz;WVPl4pH>}+hgAs4TDPY=e3Z~87bX?bi)`x9coUt}y6N!*5(fJ0C4 zPh~8!|1S^yZ|6K#Qt~4`Qjn}u<~2P}*B88|iyE*NWgv8+a0r9Er&OI_C_@ECbA6v= z%C4ZFe9syTa-Xx~pft?g4&l)L{1fOWMJvbx)VW1B@`+~F`6Ob&51xhD=E@0aAeflW zlA{5Qo55JX*xqnx_i`nqyv{}REz!uOLlN?YlZBhs7mS=mx!KSSd^duxuoyBGo!e7t zpdGYm)VS&Us-_6#2w}bHLKM}WZu34$h1z++^lGY^xKRvX*PgM1K=CUv4=jtF^mJ8D z+KQvMvTO-SB)ErXg zQ9~CfQGQ#sqS5a$ab30Y7&P?-eiP^*+MjUrdiYN26E~2y%EZph4?UU5IG#1q{$pe$ ztJyT?^>PRGU7Z^nh&7bq2f`sGnr>}BM94|H2iI_`wm|@hG zvo%SD2tIn}!*awpW&OJyoGP>&jeW(H#6UF3N#!3Lh6mO#%i>b}D$3-5KcI57#!XL- z*3?3zV5^t+9i@N4k~n88J^lbfn|(gqw$Eg69ObqMmzujvmjk0uz4nbb_fnug)tK|E z0@%l8YRJf`^=B*3tO(e(vF4{5l~AU=1$Z{)xTh(n0!@}>_Uto_#t3BNpbz`4MQpta zt1c2+%SQEziYnaIJ;CB5Q#F!GZ%2fZ4|%7}AJl2dGK8znG@vEt1VqzbVUx{)p?R-I z$_n$ZMr5+u?kVfrVhf%DalB;{+2g1BBfmy6-STC^mG+tInJl6?goQl~n@uoz-( ztp_3~w!|UYn~*VR%$iCzp`mRp+$4LJF%U3FnA-^LSkjiBB?I<>$FOVqnT)c_sCD#+Nz$B(pzbDiYD^Jq{b=&79{ zAUeiwz_{paF_a)O8-^}ViJR%s zsvd|Qj2@02=wPfK>0sz!X>9b{!41Y=f2Z)SO=(B)KDinD+7K+>CYyF)3*>)HQh&IP zt^xez^C61O8x}SjICjp4TD>=zJ=|S`SIinBqvkgk_<)_(lmRiLnKsL%1NQE_b;c*0L{1LnQk|0z)Jh z>50R*#OzQa%ykfw$9qX$afcB-1osj=v;@)S6ZH${nB61(Jooa*kBj6v7qyF2&XVa-8Gj{% zC?+Fd`)IpH_hW7I7txNUmm_z6OA^>$BcbFYabU@KBiJt1t8hUTQ%F0)Fxr4yS~_wy zf~%ViJtir`R?1ZjyCq47%Alek_9mj0xFZp=a-laiD^_?n1?O*j!`Nl2l8o_ELSXL0 zicuVHcW0|3I*SQVK%nZb3R-N=%A6ERk-y&;TLvtG)5M6N#c?{b`^$_=9SXPk;7 za^sH|V+?ms9*Uf(Oy7hHDj=)XrnDco0kxz0$nnCwa0;<($#lA)u77v65c7@!u@|5J5}@&7O`f2ST=257prO>e0DLsSCwE>)0;AV6-E$lT&bO-ePV ztX84~e3Og)e-m|a7ZUjYu28W(r>%MiQzI;Q?i2zPWtjH;IdOyUFb=nLAW@c`(Vf7n zvRJ+HSuHwnD2lg<>-Z*mY&d$Opf;QP!uEUMPoDi5(?=dfmBJuB2$AGt+A5?p9L-J) zJEo>a(QHCw(5tptthj%x@AOjn*vTl8Gen3%SUx|TbER+X(R8Md^DCXI z8Zs`_(GMDG_;w$VAwSScDdq(Pq7y=O-FEvLq5_wL8R&lLg85yibZlY z-elVb>9LLrnd<)Iv-}px5jiq^W)LgmNZY`er>CzwaCHo{zeh1Ao*CA#(q1u;rv&Va z7+WLL=A`=~e5TS|9q6kx`Y)M^Zx8MFEeT<%I=c}g zygJW3@b2bkcvC{j;d+nwnu!j`8%A-!0n*@{O>0lfm)Vq~l4AnPAG?uN@lKyEAA8%9 zuHw9q`$(=g2^_Saug(W42_%ziz`qe>PT>?wXBddTkojb5^;r*@|D-&r$)uHmn^ zzty)^`9I6Nij{=^kl>xZ>>_vauz($9oqfu+r&3JIK{z4jz9zg$y#hBSkqsQbAsSA? z9nPa`zI;kC1r-h1Hx{*1P#?#+XEh!XCICi#h3+7WphTu0?WPB4@Xmrr!1k|1Goz@e zr;o(@1>R_8#)-OCJIqg&Om9uXIf4Xh_$Ki}Ip%rQZ_H(?INl;y+s`@$p$k3Bpjh`}6i8|DyQmUysn=sfqrKkX)Cdax59zjAGt~I7>#Mjd-0s>tBf^ z6T`v&kb1Ruw0$_xkH}p+gaOAGU`To(@A8`>fM0AYW4NwfC`_dFN_Cg&k>e%#+-?o@2kdo{lStJ zSpDSVuPS#`KH~KsBlQ1c3j3o6_*+Gh>LDOH5eX2T2-QpGj|o=k4E`P}LdjTh4g*{) zO2xi3ODbC*FD;A_kw|5E2@suVdCGp1q5I4?UaA)%dOH8g`J&^wZiMhboUH+6Y;%qE zZuO~kdHHI8y@U6|L}ZS{CXH~^yO82D9)ZcOSFuc&{YUV=!VSIFqM?ZB`l;y<;%n9k`CjCM4XMo7vLnLY^kynP%_rwxVO$XHDO@Bh5=BWrOwUg zsS~2d)0-s?G5oO%;k*J*lguK6oYMcV(F4fss_aR&4!M{y_nFalI%PlIJOkj_}sNrl{k!v z-LDF0hMdTdjz{$BDOJ-n_NYkA1sbj;5iaSnOo^HVLeLQ9DGee*zYsKrEzlT*gk}-w zz|~0h+Q2&#v=JN$GliNV)yM|Q3MGV^09?%)Ki$eC{w=lC)hEys{2@kq4*`KnF#Ba( z!`UQ(H`y(GbAp1TP^>X&Dy6hCkP@)MSOUHj$)$C)L zC2QKcWR})7_2h^eaf?5@YoS2ci>LGR=#_q6faoCA#ZL~6WJ~aFX0?y)MG>(h@9*AS zlvkxwdWu(5+gnu5o68#HmtJoje~&?-#oA2KN&D?N);@ zx1Tels_n-CPDW40ojtYXJ>-2(LZs1hNm?XUuPZHcSx3zATJVz_;egggR>LSOVrqiu z)(i6dk>%HsE$o4wDRj-M`0H@0_Td6$f#<||g~uzV!;Z7I0E;c#*yC~2%Sox$x+V6A z4A;qC(}?rV9(hyy&#P$|ZM(ZiT8BOCUi8yCTG~>N-B9f65g0R5M+Zf-aCk6Ymc|lQ z^!dkfR-hx2D!q~iO{Vh(rwoo6@QsKE1yu%H(k?_dvUC^kavC`I>6uhctulK+RTAfY zd*+>%6jD_faEm4S4axBfbgtoKn04yp@8nP2A6#g1Z+Sb52_rsXMY-D_n11X(85|D# zF~>;}<@#?&%gdQiAV~BbD@c{%X*PEJ&Zg0V5RjKOLde{|CVM(_lL((L;yC?OHypQm(k)3dRGti$gYg zgks6aD8PdJHYBBcMoO$xl=O3Ur#t;{H$=nCmEnrF0>CppZ5_t&*~e*PWZyN`NR%{k zdJ9;~5>u>`S`~V1=oY(%p+!vW)LaMQn7SW{THs0BJa63RF0Zmvk#?U!abt$T4t-zu@9k#X--b|GZ;^DV~;w=)AylQ~x=y0Jy!F9Pf0ZL;#>Y49~HVPFHu$C+pSq1PUnzJUftz6EMdJ8W!L)b+jQLlil|b zv{Dk&ESp0|pMIL#LppKr?;}5IWFl4ba4W7-bF!v}(lBfL@UtU-Cv=Dn1%L$ke;<;6 zn`Hk1BteG&NGSdciBwtj_?7uaC+x-N-g=5q#mg?Bv36GW{n*U?lmXIr8EPZ|2N_RZ zBc)>6IXnvk_eE80YhsL>(a$zKMkyQ6hJz(w@^US$AKBn0BI=ulSK2&;>;(UMY+&?J zW7#L=M-y|VX2QQ$Vc(gYfJhuWGp4$>Mahc~yuj6(s>okN2)n3CXw^?c zU@gD@as$55hxP+;#@al(=Hfy|xAtI31Fe3-4frP{T#?HU{~AdCG`ju+NbGaz;0qwa zAq4dC?iHr#7%eapC{F6UFxW0WK9kXZf!I>=qVsb+mmXs$+JD%+1n(qC2A>7E$4XAW zEA4p(MoGawm!Hr8d=_b3@I3Q`Nv1wjpxrzDuraq^U0OhQg%+~&%Qau|n>T;D$KE1w zlSd!K;Xo9$A*I2-DZ{uk)qg0g^F)Vy$q+6f!hZ%$X&5iQwFS8PLI4IBktVC0SEM0L zu=c~J4&#aAYi=bz;E@)+3#}PQGri~yAayFRHT!f3Y@#^&Zn$*awQyymXM?!aBm~sc z`VRvxe3srHT^BQ`1kPRVquP^7TgmD-~~OdZz^A#*GVtB;*m_4F#w|LMZ@O;w-q zKZfMLuaf?&i~TQmd4tNa;<5!dB6Fa)5OuXH6HPm?{5IHq}_PmKyfF&1W#`mdolZEn?xCv#X6jiyLc;DWCe!wt{_7mZ2v4W;QK zHs5C;nRG@|+DjM?EzJaAR1P!CXG=5HyBE173qMLWk*PEyt*`sXD>{N};W)iKRA^mWeLFp6%zl_L8*{}zBi)KPxIYn82qRUigb_TN5j*j_86&W!QGgaX zabLSEyN1#iEqq%2wz2O%c}Y}1Fz$wx$!D#dgW_c8VU4K_;vgt^7AG8}73T*#T_7?< zqB)`OTvH&vLDqX8_3%;n7+DJn>>=g?_|Sz#S!i|!hZ{0E#QErV&e#3&_vvUjadhr@ zGtlF7N#w4avc^Yf>AvHV&ZsrmJy*5aWnXC7%S7&4M>lEi0FDztdXW)ZpI!PU6hMHa z6FiRoO|Pl*g1ARGm?yXj?VCwc?*(*^aj-3V{!Gx`ZAT6wLjRF6jEnZ*tr8Q9>S3=s zM@r%Jb=rZJwQd0<1N`TdJ&9|1#gOpaBu_4UoQk1?&9?GGpx5L>5U^2~m2GDgu(pMG zFWVxFEX(mkOGoKaUx!+zQ$wRW1EuVQFf~Qh026icoTC7RUesebN!m%#Pdqj_Ex8^% zO-@2Y*?EeZfbe5O9*8?mm zBm1YOexv_>i)?Fd<78-N?4ob=55|^%`|uwybiYjGr^MG<!+RPpYYw=`^3EP#U?rUyhYpmTYim-r@4#`op5*zPeaE(D|GlQb&Suh(lU_)NJz z{|#-x>$N_@PYS5Yt_L1MTHdHtWh;9XW>XF1eieCP6=9k3Cq-v)_i*gJo^NTYzw!Cz zR};_!96|DPdSU&it+MI=I5dBnWqzM6f0A^4b%D?43V>L01aF!l`@(m!~*aOxHF2~ zrd&+wR9=;)=0(q9FhN6+>m6LjPBMV}(g{rsS<>f>t3hEZ0KY)pK^D$QoDdn)%M|%B zEjo}yD+MCbovpD=sk}5Y@HI$*H!1Mqtrtcj_|_(vBA}#_F!I--01opH_m?Ac zi_9ooMW{Qpq59MOKch%U#s+C?lIk9lb$9!E1+f9A8E8?yN;)HBOi)L&$#>}YmYa>h zvzs?$0HEol8Fxh;@T5$h*LD{tFNfSG;aeb&4^w>=ahgL5H@Z7^QHAY`jp8r!QUmSr zrt>BOj}`pj0SUD!7R+&R6CH9#h4FB&ISV>N6KkV##&&4QXcjDYPxa7!jCWVc(1b!?8eGTxCxK9iri3l3M zVH!=u9rB|~yYx&k6(t?m7ZyFBsVFvlm3H4DNCu2M$+}2=S@GiiAqEKjeo`TTQYQ&4 z!iA--Q#LCkBJd_qnj#@^?`z;mEa=H9nAD}OW>5m}cDzU0$^(5wHTJe6Tf7RGLU*fA zeomp|d49O4Xbs~+&$Ji>BDbCkfSe*3on2Oa{dz$lnKc+ zdH?I-?9l=g_WuG%e;R=P9wY%^*(84VH7KSHR*14GcpUJS6bFvGnboS@YmHAyJ;Y%_B%pWry1PuV^U!h#*qU=^0VD~8 zs5MAh_g|m$$<7j`70pdF5Yp|mDd_e#7p@e(6fqz?qDs6dA#}eXa+0AhwW5~+ zE+h!Ss7_5*-o+bpIal{rQs0(SzYqwr5apj2k_QZQ1$-u-FyKNW4x8Y|!XSjw|N6YY zASyE)a8i!cWZcRPAiUE*)vf0EBlVfbiDJ4eS5)o)*%J1@|9UJGuX- zH_{)YkSd}m(i=56R3Np=Wst2Vt~ej6oYyA}Jbw}QS+yMH){|&`{kqmOo7jaA?>pNA z){cih*y~Kd(vItes+Z3m9;S8RenePbfMw2B(>(WGeH~5r#-3ls&wW1}bjgl}iih?h z&Jzi3hb{LA6e5~~OJ6Sc@Mlbla!_NXN9g9)9Y*S-zp{fPG`mDv5*Bqa^B7|$SB+k{ z&q|?>LAio^aQNn|G*mas@26|pJrA{=@4Q4_h9=0f)~@^@kGF}zNVbT_{93l+V$$5F zJ-e@1NiTcEKr2;RnZEt)-I{#kUa_>Grg@}svn;nTmPizM?Sxbx7FnvC@VEVl6P4>I zHU0H7b!Q!AC{1*ld#^#~Spl(e*XHzu37iG#+3ysDkQlCBJ&i<8pzS#GSCyNniS@!m z^nXbJAW=0@r#JE)#b@$^$PuLUCOMJP$sqr%!e*m;*p$fyzO0fak(N*`tA>)Ox5cEZ zoTK2pT3uTXo~S)lG*nl{Znd7sp}NGt8BnBN+9AW1cT7c=CpW*=6{fL}MXO z7i!#~qEsmI8(>$iXT1w^#Z{nF`NH z!{Rw#9B=M+1dw$yku_E+<3Y+Dv!~Wzmm0cL3=eZsTRW}pk^3?h*I8v|3g{@BJGQJ* zm35jF-7+k9(P9gcy%42twjP&Ym|$!uPIMRg6O)CW>J)ukKm*H3ZkQ8ixs&_qWH(3VeE(G{6w#xD}c7KbffpmJY)j=H0+D_g~gcE&hKoKJ-l zF7Y*t>J0=$FiDIDQ{yKiLD1U;un@P{2pDcZ%lCr{Wb!3M^3b7c#>P!XmmBnwGO%p5 zL`pYJ`a?ER_ZI*3|Jy*3+RK6|hnnNNK^0%9|Jna91@QkP8_@j4|KI-8|Nm8&!p*+- zJ1la`Enp0@9sK40H}M=@HnD7{%rD}fxzPyDMVn`k11{v!#w&tG>;38fFTYl^g$sjb zDop?B|F6r4yI-3)D|o z{424qaHZq?8L?X&Z#t@A2lUQ7-2G^rD&pag(Z+S3^JWLoS6+>0H@@$YJY6hPE}~B0 z03SFeCq~K!Zy$}mrI-IG@v_$t2{pnq4^eEvE|(xBs|3bp{q!kB@V<_Y(eisK_TM;pzxP z>0tS|#o&6Bl|gnPPuzZ3dDU7K8QJ z5wm@BYB>?>6P1V%@*}CqaZ*F5?>q`6Y>%2w&t6wD`sPLCB{o7?|Ny?f(WgM?0;80Sc zz)31dGZqc_?+r^ds6&GzjFAX23JBWi&_U3k64=s&rXt!GpI&qtw7swUK#wU>l;<59 zU{3|tA8{XNaOGR?Mu1A8Q0nF$Zh1U?J#)Or79Fn!czM@B;0ErL)pUb6-gnt0Y;ELz zl4~+=nnn(%RQNz4*5sh3UnUk`Ul&chtFBNGSIEG1l3u2cej9ljY`%cqE87cQH&{Cx zr!2w194qE>0|pn3Q1zy!YVqXr-Bp5l#Oc=m)4O^2joAPhXg{aSyrjX$2mkaT$k+jA z&N%dOjbLti;b!wC^gE(UqImA2Wb9edQi^n}Aq~Yc>4=2N)IOo-%B3TQ$C-GW-BqLj zkY>`EXCYK$xM~{(>N0vlOhuV%DNBzrmfE6E7z63@qn8U|*9DdGx6sk#RhGbI!c@ve+$32{zFewtXwo&r7ww%!;wb(w;hI}@q);C;0%Cf2 za@?6a5bsJ{LS6wWY>*Arth~3O(5@mn*PI=LRx1-(B?Dx<7LZhF z2B)JJd{Gq5R%tn;B*#Fu^YsS^CU8*UQ6`B9DDu^XB0{wZ3;@~hp%G@tmw}<&1h)`o zXFqJSgecHEzCtenS*ZsD@}KF`LsAryTfOqD+V;oV3<t-jLbEwv_VD$<^EqexC1 zpLNQ#_&|j?E?(3`A6>6efG&`rIlM)SpX`jju&y7B9+F^*r-(Q(_f3H#=oG3`E(*tU z5<0q(BV=_2iT!|rh)YJ75}1qBNCzob>i1Z@6s`1Y!>{tUj38o(4_B)mha)wJ1Mn&h<- zRO?w+)vD%V`$L*X+eNYGp-Ix1^`06R%un}XJ->T!9d|emZj^fMcbKm%r_fbPvI$m@+1rE zG{eG0>LPg0-nf8^d}RBo+sLD)xM{&~e0w?0r7AH1TD7LjF%hFAcwTgg7Put1gSDA? zCjUKY8^)X)E1VW4Sq^VIYc`|cJQl&CFXXDA7KUnX(8XgLRTW*x{G&~t;{nMPtN!Tb z><%?iutvUPliM>!fzdFP4wB7;Ut7FY^X6zt)YmE0MUinyQtv_taUJ(^S#^I+l-FN` z;9J6v0Xe{R@D=i(d3A*U`!)Qpml!80YinWxj5;YqRN|-*$Q4K$6)$u|$wOsV;@}h8EU&C%i&ON3fPYHttcy1>#X`hK-A)HNI5#7>(;zAf5 z_eR>zN75X}_QnB|6)>Kk?Xq1Nv@IAQ<9<3?3w{F@woP&qM?>dKKu_DFj&4)|i*e^HImX2z7);XB$ zh*@SZp5oY2v?5PwZn#>|O}3G2ZvCC*CXXy7oIJdc3G*r%Yu@-XT*q-IP^L?=M43X7 z2jwM3%%{2{<ZSqq?r zB^9lSXMyk32YA^W=;kmNFhAs)5upQ+%WI7@?1!PN0!D|E+e(*Y8aKD$60N1HYN@8R zI*kMuf(dNNm>Nc~sjD=YpOwnKUG>(WWsV@7o3#5N71b9~IBSkh<$rqR$n43er)n19 zhWm0vXntoR6EZlhu0Sn4r&^+%ZcbHP{L$_W2!54-Caj5SOB-GvJ^-+BDj!g)D?`x` z;8E?B`KYGv`-$ot!{%jur8@Z%?9M+Z^on`+!kg-FS_s?*GFI^h(Z7Cj3IT;>uWb|_ zkLy<4d`l{Qb&0y1x2gvp_RUKFsAKWYX04sjAnQChb6PpXr2*Z#&eTilsDT{Z)J~yW z^B~y{gB!s^ohUYbBFr4zwudzDqYwE01jQzm5co$bjtP=Y0)K=xAu$15nQHROimdjp z#BBkb{41RTaE7U{1_B>R{XVM1dJQpsqCNaNk`b3m7WVkL^u-H*V!sJ-tE@K^N|iw*_pH(-DOeY zC+&!f>zs~!WsnvI9Ko+Cxlsm=Na|4sJ=C-YNsT@1CZB!rkY2D8WZ^EjBVL1t)GOI< zKlH*^#bWF&gl}&TKO&GIZ@D+cZJg+4M5;~JwnKUQmc*n9IGpfD!o)6H45p&uAwV{{iyh-9?<{vmcHK`-`{%Ge-M0? zrRwgBsEow@ks2|?Z%RduzwqQxz)*RPVnQi-B9K}f)jmU}*j|DI(S#(ZY4e+H6Y8D! z{8qfu(T5{lpZC0<)_Zd9#tO{S3xXh4eypuD-?jZ%^FEipKVEn2_+ZwP!$Wne9|qgN zGxH!vtM{#ge#hYJCko%~$=vzCHWG^5bPO9~-%yQL)ZGP(w@JLO0_C58Sr3EHPT;Bu zY_J$d5Jh_Esi*adnUry7l=~*74Lt)sCE54L6e|?%nteWf<5?n4vPcLL!!k5I&3kH*XK71{xgivERbZM!VN>lR!<2{cBXF|9&WXW!2DKrd@4CTkfp3MkS zZ+T^L3KVflHYdV37j1@S8~Rx~a;GyCyvc1FL1s{<^m_phF!aXHXk~lQD1e2wOGPb2 zn+!+6Ns%Ut*%dZffCxsILUGJKuQF6{K7uKi)Ho;|rCNYqWrU*%_UDr0$+6!OLF0rL ztqR||XyY5Is`tm1L6vIY8K)6)P-U6Mxj z>#8pMW`1km=o(MR$rklCi7i#-Cs*>XDJc}bfZx5cDptvEzC7RVd9tNa_YkWam}Zo9 z;54rsEbz&kZG(tY563dI%!gNmq$){`gH5OCwzat^SI5GGny=L%7Pvu!)0n5M-ORZd zeLsX6&cE%DX~gOkW-0kBj;QdUm)G!#KntN;ZX|3D7&BA`69M)RfdnV1kr^WQa0K5# zF~_2#3^k#6Gho=4N8&}-p0l90+OXTk0k|xTqc@8#C1=@ z#gE}40;g#qV639ITNeutaIbb;RQc%ryJ{$Ehm`I9rnH-Jf9rgnr(bg zs+dhL6;P_?z-Pv{kYV!ZRSgL>O7%K%jg)r|2{b{ttBBH6rzCrBTO_tB3RpvO)WwaE z$`9z{`!p-#VQcT5P0)XEq3>d(PiW=mp{RC_Sl)y3sP?Qg=~*E?9mCrUZS~2|$l$Ha zKO@qB4Q`IscwD=^P7{%fP2uS-cP(t=fCxYY z^6uZ?Rezf@^p}_SLS^fpsU$wpY;m8#$jlYLx8}V!V&^Zwuh$b3lM=(0O7Ca-BED|) zP)4>bR#^ZvBD<;D2^DR6A(i2C8e_1ah?Q_pj4jQ*-M-xJoxR%LI{WhUx~lt*M6VA% zW}87UCtb@pv~;L}O0c6P8TqJ_d$}gS97IIKystVd|0%QHw7wU6*oCb}Jc4tD@xyDX zY6|qSVJtNcmFF$XA{t0gtuoaz$>fyRY!R7%lD-&JqkN;c4#CW~+ju!v)<|o?yXNNI zMSkURj^%o}bZSkS!{dzMU{kBBPo6($rF6ip=JnCoq0EgPYs$U#Y0Xox#&BE)Bfxd( zGvix_a$BU^9N6fUe74OQow=fhd&{YswA&px-cQ_o~* ziszaTC<&C4<=|sS6@1Ar1v?0kH_hL;g<*qwjnn6V5Okwl0>g14UZ9JDPAJN5wN7c8 zH%K3LGMX+Ae=Ay$4bjI(5R5S#R6Wrloiw_lTsdJ2=0Y!3q!2I_Q@%X~|Ju|winrOs z-!0}O3hg$kiFx-i=8;h?g^p@d5j;m6E$*T@a2nxTter@=I`}?OW{Mquw=j4L+StAa zt3dju{@I(ZRem#W+}=bsf{)OuWStdTa(3~nV@3VFQkHx|b7huHYG68d8O!?|BDY=@ z(k)F3S-C1~xUMrScq%TtH@=YoXoBcG$w4!1jH1{uk?F-U{9)?`YhBIg!`mPg0(`p~ zY_wZ}{X6ZIW0$h%I!$X*&K>yDv4CCjdxUs@S-O%9h;It9odqAzzal~9%65VG_EzYI zk^>9gi*$*v$mecU`fm$B;ZgT;W9)XY~^vf+;5p;3&ryxzH+ z&Vlf|m#5woa}Fj{Mvqov7(z=WOC%z-rpSCRZk;-NnK1WBrDQt=!)HRKPp;?As97di z0NVXaRd5n3K5`Ga*J=S&3dusUb9S@mw+%;wzW<({d+a+ za^GSX`Whkm_@EjPg`i99#H0K6=p0M8vi3r*wXH)KpJ{_H8@^2CXoYWZHmuVZ@UVnx zKx*zmL$UFD?p;frK*;(yebm?3&*_qtg>VStCoyToI8U&by~!sO38~1P;Fv%cdH? zFz^mot_XoDobYu|HTsspLR1EHdQNx81g&_IlDpT9sQRsy02vfcszk@xwN%Hvj3!lcXmtK&yMlT;@hP zDbTps!AIirOod^8P}Y@B3Yy{V+4Y3J7zaPZHW#fHf&!UNZm@)Qg*sH!vR4YGxlM7T z1EX|ETHmO(z6TU`NNM1Hycd&cVSZ_PaD*OD^6^Qs%eNsWtcsr|be;rna{*=99 ze^El+XxmVojs{xV*CPFvhsb?28}p2)D;M0lFEdlU;%H@!*cNqiY1Fu30KnFmp*$=@v#lMdfyMpgD3o!%<&k zUaL5Pd%*voW(MX8L%L}CB#ML#M{BSdA^R3DRd!6|gz@#efIN^_9z4R) za)6A0HxW|uhjJrIBiSJYqhTXUVX8-e>Jv1RXP}?zc~}g*7jVGgiv?WG|32aIpWcS` z`?aiSZfc|Nl;v$Lp&)3(sOX~xSI#(`{jKe<}1mp|Eve@_zw@ECjufHMJ zPD>Fc@^M)O=Y|R>anDo>!#OFFfaPa&i?*cedx7LQDKydS`Co z48nXhBJ%iR>0djHb&5_Z&fXvv&54}>2vmgRmV}gel;{WG9h51-&Dc7So<^qv{0f2V zpj+>Bjv|^=H8!F%ZsD6?%&wgK2-Kh)V$^TEph%l1N%ExJ^xDx z{Gp-xM+hKsll{#ZU>2wTW8o0J`3sv8yq90vog3rk=<)Io$WJV{VBbeo1mv1yo9k16 z1|&@7b)y`4c1ITCLYuNtRD?@M0&7UZtEyziWIQ9na@z@Laqf$S8Po1&iCQ!rsOq%L z{D0tb3yuY^G-z;tS301rbEW5;BcLJrc?NpI>I2+Z?D`fW#4* zpPL#izdWq`ja&~1|AcZWUdj57%n~*|Kt2W50o(h&Z3fl8s=gDO^_0*Kdx9-JU~Rmb zU37MG4r*Bz_ewh?&+v`^W5cht99d&oW&cYE{2`F~GXlR?A@!~RB_MNHh-@vji&T>y zmO`sJqvfeTRBQ=zF@nflr~siME8<$)&&4&Nc6S}s($J_A+t_M|hJV}C&6h`9JLV}MKW;4o=VO+{m%Z$02C^wLK z!zD(ivB&RE&jlfO2Q__hHjQUo5Oh4L_1(iLRYOD|gKj#Q90$@?-Lal~6I`^ru#JIV zMV!!D!i=0^F3_-T5E&}LIGB|psa<_~bg6OIjewXR{M|QIX4;A+@=-+KOCmm1jnwYE zG~omy zG&$NNb$O28i+G$Jzw#uYjHR`uv3z=><~AzPP6ktvd8IfxCy-MA(YKkbs`oj_8WhHC zcL>|s>-iScp3!|@uqiF|5pPi{I%;~?#ozmjb0Fn`(oAz#(X6M+lp_?Qbc>bUV*1^S zrOE}#XGxK-kvQnAMqWgpRYh_leb8Brp$6~O`l-K8@k1YljJ;hNCie5Gm+JDOohXzZH_%RktE~^>Xcd7N@){7L}20ZJgLJ}c%SpG){Fsi5oer&?+Gk6O{ClmS@F$Ak%b@V% z68Xu{*l>K3oLm)QP$OjN64M&~J}@L?dM>?{$Z(U9vV&eh6hw-p%cOA2|Bte7e#~rL zy6hw!+qP}nwr$(S8{4*Rchs@jvE4B`?09m{z2AKE&76DY-alaPANGEpRaL9js`B^| zKuN>&lsT3d$kC(95D5#qFGF@66Da9ZwgZ>Tq-ow*vZL%Xa{wMP$%gHSJt3o(PLfg0 zv}+&3Ni9k%l!4w#>_YqDfR0CPwQJR1EIMt_~-uF9u@X9|#F2u|oo%Xp6@Mf|2DFY$nXeKK~8)J!CGB6PUpvzyRhP z;~kct4(=`TNId^B1x$0CzEo%CgYel>-f!Xrm5NXQWH+`vBDKF?SpE`QEl&hz2u} zTAK(JDn>@J*4u3dop9??6z?9H%FkHRDK?jm)I;I*+^)Qkk#34oO&w~_*_z7&n>Eiu z=F+J`;h<*}dIrT^mcL4Y7SnjrZaNM79HX+^T^TJf zxnEcZglR?Lr{~N3g-C8jHB7gb%P3*rZoy2+mrj~xF`3ERf8nKexk`EDCZM+%serb4 z4dOhOClN3D$}#5QIZL%_vcb;Khc|nV$;f987fY@eGTSPm{vh3^DhBVmK`||~$VjwO z@CD`0-4ZrnI@ba>4;OC22{g=PJsm2%{yL`8AE42{PnVogWcX;JbHQV>D?&`dJ~YTT{UMJp|FhhXHPy-k zUm`Z6&d1!yLPZGl2a$Eq%+xgBtM0fbpq73dIRZ=>^IUsXDkOPR*r3ePfgu5n~aE3s^`WU9;&C?CiP1;8tA__)#7=J_J3}D0@zZ=+C z(jy!+Ddir-CX%U373ru?xKg6X;qJOVpNb)01hg*D_{mHeejL+m^@L?~ z?&P`2xtCWMCoG)Hya6T>uq9@>e4(jmOV$e>w3$#o=$Hz-i5f3OB!#AQ$e`-#L@rB_*B|p(NzN0>X@MdCMhOt{Jer zG!U6AW$*1hMoA>dv8X%4)? z62%g}1Yan44mHj!4{f6vgMRRE<(c{yP8GqpkoW>&DIZdAj0)y-OS`GE; z3hG9ZHPp@zaz3IiU1zMaWYdy$IVU$JnAQ?0no)i72cAoc{uyP7pIp9AHZZlWG6&yM^_ z*>wJ`@A2Q}O#iPaB;je~WNGq0!jQ_k(z+UoF0dgcv2s4ZNJuL|&uAh*;zudrEK7R) z9x!3dd^5{DI3Xml6^VKxW_I1l9Vxx1g_%|oCG$Zy{^H42;yK3otjj6pmGg8@b<4xI z7k=|FKNn0!U+l67a`+#XXZFHc_7 z3_N=p_r0Kq*Sv=OD#2UNC^UuLanclMhbmO5IEBuZdFAV{?ONyzR+?ez^k9iD6W`!4I-ZvT&B}iD06s}hurAaz;_|&1+-=dYi~Np zt}SrasxP%}W*RTRZo*Tgs=ckwKEU|SGw)ECoNc;KbHG8!-Xl*~(Ft3>b zv2WoKQBkU1qznXz2A4@MlXp3kRGQAJ{;DBJOuc#P8n~orQ)9jFO=KY4Eew`~Oe5){ z-vxn;44y#ZLy6bt?{?+`vdRG;;eiGgYdW(HlegtO1obmFUS(!*i8VAJ%X*RjYQ^36 z^C8#tEA$XuEm4sE*>K1E&nyHgEw8A;TNb9_xDVugpBSc627-NKoumYzyl8iVF$^nMoFn+w)fGVt`@3 zdx-7sFCTO}$U1QYmd}q4p3E+XvIT}+Q6e~4(SqK=+j}bzb9oW>d~wD_zpI5OuPE50 zEyee*P4|q48KLSTzZ(d2uk`+8Ch_dr4xZRi9^ZTAJZ(%HmSm;JF*ZAcID_T!3+;nG)TGHH`>4ADuW0hUa?50(ghZ*{99f zXAG!*5Y2{7=AsYTwOb=X zHkXAc{=yWIl=eIG{1%NPY7QcE3vMbiSCa_y*&S(@b&UNe!2ul0Of&(Xnlb#44mO4gB@bW(_kepB?CD8a?~ByC!)4qcr+|JF7)KT>h(Td!>wQ{@JzFaU#S) zAtJzNQK$?Sz*5PFiWCZGJ2a0lpj7oH6X$?%XLL8r_m|>-nxglMhlgc$6+1=ep8p&j zu{l9{AOUv4l5yVI`FP&+a`|$3c;)}@0lx!A!>scAe`0IMY4JXZ9l!% znwM)q=o8zb!n9|Dz`=}e#Mf_w8T|uv%V@2t*Utr!VSO7f>10h-LV=v-FmY4MJ7QHzDiDusK9FeAFu+)~_hS&OeoBRIaP_D9#MlOn)I zmeYo&vb4fvEPhm@@I0C3tTygqZCtCp#M!FDA-xTUx`2D>IJU8FP=-~P#$w5krs9g4 zla@JY0?WkyO4Skx+>+JaGL$a=yCDRsW)P-LxaHu|t{75Gz?t24VgglZTNUf#SNLxL zGdnB^drR=~;_{4A7nW|2U^Oc4e4nPwj z%SR{f1xo8KA?8uq+O<8uqkW!EWiUc)&O;Oz=EE$9nw_j@KA3RVC8@bBm7s@vQWc>a z3QG>5fuTz47AoZo&$#y$}1tAR~g^`GmLP?_~ z^5;%r;AvMjrzySIQX8Q}*hurKb*>H@zN-P$;mh82WFoKN=ofSYDE$yc&LE~ab%{Dq z<=70k_N5vMYpJ}3SDGfWEtB8*4@_h4XT~-x9`mR!SC0_#)HlnJc;50l`SbL}P#UB4 zSjH?u#fM45nQHr~i(nIFKG2Y?{gxzjhCzm>M#CF0Oc8~2#L$tLp0DFuu1xNTSEFBk z^93-{)JuReOs{d^fiv_OMNYk>n>UOaMGP@Tp`!8EYnV0+8|4fkqwzPc82mzxl6~He zTt{BOVt1KWa6Ej+JksKIgnL`;O~K?_XSiX%!Xf+Uy4XG=n->J_6!V))oJuM8B>spvx!3A zJ4dS}`4M>z+m?#M%@h3kZ2>F#5h!DW)8$Sg6uZF}A0&h+LvKk!XqJvwxYxT$kKK~~JSR_U z=Tkgb7KYtp^Ayv~^kvA)~s8Cd{p*m zBoBVtvzexCme~?&#E>6%{iZk{H@Gw29^NL@zku?ji$)u8CHV>?`1kA5<&NKZKCuF} zObXA}^nzF+)P~0ZGv28N^ed~m-sgzLBjSs8-9t8xvo+isctDe>i%sRm-(s;f_GgKMM1=Skr1r>bm z2j^7Aq}M^^bI%&GsS&A98B-&>;yu+&o-iT%Lac`Wu$3_gL1(aR>BWbBCHH_eiTaw( z{9S{(BJKKE-@_j*y5rYwzWs;RHM={T7qw{1#GJpCE;VNQa54Z>huHyi0&GvBVl5H~ zwu-8wfEb|7l_){oR4|~D5W#9{;)Uv-teH20WQRPMJN6yIx-l`}d5=I!cH5Wt4Z-8gYu8F zZzNB_HGZUn!=z^6F>yb~!ZwxBCB`rF8e|!IyWcLH55$N{H}1(9Q7N4s6CwQmtPKjE z)_Q?5&nOUnX`kb@!t?!y#LPQqQb(T=ks&*o5JUkgHM9X^mF^0 zsqsI~YKW4pJ&G!dpPl zre>{%F?p}(WPS{T!SsHN4U}^t-(R?2aZfp$=Ftrzk|sHiIFG(P@;v6gEc1VV1KJ_N z;&Q>YKjSFbZ;o|$RdJbw#7XRNG0q4sxH~Ve`RbJNP0VT;v{@<$s1wGQltIU`*df@5 zU&8@}T@#5yN4uuZ$Mg0wNE>{w6FBez!?MDy*y5v~SlzQ`yKR-zM_aL0vin2nVxw+)~On`?sE(3^&{FwL38hd@nTZLOH864yPS#g zm>foDM5icGFg?TjX^GtLp!9`%CybUFvlZCvT;q|5vg&E%ku{fdS@C<;>Ln|76?<9G zI*WEDhZ1{o?9?N$$Wc9QR^s)w@5A&P`Q2)DP&&uwhZ+_LWIs|*bPfRHMGT47_fq%P zd3cfe6D*0{${tjuAa*MNn1ezRs2oPmi)ci!bqyx}p~PP>jxbV7i_7V z-7*$)#=U*eI_twi-+#G2vs&@zNny;8w37h9-9Jnrv7{NsZ^~eflqAKd#tb0m`At%I z)Jru7=-f#T<(k0ur-0#1fqRM`u%2kq;@v!&pb{=O(Bs*D^P@7;D=_;FetlZJVzio$ zPd~ymOoyza<^~9{^$r|(1`PNl@tY51VQJ{C(dOZ3=xx#BV{7Ogr~UeKAbi=jixlIh zT4U(b-t@1v0!;tT-4vHqR{p%4|9v5I5(K3O1Q0^Dhg%yM7ghR#*zF}zQVZFKqQK#) zpa5HKX9!4Z#b#|n@2a4p*E{gn;t@$2cYC7fq4q}?-VEnm{#`vl7>42ow9&)B-SgF> z=NY{Oq~29jti;kOh!8(A7`KIlQcHArDL7R{sqD!(EmI$~#^Uu(RZ6IByC%F6hGS%{D4q5o#FGAtKs%@OxCfvhLhUhVd z!Dk@w=5X{NUQ^6RQ6}wPgAG>s_W#`YQdt-33G&$o?fhFg2Is%~iT~U1``=%>McvXJ z*%ZaEbiMgxHbx1jx^OSC%NEj9HIhK3q6O3nL=}Q+-bG@*R8pc;LPybYB*b@HP((){ zLpT=C`}HU1JLm@h{}uAo+g!5r;x2v{$9wH)+WU6HG}oJ1^5gf>5#*PPSMK|g` zM_M#^xN=0=j7x-BtV`L_qQ1TZ52C~v3QXEsFy&67J_)X@ABla(8f3^D*=mc1q|B2i zC1MZ5_13km^=&4mW_7AkTs0=2>!nh+ok((J%7Lwj_fMKLXP08F2Ye&hXbe&hPt;jS zQxO!5^O7WKQKF#ATX6_gaghjC$z>y=(QZ~3L0LppYn-hTIs)fwm9HFDORS*ynzU*L z4AESQ=@+W^rs?Q}^uy(2_1(!s7kGh1{8o!9DVcwTY7`;}MzB|UzTWvi)X_O>zuMJgi@AiVf)ruP04Wnm2=vd6+XxzlL*iz>{-nH-}qZqS~;E ztgN}mWFe9Cit{d^AUvTD3y;tPH(pWBm`66f3r)sx{!9SpYr)k+ylo*oNETeKt!pXhD365gRM--DtWEQ)Hi6h9S0~a2Bt`1$D&EmT4tHQ$0gUPGX-!R52KOdPu zDYC7#C6lC~Sb*57g;hWAq;{co=HUcIA!S$}v+?8NZ+ z4s7U%zIfE(JzV(jyPiml7inN5FA{ftrefSmiE0G{+_jO`0 zSh>rFBmyZ0SvX=eLNwA~)ip5ESIIz>KDs~_!B7EW4DuD(YpOoHK$<@5uXV^>g4bky z+F$LF&q+PPc69OCc6sriuN&asevgj$;v@J-TtoJieSLxCBmSMe106{3>w)+Jv30b) zz?CFSg?Df%i*U`8RuhbJ^zoJ)zYwZxsae}%sIHMJZN9>qdbo$})?)eu0kdwnYO02V zA8xp;-8#`YQPbfg6sl{wcsRghljQo-dEbristw8*$Nty6-@dB>eP>LaMpP_Fwd#oB zQt3WK(u50+vD3F$WSQDo$BePUSZbNt1;@lORW3Qk)v|q-q$<~J!^Yx$jwJIFj)?;- z+@o}zs(qfMGZ!2ar|#Gy8M|4>gs~=993!WqSZSHuqWyl^*|=U*+6FG`1GSyj#La#H zj$el%Ycw{SD zWgRK-fy3whNiz(be47RQvvFIIZo>fiJJG^~l(y8W2%Ne$6i`D32wNvu^dwIG5UW5l zaOzDB_2JSC2vx}Ttnnbvy7sdPa~4NfXsX##7e^Sr@QYM%)yMnAr~;>OXpC5BZUtto z>G`Hx|_{{37OKcn%6)YGNW+n{85*#}|31n^%Y;F*4;-H97 zc(ti9(G*b9r)L6pK^Af}(x0WN#b~J7)}f3{>6Rkg2?YsZfD}MR7$5==l>|rvghc^@ z0O%M((@&HYFp&a?a0dB6!Vtw!qej3@-vGs5;>qDmf<(TxxU@1~TU*+j?yQgYep%`T z9z+lgG(ZCZsaiq<>wz_}1pBkvsnB}*xcdBLF@GDc1^%6n`d`Z!|JZ5!7Zr8~5BI;OG}iyNJT$sg>K` z4wT2@^RC71IyRc7s^&zXhGxTObs|M~%1b!&Bn?}2*UK*byrw|B%1jstWHRP|aUHF| z+c+Q4^E9CN)aqDH;{|gf`Vbv(71DRq5{EQbyPc^=!s&`Dh4m?%zg06U0QOhOVGh0a z`E@EjN@5JbC=Zyz1)=MFpfpiniWONTQZV*X`Ac1!Qm>{^9~a^~p(A*)O8epgp;&vP z30o!hi{(~^L?;+08X|7x)S^(cS)#2%_n5nouum}sQeZKab2RbAS8O1pnio=49z+=wkXm(%KR=Y2|qZ3|>I1rIm`F zY7hZEzO4eWC>|8rno>TnQW^84i$(~7wAFL|*I_%IZ#U-cj{8F9=PqJm{sH{`d4+y$ zmV#k4&lcoI(wE@hs)yQL zI$xW)STFLSp19N~&{U2EYX00QoN(>5Svd^hHRo>*=J&FghnxkgWIs zHRAcH025EGpdJ#I9ka4ho44IfMPrB6oi}cfpwMKJQ<3IBV?8XNu2=#XVR`D(R+x!x zQ&)_ySy@PzaC^;XlBv(wc4*2f(I3XrE;2#6ghk0#QB3*}nwOJlGp8uaI!6gnDLscJ zbH?f6`SR5MYMHc#W&Ov=ivl_`gz|y zlo41<;<)MPW>h0=c*!tNPPLL;!YJg;9ua4w$$FRG9X4VH9V+ zeifZrncB-)%IgBvw+hupwJMWVwJ`!!{Ch`2k#<3KLoD?2&;u&9!!fAT!vd((gI%cp z#)C=%D(OooHIp%AL7CLwP(+OfH3aXV=R;nyOWxh!@|%D*xo$be)KneS>Za7PbcqRl z#FPzH9`j9k#@tjMRgx8=G7MR1A5`lHE&d+kz@@WX)K_3#-(CvIeZSr6h-LcVa{1Go zUflFAT&bm*$K9o?|&$s%0gy$9zJ=X$-iyY{O8E{|Aw6$rB%6gfluC1QYTO| zu`#4Zc47}>7J|wnU$q1Yt;DoKBqaEm1yih+c)1`pDAWHGBqcmvU=QSXd8PYay~OVj zjT=tp$KTo9%bDx`>g-=q8%AesQKe{kj3l(S*;&f?+Iz75Obkd$a8WNK7##es7)UId zW(<&UliA=aPPrBDu?Gx9vmq}bw|Bu0BNGV+JgQWb8}Zr=gO=q|4)j&_(s`a@X8{$-R2%`FXtvsu$m$5_1X8$T2!L` zekn9L&00-d^(Ucu#_;os=@EP+vL-Bd#)H8TipY>Imd8sBb3ueMmg!5^QUhl!jiY6Z z(d<}TKWwSgUBGWqnK?=(FQ4>=>U@bplh^qT2-DeNU7bkgW0^R zgVDT;gVnwV{PGJuBIPz9yA>(i)cGbB|t^Ayg zUz!9prbN;DIkDXoB#MSdg2+v!EF6K@Kerm&2A zJ!#6^fD0SeJyb}5CCy4*Zgpc_Jeakjzpy?P6l9M(cg(S z+)@)rL{A4Zi0akLzUawR!Um^yDrpfi38+Z-ip{m_GD2r%%9=Qi?0b+gLm3EnE}wX0 z&L_S;U)6m)NB%_OqL2|25l}LAdhG&I9LF;~`QLk1EFGNAmlr+|VWaxeMOAk>tzIlTK~oW2N<*n1x$`Ql za*urSVZ>>?)R#GD1q-ur6QC8lUDl^BAFMecod@4U*uDnupgIKg$p(Y65EJDG0pJq@ z-0mRT2l64|zitc(1K}+&mYXx|h?9$9L^FAe?_dV~fyKGZ=>`mA22=sw>2Ueb%s?*8 z$A+^}n$M-#Q?}M5?mvch`GCufD~{8eV?~=eRg5CdnGYK?nAT+?Yq}Sp7?kow{KJILqQTD-(et4XgxDh~3cO#`~H)xFRSwW-Ummk%o zlUmm?-q3jNPTQlAT4y*a8k=Sc6sL0lDn6|L#}(D8s%_%>yP~ZwcMTm;Pe0Y z75ys=U;hKcvqMPe`alyyg)D%Jbv{9yD*r}lP?$d7p+-a%^4_wkT1R{sXr$s3!-c64 zMXgHwzTk&=vB_x{cfiMx&Q!beFpn&4ZTY?cIP}}Qn)I04PAKkHhf*Sb z>BSp@$(Hg zAs$bl>5Fhb|L zT`F9pkWxG%g*K85YjkYEdZ_WKwmhY^y*p@orf90Z*)oQc&SCOBAq~$ zFHg~}yixA1--pWe>SfX0@6Be(_b1l{H3B6^E->#TV{kR#stRh(YRyko+b(A5hA>xT z?0HMQg0Nu6y_|OI-x0NcU+HCOx9VN<6h+yMXy+bYsKO*aMNo-F%eQ7)4>LuVb_f*Lb}~diM)VZKM?CHLT8vgWExJBk_6NtS2hDkI5PD( zfp1AqU({n0Sfkgl9w<)p;iLETP>s@olIO1oZehjv2b4^ioPbyBfH`8igJUfGdeWBl zdMihNHVH=aj`P9OiwuRBC%W97jVMA$0-xS{!hT@5)rWtG#7B(J7toWU_@jFLc!mj# z{c5bmAf%?im3h%bPPnz41m=ZL_{e2Iar`nv!dyx!Bi}pOyy|X zs*=!h_(NOc%oXSo9RU_O`Q7cpv8VwI+#1o1};bIwY^Z~&k3!wPD;;I`BIc|#f^(D?f zx147(e(hh*Txoy7gTugz-xXP*M{pT-lJICRxyeQw_a-yc8HJ3^0 zi3cu8W~NL!#GaCaFuzNt+B-sl7h&jvH!kzsWKuYICllFlH=>l1o9BlBR}_Ws82=pc zoMli92suJiqp4!#{}KIR`hgR|)x42%)C zSg&VouD2NYaSdE&lWt&Jy*uPJ5H#A-qyjsXhtP`3m;p!yh)#$*Bs?sk3GIb7dcwc?9mN+3A}4 zIBJ&>E5$z}9Wm<_t1~U-6=e!*HDf~FYSY`d#YO6RQ*ROz*J)xXWz;_J@EQ|n%&9^(4ZyXO>>;(zRrtQ>td2iCElJv-`Q?MDr00P$VcoOPte^Y;Rn~2J1R=+(v>4k-&i5I>HlX%%vHD zDdb#s9V&5=`2ZO9CBIiR+Q0uO(XZj9q>vA>3={jYsxQ0xGj8M9d4#2ws}+S$m^D#M z>1*y`T+EyR)V@&c`XG#WtvMDhyThQyb;5SqumJ^(wuAPl$9<}{+=y=n9G9=OjFTpf zSwr$rV<=H07F7CtytrIYDM643T$P4$eQkcF0dX7@+lhtzX01q2G8BedypWLT2|bAl zj}cXL`dY+%b6SK$SSjz1`9ak;Tv%UX5!r3{h7$bXm8E56!qYkh^c+fFM>4-6vNzb4 zqX^wX`H!|XJu)}X((X6w8Dh?X+7Y&YNFVy)#H}4Zf2_to_gVb4^a1N%MMGOd7mGhN z4}bj}#os<>V`*plDRZzfH#KrH{2S$j(0}k2Axm>nI}=MoJ7Ie}H&Z8POM5%#f5<0d zl(+5IRZ#e9FIFagOr2#W47oW_GK^Se)|#ps+Ln}_DpWQGaLEQjRM?$!<|=iP*riA? zfQ^&n#y@cEgaj_6$zsV@b(3Ee-tU+xXp3CdYX2hzJI&e&g=Z* zfQu&DP9qcvq&Bl<8Za-tiUh)wDU|?7*NY6uPoo+_;v@{E2=3~UWM@Ait5c68;TN+B z2~=|X!ZxY`WAnq`u$75%pdiHk?LA1_cXR6Lphnt&leg+1({Jvi*Lvz^%$nE~+1 z*DhckU@}31sPq7m=%hoURbOH_Wd`K1<((-GnIO4T8cmqSgS~4moq-v1TzhC!n9{{T zc^j;x(JSES1g73z?PFb`iTuMDbcPpYj~$%PhN&A62M-(rZFZzKCmU@EpRW)3NC|0# z1|Mz2;P8)j9(M4xV7#ZFUDnxjA$1v**`Fi%LgH(gfXC0 z6^`r2oRfEmRU{$or1vU*Z^2|Gr1HI-{>s6mBc2Kgn33>;Fv66C2E->Q5h5@rq5wla z4nja;8in45&vU^o?ar#1Ex=9ORf%}meLW-A!0xL+q>0%nua>HW%R&Zc$I$I>#)^5; zj(3(yToImZjE%9b1=J?l*n zA(qyJQnlpO9_`G3`9{c(I~%LKrY#|5vCVh@Hz49!fyM-@TXBCKO)utmOn~L2SDbxS zsPf}Tw&>;Sa7=CWxx=!1b8w(`8HytgjI?JMWotLO4ptr+-2PXnnm{~jg9N2Ic1h21rMQbYY<*ht#=Vj4! z+x^Ru_Ir&5lRr^r;qLjjkG%f-yRyb3+OsUrw0DRE7HUhJw*PQ{!oGcU9|g`iiSTy@qdEbCoDRhEWeB!^U&UMPghaL>v~ zp7yu*;up|KY}6Y9vZP?9;jiP`861z)y6RveA@^mRuDq{uoiD%Huho6$>-=Kom?kJe za=Y0+PC%Au9R*VmX13{qhT(N5CTyQ}QNvavU8>A*s%jpzWZKzU!X9nT28g*xwPTIw zveQBnUa97;>R4pL0AstyO69w)<30og4i}ad$tl~ zJ96!YI6{`(cJk3lxt3A}BOI$+JZ9bD8cTF>ZJ4@DdM6c6dMDXFm``$J9TF8iL%w{> zHG(9ch@R#-6(-T;_#NwmreW|ys}k>i!*%9}o@4wLp7&yTWX5Hwj{W3G<#SYv1mD!y zN;UqF{T(`!kO31BPdLOVMlb76lE;6yuWA8I*b^d1;IyJ!29a9|h- zJl0!0{yJ*VJC5<-PF(O8b+7^4HCQFHz@UWok;^<46D2~Oez6?NxF1QfX7 zkoHqQ0Tso4P1@WGf)}nf>iV~&t8s3LJwB1$UgXn0R(T63;O^e=)5w(U8$932!kTk1 zxd(Z_+!owkRd`;>w%&C(>V|RjXu67qW`POf;`uN<4+vyD4N{71UPU#Wxr7 zkBEc3DKEu+oz_<1%%Gp0DT`*fQt)DRd&C8}C$7624xNR;z0iU|VF#H=;1LB(j-$CoXQ;H#Jk5rGYnv_%PZJ zCm6<4))13V>&nE!1Q!VGrThoux$fq|>ILH-y_1sIbJdXj7TF&Qt6S z0I1C|4iUS#(r6B^7Y%iCmZ4SQ*63BG)WxDhB%2cHr=51bSNqq7L3=r}@yKLX7)@)W zr?ZpOkxJbT>D&(rEm34WDJ6iI4!9cqY)oL)XIO-E@3N7aJc8ydx+%OhT4bqpnANVF z3^iv^aAT}ep9(~z)1L~hJN~JIp>1@G+Rb1+sdDFFG{^G8ESCzQ>QD&Jcw+GhliC!H zYf_0we}Ovco@8xO$w{uR-qy#uQiDxe*3R=9Ze4E8Im-|pm%cWm=iAtn+Y+ZW_kE>p3ui8GmWCCya%3X3 zZOR7qXq@qM7Gm81qO&0UxeEYW1pRC8E-=0X9R~y*`gy3E*M$oJOk4+nWH;0gy$cA0 zB(~E4eNY11CWK-z2O-ow+aXD=#5=kP- z*1(y)K9u>sgL(pGprxxALI@`0~4pk+*;j4H4cQvX&+c?0dGjQOP z*0)wuxW_D2TK7W8X#z9z@)didjr8kdrWt+X1Lq&+TrvK&Y7gwhEae+>3 zf;QOx_#=$VIx?MQ>zz`zT^<7F4L=)E=vrP5$^`HHrKJPKlx2^W2ME3;JcbWmhvcVE zNd=rvUS-wwE|pC5jj+!~nPFG{&nT)edtvMvkVgaVnt`^0prs`DJ^&}puk_(MJwvVb zRFuc>v} zED^$kO9A;Lbp-sifkySE@0JVa_6x6=YBB>|?TXG=XW`nElsC8>JI>I{j#5U-HFl1u zKh$DGUb52mwgPcw@pNh33_78=SvwE{;m|mOdGn>a;-=R%-fmpMeILwssBus?E06lP z7S;p65Tu-M<}Px`Sny5CQs5I|TgcM;4H$zJw+E>3D_|>GXK;j`Jc^#U8}bnOj&BJz zjxu7khu-E0ys+17b4V%_>?lXdMg2V#XsEY8VeJooB6crRo z5!jdHFhA}GdW#C(9m-!Zg&OL8bIRk0COBB%|^|ly91@a$J!$x-w+TE^wpt#u1z8h+|1+NoK8P zN{@N}ZoRSn3g5E2Q7I6psvuAkUDd8Oj8)4VuGhXlH=+_T5j!YVTI8M7s1+N|%D+Ec zrlSxD=BLKy#HqkKkG#tMZD{Ha+U0CNqfuy4*%UcYM<6G8s3#*5cZ5S|kx8cL&5c1{ zlP>i;osBx34c;mgivCZwOANE;-NY!`RQ?(jIUHd)`AB&W@$1-y6465Lj^w0Ri<3b3 zV?<%;GTPNG^~iyc(Zq0%WDYM*#Hw)|a#}`0#uZ1b5fef~jZ_qEL3rY^2wa}H5~K6E z#y+lAj*w!rEQ`HrQ(`x%-r1IF=(7$t>*a^)3rqRV+Rcufrkp1Jhmq@^tF4!$gJlN} z5Wj6--$%czuu1N#p4Km4)_1kRe#5rU2f$<04+XG+@R{_!f#I<1!~;2kB%;-~+IGhc z*umlNT^mAE*lNdJqJiX=bIg`EyCO$M2CZCPCR+E@wYlPN>gM34w2QmXm$%F*vgd`b zvm}g)cRIpXVEGKQJ4Q0|*&bgLyP0#P(OonKgh059zdXZh7k$T{etvo%A)%9}coH=cn}5}~+eN6=TTqb|mi!IR9N z&L7e>A}+4XxzHMOn>iXMr?J!O(U6WejT?QG_+%shu2Shx9v^!YI>PiT&;Zf1W`r|c z%c=F?{R@)DVUP37-1Eyis6LP&Pj!o-`7vNFs z;MX73+A(YJXW->&yzAx5rn(p-y%|F}oehcd{bj?JgUy#sqyo+10L{Crr&KGD-}W*R zDg$ZjL(Q&()gVAT{TOH387v$=;usU!KLn=Z@a&q#x<<^5lo6%`DLG80R^rnKe9^xd zOfEGNdGt!z*K|VcsS@LV^=3O)^S@Yor{GAuDBL%gc#=$P+cqb*?TKyMwrxyo+qRu_ zY-i%!{-1N})_pkVRNboku)BZjTYGo)NMcQik#VnHC(u* z1T>IU$o!aHcyolwmaW8R3uy91=egUtmCv{q@ENPvfK6YTWUIp*Uk^~q?0O%(=w3*o-#^RMK`v^cnLU7< zj%E;9c@Lyo-@fR!CsZAaO#uw#tjLb2h#3VC7aha)kX@ww@v^%6o+`xrF|2&2_(!2A z8N)a7%OP=5dsD!PEPavVA%~v4VRuDG<&elJ?YcDu%;7ZOtyzdX#=P&yK@%(w1f5>an2L63EbBDq2 z20pW0oAKEu+9UoE#{lOhj2J;aLk6(6l&_p|+ z?1~wRamfhQYZJ!m9oSa}-6gRne`z21EH}3U!zrI{7&f{WcNHHHhtju5`#~PCOMKh; zBbV$JH(;0K_WegGOg4#qK;O@RH0TecfHWBI5d<#x&_03eHK=XSU0d^dV7)&D4kDS6-N7y-v;f|<#fkWikf!VM1zqG!sRhraM4835Fh>|^$Qv3+8 z=A5Py_wj5UdqlSKSwgJ#M7*Sq<^imNl$5ZBvRC)ALDfX1Dt$FCBPqr*^&={!u*cg( zrDBq5WFE8w$>scqFjxq|3fI^eGLG|+Z>@ke)LZx3-^XLTT}+7jHT$v>U1dnp{dX{c zm4`rMB_i_fH2ZI)50#IOyNkYBsNU@tyrG+4zThu>;k$#6EX;d%Q-c^Zb#(p*+Gyr* z?gJ0E>S$|I6gMh+ru^-C3C=2o%0`w-%xwO&NDtdXDukR+aK-evyNC2a+=QD4?jHN_ z5(OVCIa`HrEOilL40s+z>ic%@lkk6w{g6qqDH$Y?wG%)RZjoSaqVm;ETH(Mw6ptUQWb(&W>x!B^4;P`NV#Vutb=CQz;PHGl7Xl~{|u;3c6R zGfG+_rwFEEp%u4{y04H9qxl!xVu&Otz^#fbg*k^0%(j#FXp26&kMIA8T}>D9yEwoU zVCL%2rr`3xdd=7PTI%3r3c-KEN@5xoclg`E&ccSZh*}z}EI9G2Q?o({ak~EkH85p3 zFJq&Cu2h!!X`H{5GRWDa{L8trjp*@T^!QT?_3Exj%@wDfKH};PmXACW+VFh3)IA{! zlW@Pzuf=L6oJJ-aNL#?GPz*B;v#D_E*Yeg}8|?_^q9QuHNk5KIs&<82Fy!fm{NYZd z1ObPrb#3Ge?OP%IXxR!0fNc!_uFX>@9r8Kq6=a$xxlTJHsMi;+0q>lR68CQJnuCY6 zl^tsLRPgnusk`Z(T&t8fmLkpF$w~&&{$iB+zScV7Eb`?#A!IN4TBD2+{#N(_%Q;T` zmCccbJw}49%hL}oi+apGxaI0L)$wq#=qAVrr0r@H60yp-!_zuVBUe+qoPcTD7)+*g zJS>OJbUw=`BnH>Rqc9>Gzjd3eFoq{M;_Zjq5QI*)V*`Y)oIeQ6#YtRq6)~_*v7?#k z;5Lg>nRo8B+C&yvMO91#nWcvG$J}s4R@UH~ec1Yeo7=7)UHcj$Q+S+l1{Q1nhrQ~y zVlS@^;QJI8e|fa#%d@9E5b%xUhahe%}`wkb#b5vgF~ck0BveI1N` zCWd3*q>xLom^n%iI-(lOFf(yL-zJG~ci0WQ19xH~ztq(Wu0yjBrg^}_*EQjmN*8+K zQj~^HWDVUT2Ti0a7d_5);r>0rjSr(p^!+x$?W-NGZr7M8p3W~B^06-573r6!eix-$ z;vA^#$QP%>G*NwhU6d9E0poPMj7 zM!+><{U=YQ)G(HA>dx74cjb5pe9O#lsOWU^KGB^EnMK4`@vN}l+IhYwWPLh{-8W%j zFN03|AumPfGRTx_2%+hxYP)Nt!t2j1GT1)R3?Dv4yF=Q)E1J3Qep)SrA1%Nuz!cQcKvx zd;NVS5n;%=hz~h|J@0X-Tw836;j-@^hABm0j}#JVYpjEM|9iA4k?qAp0{pc)Wu}Y{O53DMw1{^TNTU5K&QGh2U?uoNS$y-^q>Qr-o%q!^lQDh*IaU>O9K9 zJ3eOnTy}JTc4pViXv>6j{3;X#>Ei1_>1DnR`&XZF$?`M^kHu&zn{}HQTNXA-DaTKi zOz+ZC4+I*>;c`LKlHzx*%Hl?b!=nPczvos0*-T44GJ39ue%8rmPVrzXT20Ft)4^ z{6B>`J5GIpJA%3lF#})Pe5KJ1x;;+zG-9z-LgCz;md|hQFCT3iD88X25x0@$q|gyu zZ1COYR{G7;!c+F~N)!ToaMiHb)1!6FA0`q%gHabfj^D8tOVgx^K<&t(d zafxPnL9}vAmfi>Q>USlqpCTV30nvWCT&(5oNkt4jzgZ=pS<#90u@g6cnL7Gz7i2rh zpM^JG?`4%?P-V1Ka3QqRcUuiKVx+rUmK5f3ZLeHC2^7s_knQ}Dx1ME9^$X21^^C~4 z5o<@O8oQG<*hXdZ3MI}`d4`!=l}DXv^h|{;SNzb_zgOQGt|oU7%JrsVHJ1MrIZ2v3 zQJOcy4_udQSC(pIE&nw>jSno@wzOv2=!FQR99etB6)$;`melyXN3xOos>k0Guyq?s zW-Sd{la8S_Uvxc;v~Uf%01&0UPwFKkTs7ntqLbWq*1p$0#ENat1HHXWIF>{7rmSE1 z7Y=Sna!hV`EN^&DeZpRQVtVC|xA1Gq7p4%_Wbg8F^8T8Hl}uFLK*)4wXabr&I`Hge3I0C0CC`XlEZ^{_M+ZXzJ#KSw;r88QZq18hv{rsVI z*E9fFc4rnI|0sgga$eI?uQux&&4SmgrfMji8B(dKCrHN%kDg-uP`MmM<6Rkw^U&L8 z50!*>`2_hE9)D03sBzlww+zG-4WRr@x{4ak5phG6lEG$@Pyf1oM?YbhUD{*tfVylt zRdhOXu9@B-waeCtMoR8E2x}$*o&YSR9w6i4mM`s^v}g zYzp8S;@z6b@X>r?gY-&T_M85l&q~+ZW`J={@`hDLiv9~LDAr0JWjmd`IWE-8&4KM| z7o6-&4(8QtXplHy59s7f;{G1H3t|7@8MzB#PHalGHiM$q%#pv(ykdk2mF=AKm#_p+)*Ba7D%ktdz&rLkXbhw^jCs3*;z>2=3%-)gD$ zQ>L_DZnkMmmxqS1I#SpBZH)KBqx(P~UOxz>jcYcU>%}|D1VJw=sM3kiE&cmyEXt&1 z#bCAF7pH@ti=Ux*4%5{pD~Kj6L1nEu$CMYl2hH{MHSp`h$wU)_=3_xvzFY=n=Wp#B z>hN~!AU%)10_hdZY=7lIsOwuVff5A%E7a(*KShVY9*ld@C#YT9H(CT{ur?V0UB)5! z6oy{m=H!#r`sW*1kHnm~MW!nz5VjPI1&MF zbST(ad)V69Sp50Ftw^f1Vcb=g*ZDb|Znk)m0=8I8{TWeU8bYQ>F;fYV48bDM$#67T z15@L%gjh+_A%aAU!>hNK>0vceN=o6H+aPGdH+owvX>^;bZJNC*buW8XKX%`9yl!L& zzZ7zJ!@5rRb~Sfycs933PIkRN+I|(PT-;yfFLA*BGK4Zn{c}t zz-7P=48iK6`l$PD!8SqJCj>R&g|Icy(-CE$So&$}a2au|u{A)~L=935mQMbXQPVmk zke$=b8$^gnSG9;Fk!8}&8%C%}>)1xn(9WAi(9qS7AY0Knq>$CLh;)*zXcrD5Q%PIb ziIkDCTME(4iPYtH_Zmoh{WGxaAomV&QfF>q)+>kUw!h9iqSlNsKGLDEP=!%tf>m!w zQD%NmC}dAyo5Y*ME;EmzZV2a85y<;emZYL6p;n)0S5j50n2=J{q)JPva4o6OEw@y! z*!X{N;;O0yZ(Em77aZ+yMk(y2Lalm1r2l>=AO@m4OWEg&ZyZ<|79Ju8Z#;0xCFp7! zf}{A&Q<{~jv$VFhwYF<7G3tcl(bewiYSt3Nxr!HR(YZdlLeNRoO zh?@Gc>gsCZ8SMT3MCS5S=9ti)rd1{gYhcf_u@VaC!12y;jPB>sU!R9#6-1o(w~bcU zN826Po!#B#b>-#ltGl<{WOA9|^7nj0^~6SFyQ_ zD{1w_aG7Uzo68Nxx@?*%DI3guq1bfG&B&_D%d;!#YV(^g6-#p#csV@ygV5`pogUTh zoI`$i6t)W)c-ou7XHeowCB7W+rh%%Mt4|#DN1=)H^RrWF2L__F3Iht~r`pR4X)-9D zjukiM`uXKqhu6+GRnphhCOeC~)$N@{uG)%PD}#g5B|&xZX$5i12SIhaIPw|kwAy0L zQ|p_W^9$UqlVVFZ&pfphi^+w7EcDVf~%z}Vo+F5S&(n$nQTn2 z#*6p;HP^-!cGgGLpWx-PnPVo4)e{G zox13E{{>Sg>acmB+SI;m`A>$L;E>l%Hi|Vzv7{mI*?_P|mD=OdtJN47%UiEz1gYZm`hx5tH0HAFeo6YI3QjfZWiWQC%g zW$q%nTe%_Td8|CdVQ z#2b7^!~Q*|Wu#jMV7s(!8TE!~*h}_~U%6`+m4I;=O7@OO*?SB1UphcfHdsBU%ZR>s zT9wmndHg+N3Rs=By3I7Ex<&|aPBYppPp#uofrZh;^qDs!*HJ%!RtC!%26-mqu+4pz zoL^X814n`Jd**?`NrCy3bG;`xc*e3QiQ)*exY5o#Rd)Yroujm%_tqNcAxCVW&gqwTtiY&F|tFdh?iJiZN&k+4GupzLqtA2!TJ2!G-VQ`QphmsFMLE?WJml9<{o{YZQlW4^Y1Ab98PPnQFFrB{m@W8E z@Ytw4s3Dj;>AqT!T2MWx5A0i-C&dr}s2|t|)-6V#KByn~2i`4Wp8)7L z*ayxn0mzeEApOrD*o1I<;4h%)gwSJefV?f%dP$Og;?u!M+=XulwaKo&tD z{LlO!Kv)6+R$7FVJ@jH{kiWOXA-lage3^2(KA3g=X+39(QY2~NCX3 z?GmfOBDde+1D?`3;SOFBe6G80BiBOMoggI-GtQS{ zP4|u@v$u3>B!(W4F^5c*TX|-u9=`gyd8XEqxdca}pPQ2(Ix*$nVya| zlDSCpT*lE7BJyuxq1jAtv9(hG^raw4KHOic_WHcWCaJKAnc7BXkf{!(kjD4Bmd5Jmx1a3<3iGB8D?;0P9# zSR-vG=>S=Bli_>n%Eb06+2%znRtP+*w#X@RXp&qi{Yn`wV^m+fu@v;VzrEl#l9qL< z0q`jQ%AdMPub=<5xht~W>dK9VMbppzF#p5E$YdbuVegzyd(?$-I>Fw)Ee)H9PlN6h-iP+FuR`WVn{=GA<0`G}f1m33UiM2jw z;k<{MT1}j`$;4UZVQx>P&l`2YqI$iY_Asvxg`FaPZVAGrqfZ(W_s4NWbpIl{u^KHt zi~Ga2+JRbz;~RB*S*>ASkJRa-YSp3|ll<}4O|dLFeqU+H zV$4i`iQ@OOi6S?X3jrjzE@kdV|w?gFA8}b@%0o4mZdWtlTO;kb;4iYh#*Xe7 zA`Ct(91P(@rf?i{&REDnqGEXA5Pi?Z6QcNU2v>dST4DbL2;7k9D~@D2LnbIA(ubf^4s6`RpN z#F;-b#cvW4Rb-Y>VT1DaB%f@zd6upP>ejH z%-fVsitQxz+5lxL=PX)GOb4;=qrYEYMVYT)F`R_$yz{Nf8#GYt4Bm{TTJ{3RGobrGPe-`NYyi5%jH!$O4 zhE=_9EfuxJsOs&VrfM%JBl-6=j)lK;c`-*Bz?i0n|Epc6;<`Mu8=1;An$A)NvxLNYc0T!8QZi1Q8?U5S(HeS$= za7>bo4PL+8h#@8@6c4o?e%8Wnyx^pKDKI&ql$-=aKz9hX@Mq5B5=yc296cv`Rdcmb ze+RLC{cKC*?V*U9FJnUMsLe%wx{7fUfsVQMc(fzQbSK!78-g zB1mc$j2HH{NS3SI_{>|d5B)>L)I)~60lpEwA-+lOv^Vtw;REk6=&^FT_7nvR2Og3J zdHwK>L_c!Cu;Zh_SV+IK$RAE9$lju#!kCbQ31Pnn@_G3C3d0T0LSp^fBnU1Av842QQ&ongsjXCn$(M+FG4<0Bl0|??fF&t?JQ^EAd&(Mh zvtmmO;yIrDCnCpId0w7Vn|d$k#P-`~{??3LV1?=J#9rKNOyG>2en=ARQQj!r@ zl0Zaz<_EMB+iUyO@?qYfj;wEbd#3lej%?4gPK+7C!(+TQmauI}*p?JxdkVfI4d0=f z=NMhIq(g21G#GWDpxBRqXlO7jq#w-0(8eOa#=;5Xk$w}B1cId6_38GYtOMMNx6Hv( zi%v#R8SxZ38vJ(^T@TQZ$iS6xYc(QT58BnV2AY-K;8>*MG9m`&wNvG1(e&Fa zJPhjfPfk!h)hN>^;+Q>=5m^Exzs@)qp5<3t=}%5l)luF^dv)y(s*5?s<62rfJT+fZ zPfk-7l`-%uq+dK(BV`+Y%9As}#gVyKZ&8p6l%OAEkcxTzUAsC#s3q`@>>Hf(Fvo4) zGRqVq$nEh_Jc$Bte!?#fJxidB+62}KF&ECk2na> zdhi%0XAUcq2QYPTZ42Qov7r;Q2%-SOD@(1N7V-2R;TfxnqM1noqH7GAoHQsn^IYNN znFy`T3Fl5iOZiPXI8tnBrQDex#MVqjZ}FhojD=|?;(=(d370_t?kE0BbX>@&S8e1R zQ%UdR3=ydP6>Ybb&X#7fR+)y&z;FSNgXvaowZUqOQY&mdSr*+z_1;MiZr(Q{U#6_; z!&Af_TNh^^BM9R4t#>^p(Pk|1sF<=y(S}zX)umTKv}G#urziSzpD=U)%Js=w6&9;M zdr8vh&wMo57pX0xA0}3WnRDysVXAIb{pJG(l`xh28jahac@p5cC>g*HCk5UluDt># zaQsLO3PksC;zl{VTLn`4d;cO+!lKgMYAl)6M=!P@EH>FzQ`e5tv*js%6J&Fn9LbQS~=JlIP&nciB4}2Mf+x)6ur)B zyYQ(MtIb|R!KZx0b<#ydZ{5tQFR4e1NGY{;m3wJxepH2(2G)2zA!3?+SMPW`v(zn| zz3^?2qri#h6Vy7)XqkyZbbZQ?Sd=VKxEg2t#*567%T+Q`!!fB%9p-i zCSD1lacjd^y9NZ0fKFkbUuZW!fiuJPM= zJ?{yuDEXw}t;yb^u$6pYo8cFFC$g!zSN9>;N}hS3C=_ksEA9zVwyFI|kjrd&FHWJF z^tq$HG?Ga1%0tV48mnIYkIX<8FvTsG-QN0PvgeQ8`NKfRZfo94=wq!t_PTI=7#3$> zyY3mtideMm%)aFVRoI`U{Ez~Nnq$06EElczQAU@OTC?|jC=69*~nqc_BJ>|Mg8 z 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 diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/CliQuery.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/CliQuery.java index fe8dce2b..88822089 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/CliQuery.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/CliQuery.java @@ -6,14 +6,30 @@ import net.opentsdb.utils.DateTime; import java.util.ArrayList; import java.util.HashMap; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:CliQuery - * - * @author Benedict Jin - * @since 2019-04-17 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . final class CliQuery { /** diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/Connection4TSDB.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/Connection4TSDB.java index 97a841cf..4b75acb9 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/Connection4TSDB.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/Connection4TSDB.java @@ -4,14 +4,30 @@ import com.alibaba.datax.common.plugin.RecordSender; import java.util.List; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:Connection for TSDB-like databases - * - * @author Benedict Jin - * @since 2019-03-29 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public interface Connection4TSDB { /** diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DataPoint4TSDB.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DataPoint4TSDB.java index 1f690245..64c124ae 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DataPoint4TSDB.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DataPoint4TSDB.java @@ -4,14 +4,30 @@ import com.alibaba.fastjson.JSON; import java.util.Map; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:DataPoint for TSDB - * - * @author Benedict Jin - * @since 2019-04-10 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public class DataPoint4TSDB { private long timestamp; diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DumpSeries.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DumpSeries.java index 56ab0bc2..4aed1458 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DumpSeries.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/DumpSeries.java @@ -12,14 +12,30 @@ import org.slf4j.LoggerFactory; import java.util.*; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:Tool to dump the data straight from HBase - * - * @author Benedict Jin - * @since 2019-04-17 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . final class DumpSeries { private static final Logger LOG = LoggerFactory.getLogger(DumpSeries.class); diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBConnection.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBConnection.java index 9e7f12c9..939a856f 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBConnection.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBConnection.java @@ -7,14 +7,30 @@ import org.apache.commons.lang3.StringUtils; import java.util.List; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:OpenTSDB Connection - * - * @author Benedict Jin - * @since 2019-03-29 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public class OpenTSDBConnection implements Connection4TSDB { private String address; diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBDump.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBDump.java index 5ed0a314..009aa100 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBDump.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/conn/OpenTSDBDump.java @@ -7,14 +7,30 @@ import net.opentsdb.utils.Config; import java.util.Map; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:OpenTSDB Dump - * - * @author Benedict Jin - * @since 2019-04-15 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . final class OpenTSDBDump { private static TSDB TSDB_INSTANCE; diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Constant.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Constant.java index 6017d4e5..286443de 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Constant.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Constant.java @@ -1,13 +1,29 @@ package com.alibaba.datax.plugin.reader.opentsdbreader; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:Key - * - * @author Benedict Jin - * @since 2019-04-18 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public final class Constant { static final String DEFAULT_DATA_FORMAT = "yyyy-MM-dd HH:mm:ss"; diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Key.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Key.java index 5b8c4adc..2d2c2844 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Key.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/Key.java @@ -1,13 +1,29 @@ package com.alibaba.datax.plugin.reader.opentsdbreader; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:Key - * - * @author Benedict Jin - * @since 2019-04-18 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public class Key { static final String ENDPOINT = "endpoint"; diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReader.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReader.java index d57456d1..4cd0476e 100755 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReader.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReader.java @@ -18,14 +18,30 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:Key - * - * @author Benedict Jin - * @since 2019-04-18 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . @SuppressWarnings("unused") public class OpenTSDBReader extends Reader { diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReaderErrorCode.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReaderErrorCode.java index 0d9de4c4..479936c6 100755 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReaderErrorCode.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/opentsdbreader/OpenTSDBReaderErrorCode.java @@ -2,14 +2,30 @@ package com.alibaba.datax.plugin.reader.opentsdbreader; import com.alibaba.datax.common.spi.ErrorCode; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:OpenTSDB Reader Error Code - * - * @author Benedict Jin - * @since 2019-04-18 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public enum OpenTSDBReaderErrorCode implements ErrorCode { REQUIRED_VALUE("OpenTSDBReader-00", "缺失必要的值"), diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/HttpUtils.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/HttpUtils.java index cdf5c9c1..cbd0d7ca 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/HttpUtils.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/HttpUtils.java @@ -9,14 +9,30 @@ import java.nio.charset.Charset; import java.util.Map; import java.util.concurrent.TimeUnit; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:HttpUtils - * - * @author Benedict Jin - * @since 2019-03-29 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public final class HttpUtils { public final static Charset UTF_8 = Charset.forName("UTF-8"); diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TSDBUtils.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TSDBUtils.java index 72c7fd62..bbfb75cb 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TSDBUtils.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TSDBUtils.java @@ -7,14 +7,30 @@ import org.slf4j.LoggerFactory; import java.util.List; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:TSDB Utils - * - * @author Benedict Jin - * @since 2019-03-29 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public final class TSDBUtils { private static final Logger LOG = LoggerFactory.getLogger(TSDBUtils.class); diff --git a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TimeUtils.java b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TimeUtils.java index 9bc11b36..7d6bd112 100644 --- a/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TimeUtils.java +++ b/opentsdbreader/src/main/java/com/alibaba/datax/plugin/reader/util/TimeUtils.java @@ -2,14 +2,30 @@ package com.alibaba.datax.plugin.reader.util; import java.util.concurrent.TimeUnit; -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:TimeUtils - * - * @author Benedict Jin - * @since 2019-04-22 - */ +//This file is part of OpenTSDB. + +//Copyright (C) 2010-2012 The OpenTSDB Authors. +//Copyright(C)2019 Alibaba Group Holding Ltd. + +// + +//This program is free software: you can redistribute it and/or modify it + +//under the terms of the GNU Lesser General Public License as published by + +//the Free Software Foundation, either version 2.1 of the License, or (at your + +//option) any later version. This program is distributed in the hope that it + +//will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty + +//of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser + +//General Public License for more details. You should have received a copy + +//of the GNU Lesser General Public License along with this program. If not, + +//see . public final class TimeUtils { private TimeUtils() { diff --git a/oscarwriter/pom.xml b/oscarwriter/pom.xml index 51643c76..06249a26 100644 --- a/oscarwriter/pom.xml +++ b/oscarwriter/pom.xml @@ -39,12 +39,18 @@ plugin-rdbms-util ${datax-project-version} - + + + + com.csicit.thirdparty + oscar + 1.0.1 diff --git a/ossreader/pom.xml b/ossreader/pom.xml index 1feb42ff..d27b6a3d 100755 --- a/ossreader/pom.xml +++ b/ossreader/pom.xml @@ -11,6 +11,17 @@ jar + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -43,13 +54,19 @@ com.aliyun.oss aliyun-sdk-oss - 2.2.3 + 3.4.2 junit junit test + + com.alibaba.datax + hdfsreader + 0.0.1-SNAPSHOT + compile + diff --git a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/Key.java b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/Key.java index e836fbbd..efa95343 100755 --- a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/Key.java +++ b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/Key.java @@ -18,4 +18,29 @@ public class Key { public static final String CNAME = "cname"; + public static final String SUCCESS_ON_NO_Object = "successOnNoObject"; + + public static final String PROXY_HOST = "proxyHost"; + + public static final String PROXY_PORT = "proxyPort"; + + public static final String PROXY_USERNAME = "proxyUsername"; + + public static final String PROXY_PASSWORD = "proxyPassword"; + + public static final String PROXY_DOMAIN = "proxyDomain"; + + public static final String PROXY_WORKSTATION = "proxyWorkstation"; + + public static final String HDOOP_CONFIG = "hadoopConfig"; + + public static final String FS_OSS_ACCESSID = "fs.oss.accessKeyId"; + + public static final String FS_OSS_ACCESSKEY = "fs.oss.accessKeySecret"; + + public static final String FS_OSS_ENDPOINT = "fs.oss.endpoint"; + + /*判断分片是否均匀的标准,是否有分片长度超出平均值的百分比*/ + public static final String BALANCE_THRESHOLD = "balanceThreshold"; + } diff --git a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssInputStream.java b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssInputStream.java new file mode 100644 index 00000000..a43146e7 --- /dev/null +++ b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssInputStream.java @@ -0,0 +1,132 @@ +package com.alibaba.datax.plugin.reader.ossreader; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.RetryUtil; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.OSSObject; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.Callable; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:52 + */ +public class OssInputStream extends InputStream { + + private final OSSClient ossClient; + private GetObjectRequest getObjectRequest; + + private long startIndex = 0; + private long endIndex = -1; + + private InputStream inputStream; + + /** + * retryTimes : 重试次数, 默认值是60次; + * description: 能够cover住的网络断连时间= retryTimes*(socket_timeout+sleepTime); + * 默认cover住的网络断连时间= 60*(5+5) = 600秒. + */ + private int retryTimes = 60; + + private static final Logger LOG = LoggerFactory.getLogger(OssInputStream.class); + + /** + * 如果start为0, end为1000, inputstream范围是[0,1000],共1001个字节 + * + * @param ossClient + * @param bucket + * @param object + * @param start inputstream start index + * @param end inputstream end index + */ + public OssInputStream(final OSSClient ossClient, final String bucket, final String object, long start, long end) { + this.ossClient = ossClient; + this.getObjectRequest = new GetObjectRequest(bucket, object); + this.startIndex = start; + this.getObjectRequest.setRange(this.startIndex, end); + this.endIndex = end; + try { + RetryUtil.executeWithRetry(new Callable() { + @Override + public Boolean call() throws Exception { + OSSObject ossObject = ossClient.getObject(getObjectRequest); + // 读取InputStream + inputStream = ossObject.getObjectContent(); + return true; + } + }, this.retryTimes, 5000, false); + } catch (Exception e) { + throw DataXException.asDataXException( + OssReaderErrorCode.RUNTIME_EXCEPTION,e.getMessage(), e); + } + } + + public OssInputStream(final OSSClient ossClient, final String bucket, final String object) { + this.ossClient = ossClient; + this.getObjectRequest = new GetObjectRequest(bucket, object); + this.getObjectRequest.setRange(startIndex, -1); + try { + RetryUtil.executeWithRetry(new Callable() { + @Override + public Boolean call() throws Exception { + OSSObject ossObject = ossClient.getObject(getObjectRequest); + // 读取InputStream + inputStream = ossObject.getObjectContent(); + return true; + } + }, this.retryTimes, 5000, false); + } catch (Exception e) { + throw DataXException.asDataXException( + OssReaderErrorCode.RUNTIME_EXCEPTION, e.getMessage(), e); + } + } + + @Override + public int read() throws IOException { + int cbyte; + try { + cbyte = RetryUtil.executeWithRetry(new Callable() { + @Override + public Integer call() throws Exception { + try { + int c = inputStream.read(); + startIndex++; + return c; + } catch (Exception e) { + LOG.warn(e.getMessage(),e); + /** + * 必须将inputStream先关闭, 否则会造成连接泄漏 + */ + IOUtils.closeQuietly(inputStream); + // getOssRangeInuptStream时,如果网络不连通,则会抛出异常,RetryUtil捕获异常进行重试 + inputStream = getOssRangeInuptStream(startIndex); + int c = inputStream.read(); + startIndex++; + return c; + } + } + }, this.retryTimes,5000, false); + return cbyte; + } catch (Exception e) { + throw DataXException.asDataXException( + OssReaderErrorCode.RUNTIME_EXCEPTION, e.getMessage(), e); + } + } + + private InputStream getOssRangeInuptStream(final long startIndex) { + LOG.info("Start to retry reading [inputStream] from Byte {}", startIndex); + // 第二个参数值设为-1,表示不设置结束的字节位置,读取startIndex及其以后的所有数据 + getObjectRequest.setRange(startIndex, this.endIndex); + // 范围下载 + OSSObject ossObject = ossClient.getObject(getObjectRequest); + // 读取InputStream + LOG.info("Start to retry reading [inputStream] from Byte {}", startIndex); + return ossObject.getObjectContent(); + } +} diff --git a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssReader.java b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssReader.java index ce4f0875..62a1f81f 100755 --- a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssReader.java +++ b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/OssReader.java @@ -4,33 +4,37 @@ import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordSender; import com.alibaba.datax.common.spi.Reader; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader; +import com.alibaba.datax.plugin.reader.ossreader.util.HdfsParquetUtil; +import com.alibaba.datax.plugin.reader.ossreader.util.OssSplitUtil; import com.alibaba.datax.plugin.reader.ossreader.util.OssUtil; +import com.alibaba.datax.plugin.unstructuredstorage.FileFormat; import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderUtil; +import com.alibaba.datax.plugin.unstructuredstorage.reader.binaryFileUtil.BinaryFileReaderUtil; +import com.alibaba.datax.plugin.unstructuredstorage.reader.split.StartEndPair; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.ListObjectsRequest; -import com.aliyun.oss.model.OSSObject; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; -import com.google.common.collect.Sets; -import org.apache.commons.io.Charsets; +import com.aliyun.oss.model.ObjectMetadata; +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.InputStream; -import java.nio.charset.UnsupportedCharsetException; import java.util.ArrayList; import java.util.List; -import java.util.Set; +import java.util.Locale; import java.util.regex.Pattern; -/** - * Created by mengxin.liumx on 2014/12/7. - */ public class OssReader extends Reader { public static class Job extends Reader.Job { private static final Logger LOG = LoggerFactory @@ -38,194 +42,204 @@ public class OssReader extends Reader { private Configuration readerOriginConfig = null; + private OSSClient ossClient = null; + private String endpoint; + private String accessId; + private String accessKey; + private String bucket; + private boolean successOnNoObject; + private Boolean isBinaryFile; + + private List objects; + private List> objectSizePairs; /*用于任务切分的依据*/ + + private String fileFormat; + + private HdfsReader.Job hdfsReaderJob; + private boolean useHdfsReaderProxy = false; + @Override public void init() { LOG.debug("init() begin..."); this.readerOriginConfig = this.getPluginJobConf(); + this.basicValidateParameter(); + this.fileFormat = this.readerOriginConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_FILE_FORMAT); + this.useHdfsReaderProxy = HdfsParquetUtil.isUseHdfsWriterProxy(this.fileFormat); + if(useHdfsReaderProxy){ + HdfsParquetUtil.adaptConfiguration(this.readerOriginConfig); + this.hdfsReaderJob = new HdfsReader.Job(); + this.hdfsReaderJob.setJobPluginCollector(this.getJobPluginCollector()); + this.hdfsReaderJob.setPeerPluginJobConf(this.getPeerPluginJobConf()); + this.hdfsReaderJob.setPeerPluginName(this.getPeerPluginName()); + this.hdfsReaderJob.setPluginJobConf(this.getPluginJobConf()); + this.hdfsReaderJob.init(); + return; + } + + this.isBinaryFile = FileFormat.getFileFormatByConfiguration(this.readerOriginConfig).isBinary(); this.validate(); + UnstructuredStorageReaderUtil.validateCsvReaderConfig(this.readerOriginConfig); + this.successOnNoObject = this.readerOriginConfig.getBool( + Key.SUCCESS_ON_NO_Object, false); LOG.debug("init() ok and end..."); } - private void validate() { - String endpoint = this.readerOriginConfig.getString(Key.ENDPOINT); + + private void basicValidateParameter(){ + endpoint = this.readerOriginConfig.getString(Key.ENDPOINT); if (StringUtils.isBlank(endpoint)) { throw DataXException.asDataXException( - OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 endpoint"); + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION,"invalid endpoint"); } - String accessId = this.readerOriginConfig.getString(Key.ACCESSID); + accessId = this.readerOriginConfig.getString(Key.ACCESSID); if (StringUtils.isBlank(accessId)) { throw DataXException.asDataXException( OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 accessId"); + "invalid accessId"); } - String accessKey = this.readerOriginConfig.getString(Key.ACCESSKEY); + accessKey = this.readerOriginConfig.getString(Key.ACCESSKEY); if (StringUtils.isBlank(accessKey)) { throw DataXException.asDataXException( OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 accessKey"); + "invalid accessKey"); } + } + // warn: 提前验证endpoint,accessId,accessKey,bucket,object的有效性 + private void validate() { + // fxxk + // ossClient = new OSSClient(endpoint,accessId,accessKey); + ossClient = OssUtil.initOssClient(this.readerOriginConfig); - String bucket = this.readerOriginConfig.getString(Key.BUCKET); + + bucket = this.readerOriginConfig.getString(Key.BUCKET); if (StringUtils.isBlank(bucket)) { throw DataXException.asDataXException( OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 endpoint"); + "invalid bucket"); + }else if(!ossClient.doesBucketExist(bucket)){ + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "invalid bucket"); } String object = this.readerOriginConfig.getString(Key.OBJECT); if (StringUtils.isBlank(object)) { throw DataXException.asDataXException( OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 object"); + "invalid object"); } - String fieldDelimiter = this.readerOriginConfig - .getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.FIELD_DELIMITER); - // warn: need length 1 - if (null == fieldDelimiter || fieldDelimiter.length() == 0) { - throw DataXException.asDataXException( - OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 fieldDelimiter"); - } - - String encoding = this.readerOriginConfig - .getString( - com.alibaba.datax.plugin.unstructuredstorage.reader.Key.ENCODING, - com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_ENCODING); - try { - Charsets.toCharset(encoding); - } catch (UnsupportedCharsetException uce) { - throw DataXException.asDataXException( - OssReaderErrorCode.ILLEGAL_VALUE, - String.format("不支持的编码格式 : [%s]", encoding), uce); - } catch (Exception e) { - throw DataXException.asDataXException( - OssReaderErrorCode.ILLEGAL_VALUE, - String.format("运行配置异常 : %s", e.getMessage()), e); - } - - // 检测是column 是否为 ["*"] 若是则填为空 - List column = this.readerOriginConfig - .getListConfiguration(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COLUMN); - if (null != column - && 1 == column.size() - && ("\"*\"".equals(column.get(0).toString()) || "'*'" - .equals(column.get(0).toString()))) { - readerOriginConfig - .set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COLUMN, - new ArrayList()); - } else { - // column: 1. index type 2.value type 3.when type is Data, may - // have - // format - List columns = this.readerOriginConfig - .getListConfiguration(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COLUMN); - - if (null == columns || columns.size() == 0) { - throw DataXException.asDataXException( - OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, - "您需要指定 columns"); - } - - if (null != columns && columns.size() != 0) { - for (Configuration eachColumnConf : columns) { - eachColumnConf - .getNecessaryValue( - com.alibaba.datax.plugin.unstructuredstorage.reader.Key.TYPE, - OssReaderErrorCode.REQUIRED_VALUE); - Integer columnIndex = eachColumnConf - .getInt(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.INDEX); - String columnValue = eachColumnConf - .getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.VALUE); - - if (null == columnIndex && null == columnValue) { - throw DataXException.asDataXException( - OssReaderErrorCode.NO_INDEX_VALUE, - "由于您配置了type, 则至少需要配置 index 或 value"); - } - - if (null != columnIndex && null != columnValue) { - throw DataXException.asDataXException( - OssReaderErrorCode.MIXED_INDEX_VALUE, - "您混合配置了index, value, 每一列同时仅能选择其中一种"); - } - - } - } - } - - // only support compress: gzip,bzip2,zip - String compress = this.readerOriginConfig - .getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS); - if (StringUtils.isBlank(compress)) { - this.readerOriginConfig - .set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS, - null); - } else { - Set supportedCompress = Sets - .newHashSet("gzip", "bzip2", "zip"); - compress = compress.toLowerCase().trim(); - if (!supportedCompress.contains(compress)) { - throw DataXException - .asDataXException( - OssReaderErrorCode.ILLEGAL_VALUE, - String.format( - "仅支持 gzip, bzip2, zip 文件压缩格式 , 不支持您配置的文件压缩格式: [%s]", - compress)); - } - this.readerOriginConfig - .set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS, - compress); + if (this.isBinaryFile){ + return; } + UnstructuredStorageReaderUtil.validateParameter(this.readerOriginConfig); } + + @Override public void prepare() { - LOG.debug("prepare()"); + if(useHdfsReaderProxy){ + this.hdfsReaderJob.prepare(); + return; + } + // 将每个单独的 object 作为一个 slice + this.objectSizePairs = parseOriginObjectSizePairs(readerOriginConfig.getList(Key.OBJECT, String.class)); + this.objects = parseOriginObjects(readerOriginConfig.getList(Key.OBJECT, String.class)); + UnstructuredStorageReaderUtil.setSourceFileName(readerOriginConfig, this.objects); + UnstructuredStorageReaderUtil.setSourceFile(readerOriginConfig, this.objects); } @Override public void post() { + if(useHdfsReaderProxy){ + this.hdfsReaderJob.post(); + return; + } LOG.debug("post()"); } @Override public void destroy() { + if(useHdfsReaderProxy){ + this.hdfsReaderJob.destroy(); + return; + } LOG.debug("destroy()"); } @Override public List split(int adviceNumber) { LOG.debug("split() begin..."); - List readerSplitConfigs = new ArrayList(); + if(useHdfsReaderProxy){ + return hdfsReaderJob.split(adviceNumber); + } + List readerSplitConfigs; - // 将每个单独的 object 作为一个 slice - List objects = parseOriginObjects(readerOriginConfig - .getList(Constant.OBJECT, String.class)); - if (0 == objects.size()) { + if (0 == objects.size() && this.successOnNoObject) { + readerSplitConfigs = new ArrayList(); + Configuration splitedConfig = this.readerOriginConfig.clone(); + splitedConfig.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.SPLIT_SLICE_CONFIG, null); + readerSplitConfigs.add(splitedConfig); + LOG.info(String.format("no OSS object to be read")); + LOG.debug("split() ok and end..."); + return readerSplitConfigs; + }else if (0 == objects.size()) { throw DataXException.asDataXException( OssReaderErrorCode.EMPTY_BUCKET_EXCEPTION, - String.format( - "未能找到待读取的Object,请确认您的配置项bucket: %s object: %s", + String.format("Unable to find the object to read. Please confirm your configured item [bucket]: %s object: %s", this.readerOriginConfig.get(Key.BUCKET), this.readerOriginConfig.get(Key.OBJECT))); } - for (String object : objects) { - Configuration splitedConfig = this.readerOriginConfig.clone(); - splitedConfig.set(Constant.OBJECT, object); - readerSplitConfigs.add(splitedConfig); - LOG.info(String.format("OSS object to be read:%s", object)); + /** + * 当文件类型是text纯文本文件,并且不是压缩的情况下, + * 可以对纯文本文件进行内部切分实现并发读取, 如果用户不希望对文件拆分, 可以指定fileFormat为csv + * + * 注意:这里判断文件是否为text以及是否压缩,信息都是通过任务配置项来获取的 + * + * 这里抽出一个方法来判断是否需要分片 + * */ + OssSplitUtil ossFileSplit = new OssSplitUtil(this.ossClient, this.bucket); + long t1 = System.currentTimeMillis(); + readerSplitConfigs = ossFileSplit.getSplitedConfigurations(this.readerOriginConfig, this.objectSizePairs, + adviceNumber); + long t2 = System.currentTimeMillis(); + LOG.info("all split done, cost {}ms", t2 - t1); + /** + * 在日志中告知用户,为什么实际datax切分跑的channel数会小于用户配置的channel数 + * 注意:这里的报告的原因不准确,报的原因是一个文件一个task,所以最终切分数小于用户配置数,实际原因还有单文件切分时, + * 单文件的大小太小(理论64M一个block),导致问题比较少 + */ + if(readerSplitConfigs.size() < adviceNumber){ + LOG.info("[Note]: During OSSReader data synchronization, one file can only be synchronized in one task. You want to synchronize {} files " + + "and the number is less than the number of channels you configured: {}. " + + "Therefore, please take note that DataX will actually have {} sub-tasks, that is, the actual concurrent channels = {}", + objects.size(), adviceNumber, objects.size(), objects.size()); } - LOG.debug("split() ok and end..."); + LOG.info("split() ok and end..."); return readerSplitConfigs; } private List parseOriginObjects(List originObjects) { - List parsedObjects = new ArrayList(); + List objList = new ArrayList<>(); + + if (this.objectSizePairs == null) { + this.objectSizePairs = parseOriginObjectSizePairs(originObjects); + } + + for (Pair objSizePair : this.objectSizePairs) { + objList.add(objSizePair.getKey()); + } + + return objList; + } + + private List> parseOriginObjectSizePairs(List originObjects) { + List> parsedObjectSizePaires = new ArrayList>(); for (String object : originObjects) { int firstMetaChar = (object.indexOf('*') > object.indexOf('?')) ? object @@ -236,52 +250,130 @@ public class OssReader extends Reader { IOUtils.DIR_SEPARATOR, firstMetaChar); String parentDir = object .substring(0, lastDirSeparator + 1); - List remoteObjects = getRemoteObjects(parentDir); + List> allRemoteObjectSizePairs = getAllRemoteObjectsKeyAndSizeInDir(parentDir); Pattern pattern = Pattern.compile(object.replace("*", ".*") .replace("?", ".?")); - for (String remoteObject : remoteObjects) { - if (pattern.matcher(remoteObject).matches()) { - parsedObjects.add(remoteObject); + for (Pair remoteObjectSizePair : allRemoteObjectSizePairs) { + if (pattern.matcher(remoteObjectSizePair.getKey()).matches()) { + parsedObjectSizePaires.add(remoteObjectSizePair); + LOG.info(String + .format("add object [%s] as a candidate to be read.", + remoteObjectSizePair.getKey())); } } } else { - parsedObjects.add(object); + // 如果没有配正则匹配,那么需要对用户自己配置的object存在性进行检测 + try{ + ossClient.getObject(bucket, object); + ObjectMetadata objMeta = ossClient.getObjectMetadata(bucket, object); + parsedObjectSizePaires.add(new MutablePair(object, objMeta.getContentLength() <= OssSplitUtil.SINGLE_FILE_SPLIT_THRESHOLD_IN_SIZE ? -1L : objMeta.getContentLength())); + LOG.info(String.format( + "add object [%s] as a candidate to be read.", + object)); + }catch (Exception e){ + trackOssDetailException(e, object); + } } } - return parsedObjects; + return parsedObjectSizePaires; } - private List getRemoteObjects(String parentDir) - throws OSSException, ClientException { + // 对oss配置异常信息进行细分定位 + private void trackOssDetailException(Exception e, String object){ + // 对异常信息进行细分定位 + String errorMessage = e.getMessage(); + if(StringUtils.isNotBlank(errorMessage)){ + if(errorMessage.contains("UnknownHost")){ + // endPoint配置错误 + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "The endpoint you configured is not correct. Please check the endpoint configuration", e); + }else if(errorMessage.contains("InvalidAccessKeyId")){ + // accessId配置错误 + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "The accessId you configured is not correct. Please check the accessId configuration", e); + }else if(errorMessage.contains("SignatureDoesNotMatch")){ + // accessKey配置错误 + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "The accessKey you configured is not correct. Please check the accessId configuration", e); + }else if(errorMessage.contains("NoSuchKey")){ + if (e instanceof OSSException) { + OSSException ossException = (OSSException) e; + if ("NoSuchKey".equalsIgnoreCase(ossException + .getErrorCode()) && this.successOnNoObject) { + LOG.warn(String.format("oss file %s is not exits to read:", object), e); + return; + } + } + // object配置错误 + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "The object you configured is not correct. Please check the accessId configuration"); + }else{ + // 其他错误 + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + String.format("Please check whether the configuration of [endpoint], [accessId], [accessKey], [bucket], and [object] are correct. Error reason: %s",e.getMessage()), e); + } + }else{ + throw DataXException.asDataXException( + OssReaderErrorCode.CONFIG_INVALID_EXCEPTION, + "The configured json is invalid", e); + } + } - LOG.debug(String.format("父文件夹 : %s", parentDir)); + private List> getAllRemoteObjectsKeyAndSizeInDir(String parentDir) + throws OSSException, ClientException{ + List> objectSizePairs = new ArrayList>(); + List objectListings = getRemoteObjectListings(parentDir); + + if (objectListings.size() == 0) { + return objectSizePairs; + } + + for (ObjectListing objectList : objectListings){ + for (OSSObjectSummary objectSummary : objectList.getObjectSummaries()) { + Pair objNameSize = new MutablePair(objectSummary.getKey(), objectSummary.getSize() <= OssSplitUtil.SINGLE_FILE_SPLIT_THRESHOLD_IN_SIZE ? -1L : objectSummary.getSize()); + objectSizePairs.add(objNameSize); + } + } + + return objectSizePairs; + } + + private List getRemoteObjectListings(String parentDir) throws OSSException, ClientException { + + List remoteObjectListings = new ArrayList(); + + LOG.debug("Parent folder: {}", parentDir); List remoteObjects = new ArrayList(); OSSClient client = OssUtil.initOssClient(readerOriginConfig); + try { ListObjectsRequest listObjectsRequest = new ListObjectsRequest( readerOriginConfig.getString(Key.BUCKET)); listObjectsRequest.setPrefix(parentDir); - ObjectListing objectList; + ObjectListing remoteObjectList; do { - objectList = client.listObjects(listObjectsRequest); - for (OSSObjectSummary objectSummary : objectList - .getObjectSummaries()) { - LOG.debug(String.format("找到文件 : %s", - objectSummary.getKey())); - remoteObjects.add(objectSummary.getKey()); + remoteObjectList = client.listObjects(listObjectsRequest); + if (null != remoteObjectList) { + LOG.info("ListObjects prefix: {} requestId: {}", remoteObjectList.getPrefix(), remoteObjectList.getRequestId()); + } else { + LOG.info("ListObjectsRequest get null"); } - listObjectsRequest.setMarker(objectList.getNextMarker()); + remoteObjectListings.add(remoteObjectList); + listObjectsRequest.setMarker(remoteObjectList.getNextMarker()); LOG.debug(listObjectsRequest.getMarker()); - LOG.debug(String.valueOf(objectList.isTruncated())); - - } while (objectList.isTruncated()); - } catch (IllegalArgumentException e) { - throw DataXException.asDataXException( - OssReaderErrorCode.OSS_EXCEPTION, e.getMessage()); + LOG.debug(String.valueOf(remoteObjectList.isTruncated())); + } while (remoteObjectList.isTruncated()); + } catch (Exception e) { + trackOssDetailException(e, null); } - return remoteObjects; + return remoteObjectListings; } } @@ -289,30 +381,116 @@ public class OssReader extends Reader { private static Logger LOG = LoggerFactory.getLogger(Reader.Task.class); private Configuration readerSliceConfig; - - @Override - public void startRead(RecordSender recordSender) { - LOG.debug("read start"); - String object = readerSliceConfig.getString(Key.OBJECT); - OSSClient client = OssUtil.initOssClient(readerSliceConfig); - - OSSObject ossObject = client.getObject( - readerSliceConfig.getString(Key.BUCKET), object); - InputStream objectStream = ossObject.getObjectContent(); - UnstructuredStorageReaderUtil.readFromStream(objectStream, object, - this.readerSliceConfig, recordSender, - this.getTaskPluginCollector()); - recordSender.flush(); - } + private Boolean isBinaryFile; + private Integer blockSizeInByte; + private List allWorksForTask; + private boolean originSkipHeader; + private OSSClient ossClient; + private String fileFormat; + private HdfsReader.Task hdfsReaderTask; + private boolean useHdfsReaderProxy = false; @Override public void init() { this.readerSliceConfig = this.getPluginJobConf(); + this.fileFormat = this.readerSliceConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_FILE_FORMAT); + this.useHdfsReaderProxy = HdfsParquetUtil.isUseHdfsWriterProxy(this.fileFormat); + if(useHdfsReaderProxy){ + this.hdfsReaderTask = new HdfsReader.Task(); + this.hdfsReaderTask.setPeerPluginJobConf(this.getPeerPluginJobConf()); + this.hdfsReaderTask.setPeerPluginName(this.getPeerPluginName()); + this.hdfsReaderTask.setPluginJobConf(this.getPluginJobConf()); + this.hdfsReaderTask.setReaderPluginSplitConf(this.getReaderPluginSplitConf()); + this.hdfsReaderTask.setTaskGroupId(this.getTaskGroupId()); + this.hdfsReaderTask.setTaskId(this.getTaskId()); + this.hdfsReaderTask.setTaskPluginCollector(this.getTaskPluginCollector()); + this.hdfsReaderTask.init(); + return; + } + String allWorksForTaskStr = this.readerSliceConfig + .getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.SPLIT_SLICE_CONFIG); + if (StringUtils.isBlank(allWorksForTaskStr)) { + allWorksForTaskStr = "[]"; + } + this.allWorksForTask = JSON.parseObject(allWorksForTaskStr, new TypeReference>() { + }); + this.isBinaryFile = FileFormat.getFileFormatByConfiguration(this.readerSliceConfig).isBinary(); + this.blockSizeInByte = this.readerSliceConfig.getInt( + com.alibaba.datax.plugin.unstructuredstorage.reader.Key.BLOCK_SIZE_IN_BYTE, + com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_BLOCK_SIZE_IN_BYTE); + this.originSkipHeader = this.readerSliceConfig + .getBool(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.SKIP_HEADER, false); + } + + @Override + public void prepare() { + LOG.info("task prepare() begin..."); + if(useHdfsReaderProxy){ + this.hdfsReaderTask.prepare(); + return; + } + } + + + @Override + public void startRead(RecordSender recordSender) { + if(useHdfsReaderProxy){ + this.hdfsReaderTask.startRead(recordSender); + return; + } + boolean successOnNoObject = this.readerSliceConfig.getBool(Key.SUCCESS_ON_NO_Object, false); + if (this.allWorksForTask.isEmpty() && successOnNoObject) { + recordSender.flush(); + return; + } + String bucket = this.readerSliceConfig.getString(Key.BUCKET); + this.ossClient = OssUtil.initOssClient(this.readerSliceConfig); + for (StartEndPair eachSlice : this.allWorksForTask) { + String object = eachSlice.getFilePath(); + Long start = eachSlice.getStart(); + Long end = eachSlice.getEnd(); + LOG.info(String.format("read bucket=[%s] object=[%s], range: [start=%s, end=%s] start...", bucket, + object, start, end)); + InputStream ossInputStream = new OssInputStream(ossClient, bucket, object, start, end); + // 检查是否要跳过表头, 防止重复跳过首行 + Boolean skipHeaderValue = this.originSkipHeader && (0L == start); + this.readerSliceConfig.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.SKIP_HEADER, + skipHeaderValue); + try { + if (!this.isBinaryFile) { + UnstructuredStorageReaderUtil.readFromStream(ossInputStream, object, this.readerSliceConfig, + recordSender, this.getTaskPluginCollector()); + } else { + BinaryFileReaderUtil.readFromStream(ossInputStream, object, recordSender, this.blockSizeInByte); + } + } finally { + IOUtils.closeQuietly(ossInputStream); + } + } + recordSender.flush(); + } + + @Override + public void post() { + LOG.info("task post() begin..."); + if(useHdfsReaderProxy){ + this.hdfsReaderTask.post(); + return; + } } @Override public void destroy() { - + if(useHdfsReaderProxy){ + this.hdfsReaderTask.destroy(); + return; + } + try { + // this.ossClient.shutdown(); + } catch (Exception e) { + LOG.warn("shutdown ossclient meet a exception:" + e.getMessage(), e); + } } } } diff --git a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/HdfsParquetUtil.java b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/HdfsParquetUtil.java new file mode 100644 index 00000000..f332bb95 --- /dev/null +++ b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/HdfsParquetUtil.java @@ -0,0 +1,40 @@ +package com.alibaba.datax.plugin.reader.ossreader.util; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.reader.ossreader.Key; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:46 + */ +public class HdfsParquetUtil { + public static boolean isUseHdfsWriterProxy( String fileFormat){ + if("orc".equalsIgnoreCase(fileFormat) || "parquet".equalsIgnoreCase(fileFormat)){ + return true; + } + return false; + } + + /** + * 配置readerOriginConfig 适配hdfsreader读取oss parquet + * https://help.aliyun.com/knowledge_detail/74344.html + * @param readerOriginConfig + */ + public static void adaptConfiguration(Configuration readerOriginConfig){ + String bucket = readerOriginConfig.getString(Key.BUCKET); + String fs =String.format("oss://%s",bucket); + readerOriginConfig.set(com.alibaba.datax.plugin.reader.hdfsreader.Key.DEFAULT_FS,fs); + readerOriginConfig.set(com.alibaba.datax.plugin.reader.hdfsreader.Key.FILETYPE, + readerOriginConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT)); + /** + * "path"、 "column" 相互一致 + */ + JSONObject hadoopConfig = new JSONObject(); + hadoopConfig.put(Key.FS_OSS_ACCESSID,readerOriginConfig.getString(Key.ACCESSID)); + hadoopConfig.put(Key.FS_OSS_ACCESSKEY,readerOriginConfig.getString(Key.ACCESSKEY)); + hadoopConfig.put(Key.FS_OSS_ENDPOINT,readerOriginConfig.getString(Key.ENDPOINT)); + readerOriginConfig.set(Key.HDOOP_CONFIG,Configuration.from(JSON.toJSONString(hadoopConfig))); + } +} diff --git a/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/OssSplitUtil.java b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/OssSplitUtil.java new file mode 100644 index 00000000..760d8d5f --- /dev/null +++ b/ossreader/src/main/java/com/alibaba/datax/plugin/reader/ossreader/util/OssSplitUtil.java @@ -0,0 +1,485 @@ +package com.alibaba.datax.plugin.reader.ossreader.util; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.reader.ossreader.OssInputStream; +import com.alibaba.datax.plugin.unstructuredstorage.reader.Key; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderErrorCode; +import com.alibaba.datax.plugin.unstructuredstorage.reader.split.StartEndPair; +import com.alibaba.datax.plugin.unstructuredstorage.reader.split.UnstructuredSplitUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.OSSObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:48 + */ +public class OssSplitUtil extends UnstructuredSplitUtil { + + private static final Logger LOG = LoggerFactory.getLogger(UnstructuredSplitUtil.class); + public static final Long SINGLE_FILE_SPLIT_THRESHOLD_IN_SIZE = 64 * 1024 * 1024L; // 小于 1MB 的文件不做内部切分 + private OSSClient ossClient; + private String bucketName; + private Double balanceThreshold; + private Long avgLen = -1L; + private Integer splitGroupNum = -1; + + public OssSplitUtil(OSSClient ossClient, String bucketName) { + super(false); + this.ossClient = ossClient; + this.bucketName = bucketName; + } + + @Override + public Long getFileTotalLength(String filePath) { + // 获取object字节总数 + GetObjectRequest getObjectRequest = new GetObjectRequest(this.bucketName, filePath); + OSSObject ossObject = this.ossClient.getObject(getObjectRequest); + return ossObject.getObjectMetadata().getContentLength(); + } + + @Override + public InputStream getFileInputStream(StartEndPair startEndPair) { + InputStream inputStream = new OssInputStream(this.ossClient, this.bucketName, startEndPair.getFilePath(), + startEndPair.getStart(), startEndPair.getEnd()); + return inputStream; + } + + private Boolean canSplitSingleFile(Configuration jobConfig) { + Boolean enableInnerSplit = jobConfig.getBool(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.ENABLE_INNER_SPLIT, true); + if (!enableInnerSplit) { + return false; + } + + // 默认不切分 + String fileFormat = jobConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_FILE_FORMAT); + String compressType = jobConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS); + + // 如果不满足"是text格式且非压缩文件",则直接返回false + if (! StringUtils.equalsIgnoreCase(fileFormat, com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.FILE_FORMAT_TEXT) || + ! StringUtils.isBlank(compressType)) { + return false; + } + + // todo: 判断文件是否为软连接文件,如果为软连接文件,则不支持内部切分 + + return true; + } + + private boolean isGroupsBalance(List groups) { + assert (groups != null); + + if(groups.size() <= 1) { + return true; + } + + double avg = (double) this.avgLen * (1.0 + this.balanceThreshold/100); + for (Group group : groups) { + if(group.getFilledLenght() > avg) { + return false; + } + } + return true; + } + + /* + * 把 allObjectKeySizePares 分成 N 组,尽量使得各组中文件 size 之和 近似 + * */ + private List splitObjectToGroups(List> allObjKeySizePares, Integer N) { + List groups; + + // 若文件数 <= N,则每个文件分一个组 + if(allObjKeySizePares.size() <= N) { + groups = new ArrayList<>(); + int index = 0; + for (Pair pair : allObjKeySizePares) { + // capacity 初始化为avgLen + Group group = new Group(avgLen); + FileBlock fileBlock = new FileBlock(pair.getKey(), 0L, pair.getValue() - 1); + group.fill(fileBlock); + groups.add(group); + } + + // 文件不足N,则以空group补全 + for (int i = groups.size(); i < N; i++) { + groups.add(new Group(avgLen)); + } + + return groups; + } + + //文件数量 > N + //对 allObjKeySizePairs 按照 size 从大到小排序 + allObjKeySizePares.sort(new Comparator>() { + @Override + public int compare(Pair o1, Pair o2) { + if (o1.getValue().compareTo(o2.getValue()) < 0) { + return 1; + } + if (o1.getValue().equals(o2.getValue())) { + return 0; + } + return -1; + } + }); + + groups = new ArrayList<>(N); + + for (int i = 0; i < N; i++) { + Group group = new Group(avgLen); + groups.add(group); + } + + for (Pair pair : allObjKeySizePares) { + FileBlock fileBlock = new FileBlock(pair.getKey(), 0L, pair.getValue() - 1); + + // 对于avgLen < 0 的极端情况,直接将文件按照数量均分到各个group + if (avgLen > 0 && pair.getValue() >= avgLen) { + // 若果文件size > avgLen,则独立成组(放在一个空的group中 + for (int index = 0; index < N; index++) { + if (groups.get(index).isEmpty()) { + groups.get(index).fill(fileBlock); + break; + } + } + } else { + // 如果文件小于平均长度,则将其放在一个当前能够容纳,且容量最接近的 group 中 + int selectedIndex = 0, index = 0; + // 先找到第一个能容纳的 + for (; index < N; index++) { + if (groups.get(index).getCapacity() >= fileBlock.getSize()) { + selectedIndex = index; + } + } + // 找到能容纳且剩余容量最小的 + for (;index < N; index++) { + if (groups.get(index).getCapacity() >= fileBlock.getSize() + && groups.get(index).getCapacity() < groups.get(selectedIndex).getCapacity()) { + selectedIndex = index; + } + } + groups.get(selectedIndex).fill(fileBlock); + } + + } + + return groups; + } + + private void reBalanceGroup(List groups) { + LOG.info("reBalance start"); + assert (groups != null && groups.size() > 0); + // 对某些group内部的文件进行进一步切分 + /* 1. 选出负载最小和最大的组 */ + Group groupMinLoad = groups.get(0); + Group groupMaxLoad = groups.get(0); + for (Group group : groups) { + if (group.getFilledLenght() > groupMaxLoad.getFilledLenght()) { + groupMaxLoad = group; + } + + if (group.getFilledLenght() < groupMinLoad.getFilledLenght()) { + groupMinLoad = group; + } + } + + /* 2. 将 groupMaxLoad 最大文件切分出部分放入 groupMinLoad + * 大小为 min{grouMaxLoad.length - mean, mean - groupMinLoad.length} */ + Long splitLen = Math.min(groupMinLoad.getCapacity(), groupMaxLoad.getOverloadLength()); + FileBlock splitOutBlock = groupMaxLoad.split(splitLen, this.ossClient, this.bucketName); + + groupMinLoad.fill(splitOutBlock); + LOG.info("reBalance end"); + } + + private Long getTotoalLenOfObjList(List> objKeySizePares) { + Long totalLen = 0L; + for (Pair pair : objKeySizePares) { + totalLen += (pair.getValue() < 0 ? 1 : pair.getValue()); + } + + return totalLen; + } + + public List getSplitedConfigurations(Configuration originConfiguration, List> objKeySizePares, + int adviceNumber) { + List configurationList = new ArrayList<>(); + + this.splitGroupNum = adviceNumber; + this.avgLen = (long)Math.ceil((double)this.getTotoalLenOfObjList(objKeySizePares) / this.splitGroupNum); + this.balanceThreshold = originConfiguration.getDouble(com.alibaba.datax.plugin.reader.ossreader.Key.BALANCE_THRESHOLD, 10.0); + + List groups = this.splitObjectToGroups(objKeySizePares, this.splitGroupNum); + + // 划分后,各个组间如果长度确实比较近似,则不需要进一步对单个文件进行内部切分,反之,则需要对单个文件进行内部切分以进行进一步的调整 + if (canSplitSingleFile(originConfiguration)) { + // 防止文件内部单行过大,对循环加以限制,理论上最多只需要调整 splitGroupNum 次 + Integer i = 0; + Long timeStart = System.currentTimeMillis(); + while (i++ < splitGroupNum && ! this.isGroupsBalance(groups)) { + this.reBalanceGroup(groups); + } + Long timeEnd = System.currentTimeMillis(); + LOG.info("split groups cost {} ms", timeEnd - timeStart); + } + + LOG.info("Splited gourps:\n"); + for (Group group : groups) { + LOG.info(group.toString()); + } + + // 根据Groups划分结果初始化各个分片任务配置 + for (Group group : groups) { + Configuration configuration = originConfiguration.clone(); + // 根据groups初始化分片 + List startEndPairs = new ArrayList<>(); + for (FileBlock fileBlock : group.getFileBLocks()) { + if (canSplitSingleFile(originConfiguration)) { + startEndPairs.add(new StartEndPair(fileBlock.getStartOffset(), fileBlock.getEndOffset(), fileBlock.getObjName())); + } else { + // 如果不支持内部切分,则设置结束位点为-1,直接读取文件全部内容 + // 对于软连接文件,这是必要的 30190064 + startEndPairs.add(new StartEndPair(fileBlock.getStartOffset(), -1L, fileBlock.getObjName())); + } + } + configuration.set(Key.SPLIT_SLICE_CONFIG, startEndPairs); + configurationList.add(configuration); + } + + return configurationList; + } +} + +class Group { + /* + * fileBlockList 表示该Group中对应的文件块列表,单个文件块用一个三元组 表示 + * */ + private List fileBLockList; + private Long capacity; + private Long filledLenght; + private static final Logger LOG = LoggerFactory.getLogger(Group.class); + + Group (Long capacity) { + this(new ArrayList<>(), capacity); + } + + Group (List fileBLockList, Long capacity) { + this.capacity = capacity; + this.fileBLockList = fileBLockList; + this.filledLenght = 0L; + for (FileBlock fileBlock : fileBLockList) { + this.filledLenght += fileBlock.getSize(); + this.capacity -= fileBlock.getSize(); + } + } + + void fill(FileBlock fileBlock) { + if (null == fileBlock) { + return; + } + this.fileBLockList.add(fileBlock); + this.capacity -= fileBlock.getSize(); + this.filledLenght += fileBlock.getSize(); + } + + void take(FileBlock fileBlock) { + this.capacity += fileBlock.getSize(); + this.filledLenght -= fileBlock.getSize(); + this.fileBLockList.remove(fileBlock); + } + + Long getCapacity() { + return this.capacity; + } + + void setCapacity(Long capacity) { + this.capacity = capacity; + } + + Long getFilledLenght() { + return this.filledLenght; + } + + public boolean isEmpty() { + return this.fileBLockList.isEmpty(); + } + + public boolean isFull() { + return this.capacity <= 0; + } + + List getFileBLocks() { + return this.fileBLockList; + } + + private Integer getBiggestFileBlock() { + Integer index = 0; + Long maxSize = -1L; + for (int i = 0; i < this.fileBLockList.size(); i++) { + if (this.fileBLockList.get(index).getSize() > maxSize) { + index = i; + } + } + return index; + } + + /* + * 对Group进行切分,切分逻辑为:对最大block进行切分,前splitLen个字节作为一个新块 + * */ + FileBlock split(Long splitLen, OSSClient ossClient, String ossBucketName) { + Integer bigBlockIndex = this.getBiggestFileBlock(); + FileBlock bigBlock = this.fileBLockList.get(bigBlockIndex); + // 如果最大块的不足 10MB,则不进行内部切分直接返回 + if (bigBlock.getSize() <= OssSplitUtil.SINGLE_FILE_SPLIT_THRESHOLD_IN_SIZE) { + return null; + } + + FileBlock outBlock; + FileBlock remainBlock; + + this.take(bigBlock); + + // 如果splitLen 大于 最大块的长度, 则直接把最大块切分出去 + if (splitLen >= bigBlock.getSize()) { + outBlock = new FileBlock(bigBlock); + } else { + Long originalEnd = bigBlock.getEndOffset(); + outBlock = new FileBlock(bigBlock.getObjName(), bigBlock.getStartOffset(), bigBlock.getStartOffset() + splitLen - 1); + + // 校准第一个block的结束位点,即往后推到第一个换行符 + InputStream inputStream = new OssInputStream(ossClient, ossBucketName, outBlock.getObjName(), outBlock.getEndOffset(), originalEnd); + Long endForward = this.getLFIndex(inputStream); + outBlock.setEndOffset(outBlock.getEndOffset() + endForward); + + // outblock取的是前边部分record,切分除去后,剩余部分可能为空,这时候不生成remainBlock,确保有剩余(outBlock.end > originEnd)时再生成remainBlock. + if (outBlock.getEndOffset() < originalEnd) { + remainBlock = new FileBlock(bigBlock.getObjName(), outBlock.getEndOffset() + 1, originalEnd); + this.fill(remainBlock); + } + } + + return outBlock; + } + + Long getOverloadLength() { + return Math.max(0, -this.capacity); + } + + /** + * 获取到输入流开始的第一个'\n'偏移量 + * + * @param inputStream + * 输入流 + * @return + */ + public Long getLFIndex(InputStream inputStream) { + Long hasReadByteIndex = -1L; + int ch = 0; + while (ch != -1) { + try { + ch = inputStream.read(); + } catch (IOException e) { + throw DataXException.asDataXException(UnstructuredStorageReaderErrorCode.READ_FILE_IO_ERROR, + String.format("inputstream read Byte has exception: %s", e.getMessage()), e); + } + hasReadByteIndex++; + + if (ch == '\n') { + return hasReadByteIndex; + } + } + return -1L; + } + + public String toString() { + JSONArray fbList = new JSONArray(); + int index = 0; + for (FileBlock fb : this.fileBLockList) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(String.format("block[%d]", index++), fb.toString()); + fbList.add(jsonObject); + } + return fbList.toString(); + } +} + +class FileBlock { + private String objName; + private Long startOffset; + private Long endOffset; + private Long size; + + FileBlock(String objName, Long startOffset, Long endOffset) { + assert (StringUtils.isNotBlank(objName) && startOffset >= 0 ); + assert (endOffset == -1 || startOffset <= endOffset); + + this.objName = objName; + this.startOffset = startOffset; + // endOffset < 0 的情况下,统一设置为-1,size 设置为0 + this.endOffset = endOffset < 0 ? -1 : endOffset; + this.size = endOffset < 0 ? 1 : this.endOffset - this.startOffset + 1; + } + + public FileBlock(String objName) { + this(objName, 0L, -1L); + } + + public FileBlock(String objName, Pair starEndPair) { + this(objName, starEndPair.getKey(), starEndPair.getValue()); + } + + public FileBlock(FileBlock fileBlock) { + assert (fileBlock != null); + this.objName = fileBlock.objName; + this.startOffset = fileBlock.startOffset; + this.endOffset = fileBlock.endOffset; + this.size = fileBlock.size; + } + + Long getSize() { + return this.size; + } + + Long getStartOffset() { + return this.startOffset; + } + + void setStartOffset(Long startOffset) { + Long deltaSize = this.startOffset - startOffset; + this.startOffset = startOffset; + this.size += deltaSize; + } + + Long getEndOffset() { + return this.endOffset; + } + + void setEndOffset(Long endOffset) { + Long deltaSize = endOffset - this.endOffset; + this.endOffset = endOffset; + //size随之调整 + this.size += deltaSize; + } + + String getObjName() { + return this.objName; + } + + public String toString() { + return String.format("<%s,%d,%d>", this.objName, this.startOffset, this.endOffset); + } +} diff --git a/osswriter/pom.xml b/osswriter/pom.xml index 90d84c10..ac4029e0 100644 --- a/osswriter/pom.xml +++ b/osswriter/pom.xml @@ -10,6 +10,17 @@ osswriter jar + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -44,6 +55,60 @@ aliyun-sdk-oss 2.2.3 + + + + org.apache.parquet + parquet-column + 1.8.1 + + + org.apache.parquet + parquet-avro + 1.8.1 + + + org.apache.parquet + parquet-common + 1.8.1 + + + org.apache.parquet + parquet-format + 2.3.1 + + + org.apache.parquet + parquet-jackson + 1.8.1 + + + org.apache.parquet + parquet-encoding + 1.8.1 + + + org.apache.parquet + parquet-hadoop + 1.8.1 + + + com.twitter + parquet-hadoop-bundle + 1.6.0 + + + com.alibaba.datax + hdfswriter + 0.0.1-SNAPSHOT + compile + + + com.alibaba.datax + datax-core + 0.0.1-SNAPSHOT + compile + @@ -77,4 +142,4 @@ - \ No newline at end of file + diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Constant.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Constant.java index 5bf2eb46..b5c7110b 100644 --- a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Constant.java +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Constant.java @@ -6,4 +6,11 @@ package com.alibaba.datax.plugin.writer.osswriter; public class Constant { public static final String OBJECT = "object"; public static final int SOCKETTIMEOUT = 5000000; + public static final String DEFAULT_NULL_FORMAT = "null"; + + /** + * 每一个上传的Part都有一个标识它的号码(part number,范围是1-10000) + * https://help.aliyun.com/document_detail/31993.html + */ + public static final int MAX_BLOCK_SIZE = 10000; } diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Key.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Key.java index b922f59c..8ce263b0 100644 --- a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Key.java +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/Key.java @@ -16,4 +16,55 @@ public class Key { public static final String CNAME = "cname"; + public static final String PARTITION = "partition"; + + /** + * encrypt: 是否需要将数据在oss上加密存储 + */ + public static final String ENCRYPT = "encrypt"; + + public static final String BLOCK_SIZE_IN_MB = "blockSizeInMB"; + + public static final String OSS_CONFIG = "oss"; + public static final String POSTGRESQL_CONFIG = "postgresql"; + + public static final String PROXY_HOST = "proxyHost"; + + public static final String PROXY_PORT = "proxyPort"; + + public static final String PROXY_USERNAME = "proxyUsername"; + + public static final String PROXY_PASSWORD = "proxyPassword"; + + public static final String PROXY_DOMAIN = "proxyDomain"; + + public static final String PROXY_WORKSTATION = "proxyWorkstation"; + + public static final String HDOOP_CONFIG = "hadoopConfig"; + + public static final String FS_OSS_ACCESSID = "fs.oss.accessKeyId"; + + public static final String FS_OSS_ACCESSKEY = "fs.oss.accessKeySecret"; + + public static final String FS_OSS_ENDPOINT = "fs.oss.endpoint"; + /** + * 多个task是否写单个object文件: + * false 多个task写多个object(默认是false, 保持向前兼容) + * true 多个task写单个object + */ + public static final String WRITE_SINGLE_OBJECT = "writeSingleObject"; + + public static final String UPLOAD_ID = "uploadId"; + + /** + * Only for parquet or orc fileType + */ + public static final String PATH = "path"; + /** + * Only for parquet or orc fileType + */ + public static final String FILE_NAME = "fileName"; + + public static final String GENERATE_EMPTY_FILE = "generateEmptyFile"; + } diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssSingleObject.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssSingleObject.java new file mode 100644 index 00000000..415cf39c --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssSingleObject.java @@ -0,0 +1,78 @@ +package com.alibaba.datax.plugin.writer.osswriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.aliyun.oss.model.PartETag; +import org.apache.commons.lang3.ArrayUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:30 + */ +public class OssSingleObject { + private static Logger logger = LoggerFactory.getLogger(OssSingleObject.class); + + /** + * 一个uploadId即一个oss对象 + */ + public static String uploadId; + + /** + * 将最后一个未提交的block全部缓存到lastBlockBuffer中 + */ + private static byte[] lastBlockBuffer; + + /** + * 当前part number + */ + public static AtomicInteger currentPartNumber = new AtomicInteger(1); + + /** + * 所有已经提交的block + * 注:allPartETags是线程安全的list + */ + public static List allPartETags = Collections.synchronizedList(new ArrayList()); + + /** + * 将每个task最后未upload的block加入到lastBlockBuffer, + * 如果lastBlockBuffer的大小已经超过blockSizeInByte,则需要upload一次, 防止task过多导致lastBlockBuffer暴增OOM + * + * @param lastBlock + * @param ossWriterProxy + * @param blockSizeInByte + * @param object + */ + public synchronized static void addLastBlockBuffer(byte[] lastBlock, + OssWriterProxy ossWriterProxy, + long blockSizeInByte, + String object, OssWriterProxy.HeaderProvider headerProvider) { + lastBlockBuffer = ArrayUtils.addAll(lastBlockBuffer, lastBlock); + //lastBlockBuffer大小超过blockSizeInByte则需要upload part + if (lastBlockBuffer != null && lastBlockBuffer.length >= blockSizeInByte) { + logger.info("write last block buffer part size [{}] to object [{}], all has uploaded part size:{}, current part number:{}, uploadId:{}", + lastBlockBuffer.length, object, allPartETags.size(), currentPartNumber.intValue(), uploadId); + try { + ossWriterProxy.uploadOnePartForSingleObject(lastBlockBuffer, uploadId, allPartETags, object, headerProvider); + } catch (Exception e) { + logger.error("upload part error: {}", e.getMessage(), e); + throw DataXException.asDataXException(e.getMessage()); + } + //currentPartNumber自增 + currentPartNumber.incrementAndGet(); + //清空lastBlockBuffer + lastBlockBuffer = null; + } + + } + + public static byte[] getLastBlockBuffer() { + return lastBlockBuffer; + } + +} diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriter.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriter.java index 90a34ad7..a8aec0e6 100644 --- a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriter.java +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriter.java @@ -1,18 +1,21 @@ package com.alibaba.datax.plugin.writer.osswriter; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; +import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.Callable; +import com.alibaba.datax.common.element.BytesColumn; +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.util.RangeSplitUtil; +import com.alibaba.datax.plugin.unstructuredstorage.FileFormat; +import com.alibaba.datax.plugin.unstructuredstorage.writer.binaryFileUtil.BinaryFileWriterUtil; +import com.alibaba.datax.plugin.writer.hdfswriter.HdfsWriter; +import com.alibaba.datax.plugin.writer.osswriter.util.HandlerUtil; +import com.alibaba.datax.plugin.writer.osswriter.util.HdfsParquetUtil; +import com.alibaba.fastjson.JSON; +import com.aliyun.oss.model.*; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -31,50 +34,121 @@ import com.alibaba.datax.plugin.writer.osswriter.util.OssUtil; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSException; -import com.aliyun.oss.model.CompleteMultipartUploadRequest; -import com.aliyun.oss.model.CompleteMultipartUploadResult; -import com.aliyun.oss.model.InitiateMultipartUploadRequest; -import com.aliyun.oss.model.InitiateMultipartUploadResult; -import com.aliyun.oss.model.OSSObjectSummary; -import com.aliyun.oss.model.ObjectListing; -import com.aliyun.oss.model.PartETag; -import com.aliyun.oss.model.UploadPartRequest; -import com.aliyun.oss.model.UploadPartResult; + +import static com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.*; /** * Created by haiwei.luo on 15-02-09. */ public class OssWriter extends Writer { + + public static int parseParentPathLength(List path) { + if (path == null || path.size() != 1) { + throw DataXException.asDataXException( + OssWriterErrorCode.CONFIG_INVALID_EXCEPTION, String.format("only support configure one path in binary copy mode, your config: %s", JSON.toJSONString(path))); + } + String eachPath = path.get(0); + int endMark; + for (endMark = 0; endMark < eachPath.length(); endMark++) { + if ('*' != eachPath.charAt(endMark) && '?' != eachPath.charAt(endMark)) { + continue; + } else { + break; + } + } + + int lastDirSeparator = eachPath.lastIndexOf(IOUtils.DIR_SEPARATOR) + 1; + if (endMark < eachPath.length()) { + lastDirSeparator = eachPath.substring(0, endMark).lastIndexOf(IOUtils.DIR_SEPARATOR) + 1; + } + return lastDirSeparator; + } + public static class Job extends Writer.Job { private static final Logger LOG = LoggerFactory.getLogger(Job.class); private Configuration writerSliceConfig = null; private OSSClient ossClient = null; + private Configuration peerPluginJobConf; + private Boolean isBinaryFile; + private String objectDir; + private String syncMode; + private String fileFormat; + private String encoding; + private HdfsWriter.Job hdfsWriterJob; + private boolean useHdfsWriterProxy = false; + private boolean writeSingleObject; + private OssWriterProxy ossWriterProxy; + private String bucket; + private String object; + private List header; + + @Override + public void preHandler(Configuration jobConfiguration) { + HandlerUtil.preHandler(jobConfiguration); + } + @Override public void init() { this.writerSliceConfig = this.getPluginJobConf(); + this.basicValidateParameter(); + this.fileFormat = this.writerSliceConfig.getString( + com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.FILE_FORMAT_TEXT); + this.encoding = this.writerSliceConfig.getString( + com.alibaba.datax.plugin.unstructuredstorage.writer.Key.ENCODING, + com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.DEFAULT_ENCODING); + this.useHdfsWriterProxy = HdfsParquetUtil.isUseHdfsWriterProxy(this.fileFormat); + if(useHdfsWriterProxy){ + this.hdfsWriterJob = new HdfsWriter.Job(); + HdfsParquetUtil.adaptConfiguration(this.hdfsWriterJob, this.writerSliceConfig); + + this.hdfsWriterJob.setJobPluginCollector(this.getJobPluginCollector()); + this.hdfsWriterJob.setPeerPluginJobConf(this.getPeerPluginJobConf()); + this.hdfsWriterJob.setPeerPluginName(this.getPeerPluginName()); + this.hdfsWriterJob.setPluginJobConf(this.getPluginJobConf()); + this.hdfsWriterJob.init(); + return; + } + this.peerPluginJobConf = this.getPeerPluginJobConf(); + this.isBinaryFile = FileFormat.getFileFormatByConfiguration(this.peerPluginJobConf).isBinary(); + this.syncMode = this.writerSliceConfig + .getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.SYNC_MODE, ""); + this.writeSingleObject = this.writerSliceConfig.getBool(Key.WRITE_SINGLE_OBJECT, false); + this.header = this.writerSliceConfig + .getList(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.HEADER, null, String.class); this.validateParameter(); this.ossClient = OssUtil.initOssClient(this.writerSliceConfig); + this.ossWriterProxy = new OssWriterProxy(this.writerSliceConfig, this.ossClient); + } + + private void basicValidateParameter(){ + this.writerSliceConfig.getNecessaryValue(Key.ENDPOINT, OssWriterErrorCode.REQUIRED_VALUE); + this.writerSliceConfig.getNecessaryValue(Key.ACCESSID, OssWriterErrorCode.REQUIRED_VALUE); + this.writerSliceConfig.getNecessaryValue(Key.ACCESSKEY, OssWriterErrorCode.REQUIRED_VALUE); + this.writerSliceConfig.getNecessaryValue(Key.BUCKET, OssWriterErrorCode.REQUIRED_VALUE); } private void validateParameter() { - this.writerSliceConfig.getNecessaryValue(Key.ENDPOINT, - OssWriterErrorCode.REQUIRED_VALUE); - this.writerSliceConfig.getNecessaryValue(Key.ACCESSID, - OssWriterErrorCode.REQUIRED_VALUE); - this.writerSliceConfig.getNecessaryValue(Key.ACCESSKEY, - OssWriterErrorCode.REQUIRED_VALUE); - this.writerSliceConfig.getNecessaryValue(Key.BUCKET, - OssWriterErrorCode.REQUIRED_VALUE); - this.writerSliceConfig.getNecessaryValue(Key.OBJECT, - OssWriterErrorCode.REQUIRED_VALUE); + this.writerSliceConfig.getBool(Key.ENCRYPT); + + if (this.isBinaryFile){ + BinaryFileWriterUtil.validateParameter(this.writerSliceConfig); + return; + } + + if (!this.isPeer2PeerCopyMode()) { + // 非对等拷贝模式下必选 + this.writerSliceConfig.getNecessaryValue(Key.OBJECT, + OssWriterErrorCode.REQUIRED_VALUE); + } + // warn: do not support compress!! String compress = this.writerSliceConfig .getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.COMPRESS); if (StringUtils.isNotBlank(compress)) { - String errorMessage = String.format( - "OSS写暂时不支持压缩, 该压缩配置项[%s]不起效用", compress); + String errorMessage = String.format("OSS writes do not support compression for the moment. The compressed item %s does not work", compress); LOG.error(errorMessage); throw DataXException.asDataXException( OssWriterErrorCode.ILLEGAL_VALUE, errorMessage); @@ -82,107 +156,376 @@ public class OssWriter extends Writer { } UnstructuredStorageWriterUtil .validateParameter(this.writerSliceConfig); - + LOG.info("writeSingleObject is: {}", this.writeSingleObject); } @Override public void prepare() { LOG.info("begin do prepare..."); - String bucket = this.writerSliceConfig.getString(Key.BUCKET); - String object = this.writerSliceConfig.getString(Key.OBJECT); + if(useHdfsWriterProxy){ + this.hdfsWriterJob.prepare(); + return; + } + this.bucket = this.writerSliceConfig.getString(Key.BUCKET); + this.object = this.writerSliceConfig.getString(Key.OBJECT); String writeMode = this.writerSliceConfig .getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.WRITE_MODE); - // warn: bucket is not exists, create it - try { - // warn: do not create bucket for user - if (!this.ossClient.doesBucketExist(bucket)) { - // this.ossClient.createBucket(bucket); - String errorMessage = String.format( - "您配置的bucket [%s] 不存在, 请您确认您的配置项.", bucket); - LOG.error(errorMessage); - throw DataXException.asDataXException( - OssWriterErrorCode.ILLEGAL_VALUE, errorMessage); - } - LOG.info(String.format("access control details [%s].", - this.ossClient.getBucketAcl(bucket).toString())); + List sourceFileName = this.peerPluginJobConf.getList(SOURCE_FILE_NAME, new ArrayList(), + String.class); + this.objectDir = this.getObjectDir(object); - // truncate option handler - if ("truncate".equals(writeMode)) { - LOG.info(String - .format("由于您配置了writeMode truncate, 开始清理 [%s] 下面以 [%s] 开头的Object", - bucket, object)); - // warn: 默认情况下,如果Bucket中的Object数量大于100,则只会返回100个Object - while (true) { - ObjectListing listing = null; - LOG.info("list objects with listObject(bucket, object)"); - listing = this.ossClient.listObjects(bucket, object); - List objectSummarys = listing - .getObjectSummaries(); - for (OSSObjectSummary objectSummary : objectSummarys) { - LOG.info(String.format("delete oss object [%s].", - objectSummary.getKey())); - this.ossClient.deleteObject(bucket, - objectSummary.getKey()); - } - if (objectSummarys.isEmpty()) { - break; + // 对等拷贝模式下将源头获取的文件列表在目的端删除 + if (this.isPeer2PeerCopyMode()) { + String fullObjectName = null; + String truncateMode = this.writerSliceConfig.getString("truncateMode", "objectMatch"); + // 前缀删除模式 + if ("prefix".equalsIgnoreCase(truncateMode)) { + BinaryFileWriterUtil.checkFileNameIfRepeatedThrowException(sourceFileName); + if (TRUNCATE.equals(writeMode)) { + LOG.info("You have configured [writeMode] [truncate], so the system will start to clear the objects starting with [{}] under [{}]. ", bucket, object); + // warn: 默认情况下,如果Bucket中的Object数量大于100,则只会返回100个Object + while (true) { + ObjectListing listing = null; + LOG.info("list objects with listObject(bucket, object)"); + listing = this.ossClient.listObjects(bucket, object); + List objectSummarys = listing + .getObjectSummaries(); + if (objectSummarys.isEmpty()) { + break; + } + List objects2Delete = new ArrayList(); + for (OSSObjectSummary objectSummary : objectSummarys) { + objects2Delete.add(objectSummary.getKey()); + } + LOG.info(String.format("[prefix truncate mode]delete oss object [%s].", JSON.toJSONString(objects2Delete))); + DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucket); + deleteRequest.setKeys(objects2Delete); + deleteRequest.setQuiet(true);// 简单模式 + DeleteObjectsResult deleteResult = this.ossClient.deleteObjects(deleteRequest); + assert deleteResult.getDeletedObjects().isEmpty(); + LOG.warn("OSS request id:{}, objects delete failed:{}", deleteResult.getRequestId(), + JSON.toJSONString(deleteResult.getDeletedObjects())); } + + }else { + throw DataXException.asDataXException(OssWriterErrorCode.ILLEGAL_VALUE, + "only support truncate writeMode in copy sync mode."); } - } else if ("append".equals(writeMode)) { - LOG.info(String - .format("由于您配置了writeMode append, 写入前不做清理工作, 数据写入Bucket [%s] 下, 写入相应Object的前缀为 [%s]", - bucket, object)); - } else if ("nonConflict".equals(writeMode)) { - LOG.info(String - .format("由于您配置了writeMode nonConflict, 开始检查Bucket [%s] 下面以 [%s] 命名开头的Object", - bucket, object)); - ObjectListing listing = this.ossClient.listObjects(bucket, - object); - if (0 < listing.getObjectSummaries().size()) { - StringBuilder objectKeys = new StringBuilder(); - objectKeys.append("[ "); - for (OSSObjectSummary ossObjectSummary : listing - .getObjectSummaries()) { - objectKeys.append(ossObjectSummary.getKey() + " ,"); + } else { + if (TRUNCATE.equals(writeMode)) { + sourceFileName = this.peerPluginJobConf.getList(com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.SOURCE_FILE, new ArrayList(), + String.class); + List readerPath = this.peerPluginJobConf.getList(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.PATH, new ArrayList(), + String.class); + int parentPathLength = OssWriter.parseParentPathLength(readerPath); + this.writerSliceConfig.set("__parentPathLength", parentPathLength); + BinaryFileWriterUtil.checkFileNameIfRepeatedThrowException(sourceFileName); + + // 原样文件名删除模式 + int splitCount = sourceFileName.size() / 1000 + 1; + List> splitResult = RangeSplitUtil.doListSplit(sourceFileName, splitCount); + for (List eachSlice : splitResult) { + assert eachSlice.size() <= 1000; + if (eachSlice.isEmpty()) { + continue; + } + List ossObjFullPath = new ArrayList(); + for (String eachObj : eachSlice) { + fullObjectName = String.format("%s%s", objectDir, eachObj.substring(parentPathLength, eachObj.length())); + ossObjFullPath.add(fullObjectName); + } + LOG.info(String.format("[origin object name truncate mode]delete oss object [%s].", JSON.toJSONString(ossObjFullPath))); + DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucket); + deleteRequest.setKeys(ossObjFullPath); + deleteRequest.setQuiet(true);// 简单模式 + DeleteObjectsResult deleteResult = this.ossClient.deleteObjects(deleteRequest); + assert deleteResult.getDeletedObjects().isEmpty(); + LOG.warn("OSS request id:{}, objects delete failed:{}", deleteResult.getRequestId(), + JSON.toJSONString(deleteResult.getDeletedObjects())); } - objectKeys.append(" ]"); - LOG.info(String.format( - "object with prefix [%s] details: %s", object, - objectKeys.toString())); - throw DataXException - .asDataXException( - OssWriterErrorCode.ILLEGAL_VALUE, - String.format( - "您配置的Bucket: [%s] 下面存在其Object有前缀 [%s].", - bucket, object)); + } else { + throw DataXException.asDataXException(OssWriterErrorCode.ILLEGAL_VALUE, + "only support truncate writeMode in copy sync mode."); } } - } catch (OSSException e) { - throw DataXException.asDataXException( - OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage()); - } catch (ClientException e) { - throw DataXException.asDataXException( - OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage()); + return; + } else { + // warn: 源头表不是半结构化或者不是对等copy模式时走前缀删除策略 + // warn: bucket is not exists, create it + try { + // warn: do not create bucket for user + if (!this.ossClient.doesBucketExist(bucket)) { + // this.ossClient.createBucket(bucket); + String errorMessage = String.format("The [bucket]: %s you configured does not exist. Please confirm your configuration items. ", bucket); + LOG.error(errorMessage); + throw DataXException.asDataXException( + OssWriterErrorCode.ILLEGAL_VALUE, errorMessage); + } + LOG.info(String.format("access control details [%s].", + this.ossClient.getBucketAcl(bucket).toString())); + + if (writeSingleObject) { + doPrepareForSingleObject(bucket, object, writeMode); + } else { + doPrepareForMutliObject(bucket, object, writeMode); + } + } catch (OSSException e) { + throw DataXException.asDataXException( + OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage(), e); + } catch (ClientException e) { + throw DataXException.asDataXException( + OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage(), e); + } + } + } + + /** + * 执行多个task写单个object prepare逻辑 + * + * @param bucket + * @param object + * @param writeMode + */ + private void doPrepareForSingleObject(String bucket, String object, String writeMode) { + boolean doesObjectExist = this.ossClient.doesObjectExist(bucket, object); + LOG.info("does object [{}] exist in bucket {} : {}", object, bucket, doesObjectExist); + if (TRUNCATE.equals(writeMode)) { + LOG.info("Because you have configured writeMode truncate, and writeSingleObject is true, start cleaning up the duplicate object [{}] under [{}]", bucket, object); + if (doesObjectExist) { + LOG.info("object [{}] has exist in bucket, delete it!", object, bucket); + this.ossClient.deleteObject(bucket, object); + } + } else if (APPEND.equals(writeMode)) { + throw DataXException + .asDataXException( + OssWriterErrorCode.ILLEGAL_VALUE, + "Illegal value"); + } else if (NOCONFLICT.equals(writeMode)) { + LOG.info("Because you have configured writeMode nonConflict, and writeSingleObject is true, start checking bucket [{}] under the same name object [{}]", bucket, object); + if (doesObjectExist) { + throw DataXException + .asDataXException( + OssWriterErrorCode.ILLEGAL_VALUE, + String.format("Buffet you configured: %s There is a duplicate name of Object %s", bucket, object)); + } + } + } + + /** + * 执行多个task写多个object的prepare逻辑,这个是osswriter已有的逻辑,需要保持向前兼容性 + * + * @param bucket + * @param object + * @param writeMode + */ + private void doPrepareForMutliObject(String bucket, String object, String writeMode) { + // truncate option handler + if (TRUNCATE.equals(writeMode)) { + LOG.info("You have configured [writeMode] [truncate], so the system will start to clear the objects starting with [{}] under [{}]. ", bucket, object); + // warn: 默认情况下,如果Bucket中的Object数量大于100,则只会返回100个Object + while (true) { + ObjectListing listing = null; + LOG.info("list objects with listObject(bucket, object)"); + listing = this.ossClient.listObjects(bucket, object); + List objectSummarys = listing + .getObjectSummaries(); + for (OSSObjectSummary objectSummary : objectSummarys) { + LOG.info(String.format("delete oss object [%s].", + objectSummary.getKey())); + this.ossClient.deleteObject(bucket, + objectSummary.getKey()); + } + if (objectSummarys.isEmpty()) { + break; + } + } + } else if (APPEND.equals(writeMode)) { + LOG.info("You have configured [writeMode] [append], so the system won\\u2019t perform the clearing before writing. Data is written to objects with the name prefix of [{}] under the bucket: [{}]. ", bucket, object); + } else if (NOCONFLICT.equals(writeMode)) { + LOG.info("You have configured [writeMode] [nonConflict], so the system will start to check objects whose names start with [{}] under the bucket: [{}]. ", bucket, object); + ObjectListing listing = this.ossClient.listObjects(bucket, + object); + if (0 < listing.getObjectSummaries().size()) { + StringBuilder objectKeys = new StringBuilder(); + objectKeys.append("[ "); + for (OSSObjectSummary ossObjectSummary : listing + .getObjectSummaries()) { + objectKeys.append(ossObjectSummary.getKey() + " ,"); + } + objectKeys.append(" ]"); + LOG.info(String.format( + "object with prefix [%s] details: %s", object, + objectKeys.toString())); + throw DataXException + .asDataXException( + OssWriterErrorCode.ILLEGAL_VALUE, + String.format("The [bucket] you configured: %s contains objects with the name prefix of %s.", bucket, object)); + } } } @Override public void post() { + if(useHdfsWriterProxy){ + this.hdfsWriterJob.post(); + return; + } + if (this.writeSingleObject) { + try { + /**1. 合并上传最后一个block*/ + LOG.info("Has upload part size: {}", OssSingleObject.allPartETags.size()); + if (OssSingleObject.getLastBlockBuffer() != null && OssSingleObject.getLastBlockBuffer().length != 0) { + byte[] byteBuffer = OssSingleObject.getLastBlockBuffer(); + LOG.info("post writer single object last merge block size is : {}", byteBuffer.length); + this.ossWriterProxy.uploadOnePartForSingleObject(byteBuffer, OssSingleObject.uploadId, + OssSingleObject.allPartETags, this.object, this::getHeaderBytes); + } + if (OssSingleObject.allPartETags.size() == 0) { + LOG.warn("allPartETags size is 0, there is no part of data need to be complete uploaded, " + + "skip complete multipart upload!"); + this.ossWriterProxy.abortMultipartUpload(this.object,OssSingleObject.uploadId); + return; + } + + /**2. 完成complete upload */ + LOG.info("begin complete multi part upload, bucket:{}, object:{}, uploadId:{}, all has upload part size:{}", + this.bucket, this.object, OssSingleObject.uploadId, OssSingleObject.allPartETags.size()); + orderPartETages(OssSingleObject.allPartETags); + CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( + this.bucket, this.object, OssSingleObject.uploadId, OssSingleObject.allPartETags); + CompleteMultipartUploadResult completeMultipartUploadResult = this.ossWriterProxy.completeMultipartUpload(completeMultipartUploadRequest); + LOG.info(String.format("post final object etag is:[%s]", completeMultipartUploadResult.getETag())); + } catch (Exception e) { + LOG.error("osswriter post error: {}", e.getMessage(), e); + throw DataXException.asDataXException(e.getMessage()); + } + } + } + + private byte[] getHeaderBytes() throws IOException { + if (null != this.header && !this.header.isEmpty()) { + // write header to writer + try (StringWriter sw = new StringWriter(); + UnstructuredWriter headerWriter = UnstructuredStorageWriterUtil. + produceUnstructuredWriter(this.fileFormat, this.writerSliceConfig, sw)) { + headerWriter.writeOneRecord(this.header); + return sw.toString().getBytes(this.encoding); + } + } + return new byte[0]; + } + + /** + * 对allPartETags做递增排序 + * + * @param allPartETags + * @return + */ + private void orderPartETages(List allPartETags) { + Collections.sort(allPartETags, new Comparator() { + @Override + public int compare(PartETag o1, PartETag o2) { + //按照partNumber递增排序 + return o1.getPartNumber() - o2.getPartNumber(); + } + }); } @Override public void destroy() { - + if(useHdfsWriterProxy){ + this.hdfsWriterJob.destroy(); + return; + } + try { + // this.ossClient.shutdown(); + } catch (Exception e) { + LOG.warn("shutdown ossclient meet a exception:" + e.getMessage(), e); + } } @Override public List split(int mandatoryNumber) { LOG.info("begin do split..."); + if(useHdfsWriterProxy){ + return this.hdfsWriterJob.split(mandatoryNumber); + } + List writerSplitConfigs = new ArrayList(); + + // warn: 这个地方其实可能有bug,datax frame其实会shuffle, 文件内部切分也不好支持这个诉求 + if(this.isPeer2PeerCopyMode()){ + // 有这个需求风险: 源头oss的文件 abc/123/data.txt yixiao.txt 2个文件对等拷贝过来, 这个场景下data.txt + // yixiao.txt 只能放一个目录 + List readerSplitConfigs = this.getReaderPluginSplitConf(); + for (int i = 0; i < readerSplitConfigs.size(); i++) { + Configuration splitedTaskConfig = writerSliceConfig.clone(); + splitedTaskConfig.set(Key.OBJECT, objectDir); + splitedTaskConfig.set(com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.BINARY, + this.isBinaryFile); + writerSplitConfigs.add(splitedTaskConfig); + } + } else { + if (this.writeSingleObject) { + writerSplitConfigs = doSplitForWriteSingleObject(mandatoryNumber); + } else { + writerSplitConfigs = doSplitForWriteMultiObject(mandatoryNumber); + } + } + LOG.info("end do split. split size: {}", writerSplitConfigs.size()); + return writerSplitConfigs; + } + + /** + * 针对多个task写单个文件模式,新增split逻辑 + * + * @param mandatoryNumber + * @return + */ + private List doSplitForWriteSingleObject(int mandatoryNumber) { + LOG.info("writeSingleObject is true, begin do split for write single object."); List writerSplitConfigs = new ArrayList(); String object = this.writerSliceConfig.getString(Key.OBJECT); - String bucket = this.writerSliceConfig.getString(Key.BUCKET); + InitiateMultipartUploadRequest uploadRequest = this.ossWriterProxy.getInitiateMultipartUploadRequest( + object); + + InitiateMultipartUploadResult uploadResult; + try { + uploadResult = this.ossWriterProxy.initiateMultipartUpload( + uploadRequest); + } catch (Exception e) { + LOG.error("initiateMultipartUpload error: {}", e.getMessage(), e); + throw DataXException.asDataXException(e.getMessage()); + } + /** + * 如果需要写同一个object,需要保证使用同一个upload Id + * see: https://help.aliyun.com/document_detail/31993.html + */ + String uploadId = uploadResult.getUploadId(); + OssSingleObject.uploadId = uploadId; + LOG.info("writeSingleObject use uploadId: {}", uploadId); + + for (int i = 0; i < mandatoryNumber; i++) { + Configuration splitedTaskConfig = this.writerSliceConfig + .clone(); + splitedTaskConfig.set(Key.OBJECT, object); + splitedTaskConfig.set(Key.UPLOAD_ID, uploadId); + writerSplitConfigs.add(splitedTaskConfig); + } + return writerSplitConfigs; + } + + /** + * osswriter多个task写多个object文件split逻辑,历史已有该逻辑,保持向前兼容性 + * + * @param mandatoryNumber + * @return + */ + private List doSplitForWriteMultiObject(int mandatoryNumber) { + List writerSplitConfigs = new ArrayList(); + String bucket = this.writerSliceConfig.getString(Key.BUCKET); + String object = this.writerSliceConfig.getString(Key.OBJECT); Set allObjects = new HashSet(); try { List ossObjectlisting = this.ossClient @@ -192,10 +535,10 @@ public class OssWriter extends Writer { } } catch (OSSException e) { throw DataXException.asDataXException( - OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage()); + OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage(), e); } catch (ClientException e) { throw DataXException.asDataXException( - OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage()); + OssWriterErrorCode.OSS_COMM_ERROR, e.getMessage(), e); } String objectSuffix; @@ -223,9 +566,25 @@ public class OssWriter extends Writer { writerSplitConfigs.add(splitedTaskConfig); } - LOG.info("end do split."); return writerSplitConfigs; } + + private boolean isPeer2PeerCopyMode() { + return this.isBinaryFile + || com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.SYNC_MODE_VALUE_COPY + .equalsIgnoreCase(this.syncMode); + } + + private String getObjectDir(String object) { + String dir = null; + if (StringUtils.isBlank(object)) { + dir = ""; + } else { + dir = object.trim(); + dir = dir.endsWith("/") ? dir : String.format("%s/", dir); + } + return dir; + } } public static class Task extends Writer.Task { @@ -237,17 +596,48 @@ public class OssWriter extends Writer { private String object; private String nullFormat; private String encoding; - private char fieldDelimiter; private String dateFormat; private DateFormat dateParse; private String fileFormat; private List header; private Long maxFileSize;// MB private String suffix; + private Boolean encrypt;// 是否在服务器端进行加密存储 + private long blockSizeInByte; + private Boolean isBinaryFile; + private String objectDir; + private String syncMode; + private int parentPathLength; + private String byteEncoding; + private HdfsWriter.Task hdfsWriterTask; + private boolean useHdfsWriterProxy = false; + private boolean writeSingleObject; + private String uploadId; + private OssWriterProxy ossWriterProxy; + private List partition; + private boolean generateEmptyFile; @Override public void init() { this.writerSliceConfig = this.getPluginJobConf(); + this.fileFormat = this.writerSliceConfig + .getString( + com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.FILE_FORMAT_TEXT); + this.useHdfsWriterProxy = HdfsParquetUtil.isUseHdfsWriterProxy(this.fileFormat); + if(useHdfsWriterProxy){ + this.hdfsWriterTask = new HdfsWriter.Task(); + this.hdfsWriterTask.setPeerPluginJobConf(this.getPeerPluginJobConf()); + this.hdfsWriterTask.setPeerPluginName(this.getPeerPluginName()); + this.hdfsWriterTask.setPluginJobConf(this.getPluginJobConf()); + this.hdfsWriterTask.setReaderPluginSplitConf(this.getReaderPluginSplitConf()); + this.hdfsWriterTask.setTaskGroupId(this.getTaskGroupId()); + this.hdfsWriterTask.setTaskId(this.getTaskId()); + this.hdfsWriterTask.setTaskPluginCollector(this.getTaskPluginCollector()); + this.hdfsWriterTask.init(); + return; + } + this.ossClient = OssUtil.initOssClient(this.writerSliceConfig); this.bucket = this.writerSliceConfig.getString(Key.BUCKET); this.object = this.writerSliceConfig.getString(Key.OBJECT); @@ -264,14 +654,6 @@ public class OssWriter extends Writer { .getString( com.alibaba.datax.plugin.unstructuredstorage.writer.Key.ENCODING, com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.DEFAULT_ENCODING); - this.fieldDelimiter = this.writerSliceConfig - .getChar( - com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FIELD_DELIMITER, - com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.DEFAULT_FIELD_DELIMITER); - this.fileFormat = this.writerSliceConfig - .getString( - com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT, - com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.FILE_FORMAT_TEXT); this.header = this.writerSliceConfig .getList( com.alibaba.datax.plugin.unstructuredstorage.writer.Key.HEADER, @@ -285,67 +667,334 @@ public class OssWriter extends Writer { com.alibaba.datax.plugin.unstructuredstorage.writer.Key.SUFFIX, com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.DEFAULT_SUFFIX); this.suffix = this.suffix.trim();// warn: need trim + this.encrypt = this.writerSliceConfig.getBool(Key.ENCRYPT, false); + + // 设置每块字符串长度 + this.blockSizeInByte = this.writerSliceConfig.getLong(Key.BLOCK_SIZE_IN_MB, 10L) * 1024 * 1024; + + this.isBinaryFile = this.writerSliceConfig.getBool( + com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.BINARY, false); + + this.objectDir = this.getObjectDir(this.object); + this.syncMode = this.writerSliceConfig + .getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.SYNC_MODE, ""); + this.parentPathLength = this.writerSliceConfig.getInt("__parentPathLength", 0); + + this.byteEncoding = this.writerSliceConfig + .getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.BYTE_ENCODING); + + this.writeSingleObject = this.writerSliceConfig.getBool(Key.WRITE_SINGLE_OBJECT, false); + this.uploadId = this.writerSliceConfig.getString(Key.UPLOAD_ID); + this.ossWriterProxy = new OssWriterProxy(this.writerSliceConfig, this.ossClient); + this.partition = this.writerSliceConfig.getList(Key.PARTITION, new ArrayList<>(), String.class); + //是否生成空文件开关 + this.generateEmptyFile = this.writerSliceConfig.getBool(Key.GENERATE_EMPTY_FILE,true); } @Override public void startWrite(RecordReceiver lineReceiver) { + if(useHdfsWriterProxy){ + hdfsWriterTask.startWrite(lineReceiver); + return; + } + if (this.isPeer2PeerCopyMode()) { + // 对等拷贝 + this.startWriteBinaryFile(lineReceiver); + } else if (this.writeSingleObject) { + this.startWriteSingleObjectUnstructedStorageFile(lineReceiver); + } else { + this.startWriteUnstructedStorageFile(lineReceiver,generateEmptyFile); + } + } + + /** + * 单object写入 + * + * @param lineReceiver + */ + public void startWriteSingleObjectUnstructedStorageFile(RecordReceiver lineReceiver) { + + try { + Record record; + String currentObject = this.object; + List currentPartETags = new ArrayList(); + + //warn: may be StringBuffer->StringBuilder + StringWriter sw = new StringWriter(); + StringBuffer sb = sw.getBuffer(); + UnstructuredWriter unstructuredWriter = UnstructuredStorageWriterUtil. + produceUnstructuredWriter(this.fileFormat, this.writerSliceConfig, sw); + + while ((record = lineReceiver.getFromReader()) != null) { + //单文件同步暂不支持轮转[目前单文件支持同步约最大100GB大小] + if (OssSingleObject.currentPartNumber.intValue() > Constant.MAX_BLOCK_SIZE) { + throw DataXException.asDataXException(String.format("When writeSingleObject is true, the write size of your single object has exceeded the maximum value of %s MB.", + (Constant.MAX_BLOCK_SIZE * this.blockSizeInByte / 1024 / 1024))); + } + + // write: upload data to current object + UnstructuredStorageWriterUtil.transportOneRecord(record, + this.nullFormat, this.dateParse, + this.getTaskPluginCollector(), unstructuredWriter, this.byteEncoding); + + // 达到 this.blockSizeInByte ,上传文件块 + if (sb.length() >= this.blockSizeInByte) { + LOG.info(String + .format("write to bucket: [%s] object: [%s] with oss uploadId: [%s], currentPartNumber: %s", + this.bucket, currentObject, + this.uploadId, OssSingleObject.currentPartNumber.intValue())); + byte[] byteArray = sw.toString().getBytes(this.encoding); + this.ossWriterProxy.uploadOnePartForSingleObject(byteArray, this.uploadId, currentPartETags, currentObject, this::getHeaderBytes); + sb.setLength(0); + } + } + //将本task所有upload的part加入到allPartETags中 + OssSingleObject.allPartETags.addAll(currentPartETags); + + //将task未写完的最后一个block加入到 OssSingleObject.lastBlockBuffer 中,待job阶段合并上传 + if (sb.length() > 0) { + byte[] lastBlock = sw.toString().getBytes(this.encoding); + LOG.info("begin add last block to buffer, last block size: {}", lastBlock.length); + OssSingleObject.addLastBlockBuffer(lastBlock, this.ossWriterProxy, this.blockSizeInByte, this.object, this::getHeaderBytes); + } + } catch (IOException e) { + // 脏数据UnstructuredStorageWriterUtil.transportOneRecord已经记录,header + // 都是字符串不认为有脏数据 + throw DataXException.asDataXException( + OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); + } catch (Exception e) { + throw DataXException.asDataXException( + OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); + } + LOG.info("single oss object end do write"); + } + + private byte[] getHeaderBytes() throws IOException { + if (null != this.header && !this.header.isEmpty()) { + // write header to writer + try (StringWriter sw = new StringWriter(); + UnstructuredWriter headerWriter = UnstructuredStorageWriterUtil. + produceUnstructuredWriter(this.fileFormat, this.writerSliceConfig, sw)) { + headerWriter.writeOneRecord(this.header); + return sw.toString().getBytes(this.encoding); + } + } + return new byte[0]; + } + + /** + * 同步音视频等无结构化文件 + * warn: 代码和startWriteUnstructedStorageFile重复程度太高,后续需要继续重构 + */ + private void startWriteBinaryFile(RecordReceiver lineReceiver) { + Record record; + String currentObject = null; + InitiateMultipartUploadRequest currentInitiateMultipartUploadRequest; + InitiateMultipartUploadResult currentInitiateMultipartUploadResult = null; + String lastUploadId = null; + boolean gotData = false; + List currentPartETags = null; + int currentPartNumber = 1; + Map meta; + + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + long currentSize = 0; + try { + // warn + boolean needInitMultipartTransform = true; + while ((record = lineReceiver.getFromReader()) != null) { + Column column = record.getColumn(0); + meta = record.getMeta(); + assert meta != null; + gotData = true; + String objectNameTmp = meta + .get(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.META_KEY_FILE_PATH); + String fullObjectNameTmp = String.format("%s%s", this.objectDir, objectNameTmp.substring(this.parentPathLength, objectNameTmp.length())); + + // init: 2 condition begin new multipart upload + if (needInitMultipartTransform || !StringUtils.equals(currentObject, fullObjectNameTmp)) { + // 先将上一个分块上传的request complete掉 + if (null != currentInitiateMultipartUploadResult) { + // 如果还有部分分库数据没有提交,则先提交 + if (currentSize > 0) { + this.ossWriterProxy.uploadOnePart(byteArrayOutputStream.toByteArray(), currentPartNumber, + currentInitiateMultipartUploadResult, currentPartETags, currentObject); + currentPartNumber++; + currentSize = 0; + byteArrayOutputStream.reset(); + } + // TODO 如果当前文件是空文件 + String commitKey = currentInitiateMultipartUploadResult.getKey(); + LOG.info(String.format( + "current object [%s] size %s, complete current multipart upload %s and begin new one", + commitKey, currentPartNumber * this.blockSizeInByte, + currentInitiateMultipartUploadResult.getUploadId())); + CompleteMultipartUploadRequest currentCompleteMultipartUploadRequest = new CompleteMultipartUploadRequest( + this.bucket, commitKey, currentInitiateMultipartUploadResult.getUploadId(), + currentPartETags); + CompleteMultipartUploadResult currentCompleteMultipartUploadResult = this.ossWriterProxy.completeMultipartUpload( + currentCompleteMultipartUploadRequest); + lastUploadId = currentInitiateMultipartUploadResult.getUploadId(); + LOG.info(String.format("final object [%s] etag is:[%s]", commitKey, + currentCompleteMultipartUploadResult.getETag())); + } + // 这里发现一个全新的文件需要分块上传 + currentObject = fullObjectNameTmp; + currentInitiateMultipartUploadRequest = this.ossWriterProxy.getInitiateMultipartUploadRequest(currentObject); + currentInitiateMultipartUploadResult = this.ossWriterProxy.initiateMultipartUpload( + currentInitiateMultipartUploadRequest); + currentPartETags = new ArrayList(); + LOG.info(String.format("write to bucket: [%s] object: [%s] with oss uploadId: [%s]", + this.bucket, currentObject, currentInitiateMultipartUploadResult.getUploadId())); + // warn + needInitMultipartTransform = false; + currentPartNumber = 1; + } + // write: upload data to current object + byte[] data; + if (column instanceof BytesColumn) { + data = column.asBytes(); + byteArrayOutputStream.write(data); + currentSize += data.length; + } else { + String message = "the type of column must be BytesColumn!"; + throw DataXException.asDataXException(OssWriterErrorCode.Write_OBJECT_ERROR, message); + } + if (currentSize >= this.blockSizeInByte) { + this.ossWriterProxy.uploadOnePart(byteArrayOutputStream.toByteArray(), currentPartNumber, + currentInitiateMultipartUploadResult, currentPartETags, currentObject); + currentPartNumber++; + currentSize = 0; + byteArrayOutputStream.reset(); + } + } + + // TODO binary 模式读取,源头为空文件时是有问题的 + if (!gotData) { + LOG.info("Receive no data from the source."); + currentInitiateMultipartUploadRequest = new InitiateMultipartUploadRequest(this.bucket, + currentObject); + currentInitiateMultipartUploadResult = this.ossWriterProxy.initiateMultipartUpload( + currentInitiateMultipartUploadRequest); + currentPartETags = new ArrayList(); + } + + // warn: may be some data stall in byteArrayOutputStream + if (byteArrayOutputStream.size() > 0) { + this.ossWriterProxy.uploadOnePart(byteArrayOutputStream.toByteArray(), currentPartNumber, + currentInitiateMultipartUploadResult, currentPartETags, currentObject); + currentPartNumber++; + } + + // 避免重复提交 + if (!StringUtils.equals(lastUploadId, currentInitiateMultipartUploadResult.getUploadId())) { + CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( + this.bucket, currentObject, currentInitiateMultipartUploadResult.getUploadId(), + currentPartETags); + CompleteMultipartUploadResult completeMultipartUploadResult = this.ossWriterProxy.completeMultipartUpload( + completeMultipartUploadRequest); + LOG.info(String.format("final object etag is:[%s]", completeMultipartUploadResult.getETag())); + } + } catch (IOException e) { + // 脏数据UnstructuredStorageWriterUtil.transportOneRecord已经记录,header + // 都是字符串不认为有脏数据 + throw DataXException.asDataXException(OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); + } catch (Exception e) { + throw DataXException.asDataXException(OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); + } + LOG.info("end do write"); + } + + /** + * 开始写半结构化文件 + * + * @param lineReceiver + */ + private void startWriteUnstructedStorageFile(RecordReceiver lineReceiver, boolean generateEmptyFile){ // 设置每块字符串长度 - final long partSize = 1024 * 1024 * 10L; - long numberCacul = (this.maxFileSize * 1024 * 1024L) / partSize; + long numberCacul = (this.maxFileSize * 1024 * 1024L) / this.blockSizeInByte; final long maxPartNumber = numberCacul >= 1 ? numberCacul : 1; int objectRollingNumber = 0; - //warn: may be StringBuffer->StringBuilder - StringWriter sw = new StringWriter(); - StringBuffer sb = sw.getBuffer(); - UnstructuredWriter unstructuredWriter = TextCsvWriterManager - .produceUnstructuredWriter(this.fileFormat, - this.fieldDelimiter, sw); - Record record = null; - - LOG.info(String.format( - "begin do write, each object maxFileSize: [%s]MB...", - maxPartNumber * 10)); + Record record; String currentObject = this.object; - InitiateMultipartUploadRequest currentInitiateMultipartUploadRequest = null; + if (this.isPeer2PeerCopyMode()) { + currentObject = null; + } else { + // 加上suffix + currentObject = appedSuffixTo(currentObject); + } + InitiateMultipartUploadRequest currentInitiateMultipartUploadRequest; InitiateMultipartUploadResult currentInitiateMultipartUploadResult = null; + String lastUploadId = null; boolean gotData = false; List currentPartETags = null; // to do: // 可以根据currentPartNumber做分块级别的重试,InitiateMultipartUploadRequest多次一个currentPartNumber会覆盖原有 int currentPartNumber = 1; + Map meta; + + //warn: may be StringBuffer->StringBuilder + StringWriter sw = new StringWriter(); + StringBuffer sb = sw.getBuffer(); + UnstructuredWriter unstructuredWriter = UnstructuredStorageWriterUtil. + produceUnstructuredWriter(this.fileFormat, this.writerSliceConfig, sw); + LOG.info(String.format( + "begin do write, each object maxFileSize: [%s]MB...", + maxPartNumber * 10)); try { - // warn + // warn 源头可能是MySQL中,导致没有meta这个第一次初始化标示省不掉 boolean needInitMultipartTransform = true; while ((record = lineReceiver.getFromReader()) != null) { + meta = record.getMeta(); gotData = true; - // init:begin new multipart upload - if (needInitMultipartTransform) { - if (objectRollingNumber == 0) { - if (StringUtils.isBlank(this.suffix)) { - currentObject = this.object; - } else { - currentObject = String.format("%s%s", - this.object, this.suffix); - } - } else { - // currentObject is like(no suffix) - // myfile__9b886b70fbef11e59a3600163e00068c_1 - if (StringUtils.isBlank(this.suffix)) { - currentObject = String.format("%s_%s", - this.object, objectRollingNumber); - } else { - // or with suffix - // myfile__9b886b70fbef11e59a3600163e00068c_1.csv - currentObject = String.format("%s_%s%s", - this.object, objectRollingNumber, - this.suffix); - } + // init: 2 condition begin new multipart upload 轮转策略(文件名规则)不一致 + // condition: 对等拷贝模式 && Record中的Meta切换文件名 && + // condition: 类log4j日志轮转 && !对等拷贝模式 + boolean realyNeedInitUploadRequest = false; + if (this.isPeer2PeerCopyMode()) { + assert meta != null; + String objectNameTmp = meta + .get(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.META_KEY_FILE_PATH); + String fullObjectNameTmp = String.format("%s%s", this.objectDir, objectNameTmp.substring(this.parentPathLength, objectNameTmp.length())); + if (!StringUtils.equals(currentObject, fullObjectNameTmp)) { + currentObject = fullObjectNameTmp; + realyNeedInitUploadRequest = true; } - objectRollingNumber++; - currentInitiateMultipartUploadRequest = new InitiateMultipartUploadRequest( - this.bucket, currentObject); - currentInitiateMultipartUploadResult = this.ossClient - .initiateMultipartUpload(currentInitiateMultipartUploadRequest); + } else { + if (needInitMultipartTransform || currentPartNumber > maxPartNumber) { + currentObject = getCurrentObject(objectRollingNumber, record); + objectRollingNumber++; + realyNeedInitUploadRequest = true; + } + } + + if (realyNeedInitUploadRequest) { + // 先将上一个分块上传的request complete掉 + if (null != currentInitiateMultipartUploadResult) { + if (sb.length() > 0) { + this.uploadOnePart(sw, currentPartNumber, currentInitiateMultipartUploadResult, + currentPartETags, currentObject); + currentPartNumber++; + sb.setLength(0); + } + // TODO 如果当前文件是空文件 + String commitKey = currentInitiateMultipartUploadResult.getKey(); + LOG.info(String.format( + "current object [%s] size %s, complete current multipart upload %s and begin new one", + commitKey, currentPartNumber * this.blockSizeInByte, + currentInitiateMultipartUploadResult.getUploadId())); + CompleteMultipartUploadRequest currentCompleteMultipartUploadRequest = new CompleteMultipartUploadRequest( + this.bucket, commitKey, currentInitiateMultipartUploadResult.getUploadId(), + currentPartETags); + CompleteMultipartUploadResult currentCompleteMultipartUploadResult = this.ossWriterProxy.completeMultipartUpload( + currentCompleteMultipartUploadRequest); + lastUploadId = currentInitiateMultipartUploadResult.getUploadId(); + LOG.info(String.format("final object [%s] etag is:[%s]", commitKey, + currentCompleteMultipartUploadResult.getETag())); + } + + currentInitiateMultipartUploadRequest = this.ossWriterProxy.getInitiateMultipartUploadRequest(currentObject); + currentInitiateMultipartUploadResult = this.ossWriterProxy.initiateMultipartUpload(currentInitiateMultipartUploadRequest); currentPartETags = new ArrayList(); LOG.info(String .format("write to bucket: [%s] object: [%s] with oss uploadId: [%s]", @@ -365,43 +1014,22 @@ public class OssWriter extends Writer { // write: upload data to current object UnstructuredStorageWriterUtil.transportOneRecord(record, this.nullFormat, this.dateParse, - this.getTaskPluginCollector(), unstructuredWriter); + this.getTaskPluginCollector(), unstructuredWriter, this.byteEncoding); - if (sb.length() >= partSize) { + if (sb.length() >= this.blockSizeInByte) { this.uploadOnePart(sw, currentPartNumber, currentInitiateMultipartUploadResult, currentPartETags, currentObject); currentPartNumber++; sb.setLength(0); } - - // save: end current multipart upload - if (currentPartNumber > maxPartNumber) { - LOG.info(String - .format("current object [%s] size > %s, complete current multipart upload and begin new one", - currentObject, currentPartNumber - * partSize)); - CompleteMultipartUploadRequest currentCompleteMultipartUploadRequest = new CompleteMultipartUploadRequest( - this.bucket, currentObject, - currentInitiateMultipartUploadResult - .getUploadId(), currentPartETags); - CompleteMultipartUploadResult currentCompleteMultipartUploadResult = this.ossClient - .completeMultipartUpload(currentCompleteMultipartUploadRequest); - LOG.info(String.format( - "final object [%s] etag is:[%s]", - currentObject, - currentCompleteMultipartUploadResult.getETag())); - // warn - needInitMultipartTransform = true; - } } if (!gotData) { LOG.info("Receive no data from the source."); currentInitiateMultipartUploadRequest = new InitiateMultipartUploadRequest( this.bucket, currentObject); - currentInitiateMultipartUploadResult = this.ossClient - .initiateMultipartUpload(currentInitiateMultipartUploadRequest); + currentInitiateMultipartUploadResult = this.ossWriterProxy.initiateMultipartUpload(currentInitiateMultipartUploadRequest); currentPartETags = new ArrayList(); // each object's header if (null != this.header && !this.header.isEmpty()) { @@ -414,81 +1042,145 @@ public class OssWriter extends Writer { currentInitiateMultipartUploadResult, currentPartETags, currentObject); } - CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( - this.bucket, currentObject, - currentInitiateMultipartUploadResult.getUploadId(), - currentPartETags); - CompleteMultipartUploadResult completeMultipartUploadResult = this.ossClient - .completeMultipartUpload(completeMultipartUploadRequest); - LOG.info(String.format("final object etag is:[%s]", - completeMultipartUploadResult.getETag())); + + // 避免重复提交 + if (!StringUtils.equals(lastUploadId, currentInitiateMultipartUploadResult.getUploadId())) { + CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( + this.bucket, currentObject, + currentInitiateMultipartUploadResult.getUploadId(), + currentPartETags); + if (gotData) { + completeUpload(completeMultipartUploadRequest); + } else{ + if (generateEmptyFile) { + LOG.info("Due to without data, oss will generate empty file, " + + "the generateEmptyFile is {}, you can set it false to avoid this",generateEmptyFile); + completeUpload(completeMultipartUploadRequest); + } else { + LOG.info("The generateEmptyFile is false, datax will not generate empty file"); + } + } + } } catch (IOException e) { // 脏数据UnstructuredStorageWriterUtil.transportOneRecord已经记录,header // 都是字符串不认为有脏数据 throw DataXException.asDataXException( - OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage()); + OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); } catch (Exception e) { throw DataXException.asDataXException( - OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage()); + OssWriterErrorCode.Write_OBJECT_ERROR, e.getMessage(), e); } LOG.info("end do write"); } + private void completeUpload(CompleteMultipartUploadRequest completeMultipartUploadRequest) throws Exception { + CompleteMultipartUploadResult completeMultipartUploadResult = this.ossWriterProxy.completeMultipartUpload(completeMultipartUploadRequest); + LOG.info(String.format("final object etag is:[%s]", + completeMultipartUploadResult.getETag())); + } + + + private String getCurrentObject(int objectRollingNumber, Record record) { + String currentObject = this.object; + + if (!this.partition.isEmpty()) { + String partitionValues = getPartitionValues(record); + currentObject = String.format("%s_%s", currentObject, partitionValues); + } + + if (objectRollingNumber > 0) { + currentObject = String.format("%s_%s", currentObject, objectRollingNumber); + } + + currentObject = appedSuffixTo(currentObject); + + return currentObject; + } + + private String getPartitionValues(Record record) { + // config like "partition": "ds,venture" + String partitionValues = ""; + // assume that partition columns are located in the last of order + for (int i = 0; i < this.partition.size(); i++) { + partitionValues += record.getColumn(record.getColumnNumber() - 1 - i).asString(); + } + return partitionValues; + } + + private String appedSuffixTo(String currentObject) { + StringBuilder sbCurrentObject = new StringBuilder(currentObject); + + if (StringUtils.isNotBlank(this.suffix)) { + if (!this.suffix.startsWith(".")) { + sbCurrentObject.append("."); + } + sbCurrentObject.append(suffix); + } + + return sbCurrentObject.toString(); + } + /** * 对于同一个UploadID,该号码不但唯一标识这一块数据,也标识了这块数据在整个文件内的相对位置。 * 如果你用同一个part号码,上传了新的数据,那么OSS上已有的这个号码的Part数据将被覆盖。 - * + * * @throws Exception * */ private void uploadOnePart( final StringWriter sw, final int partNumber, - final InitiateMultipartUploadResult initiateMultipartUploadResult, + final InitiateMultipartUploadResult currentInitiateMultipartUploadResult, final List partETags, final String currentObject) throws Exception { final String encoding = this.encoding; - final String bucket = this.bucket; - final OSSClient ossClient = this.ossClient; - RetryUtil.executeWithRetry(new Callable() { - @Override - public Boolean call() throws Exception { - byte[] byteArray = sw.toString().getBytes(encoding); - InputStream inputStream = new ByteArrayInputStream( - byteArray); - // 创建UploadPartRequest,上传分块 - UploadPartRequest uploadPartRequest = new UploadPartRequest(); - uploadPartRequest.setBucketName(bucket); - uploadPartRequest.setKey(currentObject); - uploadPartRequest.setUploadId(initiateMultipartUploadResult - .getUploadId()); - uploadPartRequest.setInputStream(inputStream); - uploadPartRequest.setPartSize(byteArray.length); - uploadPartRequest.setPartNumber(partNumber); - UploadPartResult uploadPartResult = ossClient - .uploadPart(uploadPartRequest); - partETags.add(uploadPartResult.getPartETag()); - LOG.info(String - .format("upload part [%s] size [%s] Byte has been completed.", - partNumber, byteArray.length)); - IOUtils.closeQuietly(inputStream); - return true; - } - }, 3, 1000L, false); + final byte[] byteArray = sw.toString().getBytes(encoding); + this.ossWriterProxy.uploadOnePart(byteArray, partNumber, currentInitiateMultipartUploadResult, partETags, currentObject); } @Override public void prepare() { - + if(useHdfsWriterProxy){ + hdfsWriterTask.prepare(); + return; + } } @Override public void post() { - + if(useHdfsWriterProxy){ + hdfsWriterTask.post(); + return; + } } @Override public void destroy() { + if(useHdfsWriterProxy){ + hdfsWriterTask.destroy(); + return; + } + try { + // this.ossClient.shutdown(); + } catch (Exception e) { + LOG.warn("shutdown ossclient meet a exception:" + e.getMessage(), e); + } + } + private boolean isPeer2PeerCopyMode() { + return this.isBinaryFile + || com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.SYNC_MODE_VALUE_COPY + .equalsIgnoreCase(this.syncMode); + } + + private String getObjectDir(String object) { + String dir = null; + if (StringUtils.isBlank(object)) { + dir = ""; + } else { + dir = object.trim(); + dir = dir.endsWith("/") ? dir : String.format("%s/", dir); + } + return dir; } } } diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriterProxy.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriterProxy.java new file mode 100644 index 00000000..45516f73 --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/OssWriterProxy.java @@ -0,0 +1,171 @@ +package com.alibaba.datax.plugin.writer.osswriter; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.RetryUtil; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.*; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.List; +import java.util.concurrent.Callable; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:29 + */ +public class OssWriterProxy { + private static Logger logger = LoggerFactory.getLogger(OssWriterProxy.class); + + private OSSClient ossClient; + private Configuration configuration; + /** + * 是否在服务器端进行加密存储 + */ + private Boolean encrypt; + private String bucket; + + + public OssWriterProxy (Configuration configuration, OSSClient ossClient) { + this.configuration = configuration; + this.ossClient = ossClient; + this.encrypt = configuration.getBool(Key.ENCRYPT, false); + this.bucket = configuration.getString(Key.BUCKET); + } + + public InitiateMultipartUploadRequest getInitiateMultipartUploadRequest(String currentObject){ + InitiateMultipartUploadRequest currentInitiateMultipartUploadRequest; + if( !this.encrypt ) { + currentInitiateMultipartUploadRequest = new InitiateMultipartUploadRequest( + this.bucket, currentObject); + } else { + // 将数据加密存储在oss + ObjectMetadata objectMetadata = new ObjectMetadata(); + objectMetadata.setHeader("x-oss-server-side-encryption", + ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); + currentInitiateMultipartUploadRequest = new InitiateMultipartUploadRequest( + this.bucket, currentObject, objectMetadata); + } + return currentInitiateMultipartUploadRequest; + } + + public InitiateMultipartUploadResult initiateMultipartUpload( + final InitiateMultipartUploadRequest currentInitiateMultipartUploadRequest) throws Exception { + final OSSClient ossClient = this.ossClient; + return RetryUtil.executeWithRetry(new Callable() { + @Override + public InitiateMultipartUploadResult call() throws Exception { + return ossClient.initiateMultipartUpload(currentInitiateMultipartUploadRequest); + } + }, 10, 1000L, false); + } + + public CompleteMultipartUploadResult completeMultipartUpload( + final CompleteMultipartUploadRequest currentCompleteMultipartUploadRequest) throws Exception { + + final OSSClient ossClient = this.ossClient; + return RetryUtil.executeWithRetry(new Callable() { + @Override + public CompleteMultipartUploadResult call() throws Exception { + return ossClient.completeMultipartUpload(currentCompleteMultipartUploadRequest); + } + }, 10, 1000L, false); + } + + public void uploadOnePart( + final byte[] byteArray, + final int partNumber, + final InitiateMultipartUploadResult currentInitiateMultipartUploadResult, + final List partETags, + final String currentObject) + throws Exception { + final String bucket = this.bucket; + final OSSClient ossClient = this.ossClient; + RetryUtil.executeWithRetry(new Callable() { + @Override + public Boolean call() throws Exception { + InputStream inputStream = new ByteArrayInputStream( + byteArray); + // 创建UploadPartRequest,上传分块 + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setBucketName(bucket); + uploadPartRequest.setKey(currentObject); + uploadPartRequest.setUploadId(currentInitiateMultipartUploadResult.getUploadId()); + uploadPartRequest.setInputStream(inputStream); + uploadPartRequest.setPartSize(byteArray.length); + uploadPartRequest.setPartNumber(partNumber); + UploadPartResult uploadPartResult = ossClient + .uploadPart(uploadPartRequest); + partETags.add(uploadPartResult.getPartETag()); + logger.info(String + .format("upload part [%s] size [%s] Byte has been completed.", + partNumber, byteArray.length)); + IOUtils.closeQuietly(inputStream); + return true; + } + }, 10, 1000L, false); + } + + public void abortMultipartUpload(final String currentObject, final String uploadId) { + final String bucket = this.bucket; + final OSSClient ossClient = this.ossClient; + try { + RetryUtil.executeWithRetry((Callable) () -> { + AbortMultipartUploadRequest abortMultipartUploadRequest = + new AbortMultipartUploadRequest(bucket, currentObject, uploadId); + ossClient.abortMultipartUpload(abortMultipartUploadRequest); + return null; + }, 5, 1, true); + } catch (Throwable e) { + logger.error(String.format("AbortMultipartUpload failed, msg is %s",e.getMessage()), e); + } + } + + public void uploadOnePartForSingleObject( + final byte[] byteArray, + final String uploadId, + final List partETags, + final String currentObject, + final HeaderProvider headerProvider) + throws Exception { + final String bucket = this.bucket; + final OSSClient ossClient = this.ossClient; + RetryUtil.executeWithRetry(new Callable() { + @Override + public Boolean call() throws Exception { + // 创建UploadPartRequest,上传分块 + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setPartNumber(OssSingleObject.currentPartNumber.getAndIncrement()); + byte[] data = byteArray; + if (uploadPartRequest.getPartNumber() == 1) { + // write header + byte[] headerBytes = headerProvider.getHeader(); + logger.info("write header to part {}. header size: {}", + uploadPartRequest.getPartNumber(), ArrayUtils.getLength(headerBytes)); + data = ArrayUtils.addAll(headerBytes, byteArray); + } + ByteArrayInputStream inputStream = new ByteArrayInputStream(data); + uploadPartRequest.setBucketName(bucket); + uploadPartRequest.setKey(currentObject); + uploadPartRequest.setUploadId(uploadId); + uploadPartRequest.setInputStream(inputStream); + uploadPartRequest.setPartSize(data.length); + UploadPartResult uploadPartResult = ossClient + .uploadPart(uploadPartRequest); + partETags.add(uploadPartResult.getPartETag()); + logger.info("upload part number [{}] size [{}] Byte has been completed, uploadId: {}.", + uploadPartRequest.getPartNumber(), data.length, uploadId); + IOUtils.closeQuietly(inputStream); + return true; + } + }, 10, 1000L, false); + } + + public interface HeaderProvider { + byte[] getHeader() throws Exception; + } +} diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileProccessor.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileProccessor.java new file mode 100644 index 00000000..c88a6f10 --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileProccessor.java @@ -0,0 +1,49 @@ +package com.alibaba.datax.plugin.writer.osswriter.parquet; + +import org.apache.hadoop.fs.Path; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; + +import parquet.hadoop.ParquetWriter; +import parquet.hadoop.metadata.CompressionCodecName; +import parquet.schema.MessageType; + +import java.io.IOException; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:23 + */ +public class ParquetFileProccessor extends ParquetWriter { + private Path path; + + public ParquetFileProccessor(Path path, MessageType schema, Configuration taskConfig, + TaskPluginCollector taskPluginCollector) throws IOException { + this(path, schema, false, taskConfig, taskPluginCollector); + this.path = path; + } + + public ParquetFileProccessor(Path path, MessageType schema, boolean enableDictionary, Configuration taskConfig, + TaskPluginCollector taskPluginCollector) throws IOException { + this(path, schema, CompressionCodecName.UNCOMPRESSED, enableDictionary, taskConfig, taskPluginCollector); + this.path = path; + } + + public ParquetFileProccessor(Path path, MessageType schema, CompressionCodecName codecName, + boolean enableDictionary, Configuration taskConfig, TaskPluginCollector taskPluginCollector) + throws IOException { + super(path, new ParquetFileSupport(schema, taskConfig, taskPluginCollector), codecName, DEFAULT_BLOCK_SIZE, + DEFAULT_PAGE_SIZE, enableDictionary, false); + this.path = path; + } + + public byte[] getParquetRawData() { + if (null == this.path) { + return null; + } else { + return null; + } + } +} diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileSupport.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileSupport.java new file mode 100644 index 00000000..9daa5a7f --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/parquet/ParquetFileSupport.java @@ -0,0 +1,355 @@ +package com.alibaba.datax.plugin.writer.osswriter.parquet; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.plugin.unstructuredstorage.writer.Key; +import com.alibaba.datax.plugin.writer.osswriter.Constant; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.conf.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import parquet.hadoop.api.WriteSupport; +import parquet.io.api.Binary; +import parquet.io.api.RecordConsumer; +import parquet.schema.*; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:25 + */ +public class ParquetFileSupport extends WriteSupport { + public static final Logger LOGGER = LoggerFactory.getLogger(ParquetFileSupport.class); + private MessageType schema; + private RecordConsumer recordConsumer; + private boolean printStackTrace = true; + + // 不通类型的nullFormat + private String nullFormat; + + private String dateFormat; + private DateFormat dateParse; + private Binary binaryForNull; + private TaskPluginCollector taskPluginCollector; + + public ParquetFileSupport(MessageType schema, com.alibaba.datax.common.util.Configuration taskConfig, TaskPluginCollector taskPluginCollector) { + this.schema = schema; + // 不通类型的nullFormat + this.nullFormat = taskConfig.getString(Key.NULL_FORMAT, Constant.DEFAULT_NULL_FORMAT); + this.binaryForNull = Binary.fromString(this.nullFormat); + + this.dateFormat = taskConfig.getString(Key.DATE_FORMAT, null); + if (StringUtils.isNotBlank(this.dateFormat)) { + this.dateParse = new SimpleDateFormat(dateFormat); + } + + this.taskPluginCollector = taskPluginCollector; + } + + @Override + public WriteContext init(Configuration configuration) { + return new WriteContext(schema, new HashMap()); + } + + @Override + public void prepareForWrite(RecordConsumer recordConsumer) { + this.recordConsumer = recordConsumer; + } + + @Override + public void write(Record values) { + LOGGER.info("Writing parquet data using fields mode(The correct mode.)"); + List types = this.schema.getFields(); + if (values != null && types != null && values.getColumnNumber() == types.size()) { + recordConsumer.startMessage(); + writeFields(types, values); + recordConsumer.endMessage(); + } + } + + private void writeFields(List types, Record values) { + for (int i = 0; i < types.size(); i++) { + Type type = types.get(i); + Column value = values.getColumn(i); + if (value != null) { + try { + if (type.isPrimitive()) { + writePrimitiveType(type, value, i); + } else { + writeGroupType(type, (JSON) JSON.parse(value.asString()), i); + } + } catch (Exception e) { + if (printStackTrace) { + printStackTrace = false; + LOGGER.warn("write to parquet error: {}", e.getMessage(), e); + } + // dirty data + if (null != this.taskPluginCollector) { + // job post 里面的merge taskPluginCollector 为null + this.taskPluginCollector.collectDirtyRecord(values, e, e.getMessage()); + } + } + } + } + } + + private void writeFields(List types, JSONObject values) { + for (int i = 0; i < types.size(); i++) { + Type type = types.get(i); + Object value = values.get(type.getName()); + + if (value != null) { + try { + if (type.isPrimitive()) { + writePrimitiveType(type, value, i); + } else { + writeGroupType(type, (JSON) value, i); + } + } catch (Exception e) { + if (printStackTrace) { + printStackTrace = false; + LOGGER.warn("write to parquet error: {}", e.getMessage(), e); + } + } + } else { + recordConsumer.addBinary(this.binaryForNull); + } + } + } + + private void writeGroupType(Type type, JSON value, int index) { + GroupType groupType = type.asGroupType(); + OriginalType originalType = groupType.getOriginalType(); + if (originalType != null) { + switch (originalType) { + case MAP: + writeMap(groupType, value, index); + break; + case LIST: + writeList(groupType, value, index); + break; + default: + break; + } + } else { + // struct + writeStruct(groupType, value, index); + } + } + + private void writeMap(GroupType groupType, JSON value, int index) { + if (value == null) { + return; + } + + JSONObject json = (JSONObject) value; + + if (json.isEmpty()) { + return; + } + + recordConsumer.startField(groupType.getName(), index); + + recordConsumer.startGroup(); + + // map + // key_value start + recordConsumer.startField("key_value", 0); + recordConsumer.startGroup(); + + List keyValueFields = groupType.getFields().get(0).asGroupType().getFields(); + Type keyType = keyValueFields.get(0); + Type valueType = keyValueFields.get(1); + for (String key : json.keySet()) { + // key + writePrimitiveType(keyType, key, 0); + + // value + if (valueType.isPrimitive()) { + writePrimitiveType(valueType, json.get(key), 1); + } else { + writeGroupType(valueType, (JSON) json.get(key), 1); + } + } + + recordConsumer.endGroup(); + recordConsumer.endField("key_value", 0); + // key_value end + + recordConsumer.endGroup(); + recordConsumer.endField(groupType.getName(), index); + } + + private void writeList(GroupType groupType, JSON value, int index) { + if (value == null) { + return; + } + + JSONArray json = (JSONArray) value; + + if (json.isEmpty()) { + return; + } + + recordConsumer.startField(groupType.getName(), index); + // list + recordConsumer.startGroup(); + + + // list start + recordConsumer.startField("list", 0); + recordConsumer.startGroup(); + + Type elementType = groupType.getFields().get(0).asGroupType().getFields().get(0); + + if (elementType.isPrimitive()) { + for (Object elementValue : json) { + writePrimitiveType(elementType, elementValue, 0); + } + } else { + for (Object elementValue : json) { + writeGroupType(elementType, (JSON) elementValue, 0); + } + } + + recordConsumer.endGroup(); + recordConsumer.endField("list", 0); + // list end + recordConsumer.endGroup(); + + recordConsumer.endField(groupType.getName(), index); + } + + private void writeStruct(GroupType groupType, JSON value, int index) { + if (value == null) { + return; + } + JSONObject json = (JSONObject) value; + if (json.isEmpty()) { + return; + } + + recordConsumer.startField(groupType.getName(), index); + // struct start + recordConsumer.startGroup(); + + writeFields(groupType.getFields(), json); + recordConsumer.endGroup(); + // struct end + recordConsumer.endField(groupType.getName(), index); + } + + private void writePrimitiveType(Type type, Object value, int index) { + if (value == null) { + return; + } + + recordConsumer.startField(type.getName(), index); + PrimitiveType primitiveType = type.asPrimitiveType(); + + switch (primitiveType.getPrimitiveTypeName()) { + case BOOLEAN: + recordConsumer.addBoolean((Boolean) value); + break; + case FLOAT: + if (value instanceof Float) { + recordConsumer.addFloat(((Float) value).floatValue()); + } else if (value instanceof Double) { + recordConsumer.addFloat(((Double) value).floatValue()); + } else if (value instanceof Long) { + recordConsumer.addFloat(((Long) value).floatValue()); + } else if (value instanceof Integer) { + recordConsumer.addFloat(((Integer) value).floatValue()); + } + break; + case DOUBLE: + if (value instanceof Float) { + recordConsumer.addDouble(((Float) value).doubleValue()); + } else if (value instanceof Double) { + recordConsumer.addDouble(((Double) value).doubleValue()); + } else if (value instanceof Long) { + recordConsumer.addDouble(((Long) value).doubleValue()); + } else if (value instanceof Integer) { + recordConsumer.addDouble(((Integer) value).doubleValue()); + } + break; + case INT32: + if (value instanceof Integer) { + recordConsumer.addInteger((Integer) value); + } else if (value instanceof Long) { + recordConsumer.addInteger(((Long) value).intValue()); + } else { + new IllegalArgumentException( + String.format("Invalid value: %s(clazz: %s) for field: %s", value, value.getClass(), type.getName()) + ); + } + break; + case INT64: + case INT96: + if (value instanceof Integer) { + recordConsumer.addLong(((Integer) value).longValue()); + } else if (value instanceof Long) { + recordConsumer.addInteger(((Long) value).intValue()); + } else { + new IllegalArgumentException( + String.format("Invalid value: %s(clazz: %s) for field: %s", value, value.getClass(), type.getName()) + ); + } + break; + case BINARY: + default: + recordConsumer.addBinary(Binary.fromString((String) value)); + break; + } + recordConsumer.endField(type.getName(), index); + } + + private void writePrimitiveType(Type type, Column value, int index) { + if (value == null || value.getRawData() == null) { + return; + } + + recordConsumer.startField(type.getName(), index); + PrimitiveType primitiveType = type.asPrimitiveType(); + switch (primitiveType.getPrimitiveTypeName()) { + case BOOLEAN: + recordConsumer.addBoolean(value.asBoolean()); + break; + case FLOAT: + recordConsumer.addFloat(value.asDouble().floatValue()); + break; + case DOUBLE: + recordConsumer.addDouble(value.asDouble()); + break; + case INT32: + recordConsumer.addInteger(value.asLong().intValue()); + break; + case INT64: + case INT96: + recordConsumer.addLong(value.asLong()); + break; + case BINARY: + String valueAsString2Write = null; + if (Column.Type.DATE == value.getType() && null != this.dateParse) { + valueAsString2Write = dateParse.format(value.asDate()); + } + else { + valueAsString2Write = value.asString(); + } + recordConsumer.addBinary(Binary.fromString(valueAsString2Write)); + break; + default: + recordConsumer.addBinary(Binary.fromString(value.asString())); + break; + } + recordConsumer.endField(type.getName(), index); + } +} diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HandlerUtil.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HandlerUtil.java new file mode 100644 index 00000000..488c119c --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HandlerUtil.java @@ -0,0 +1,38 @@ +package com.alibaba.datax.plugin.writer.osswriter.util; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.core.util.container.CoreConstant; +import com.alibaba.datax.plugin.writer.osswriter.Key; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:35 + */ +public class HandlerUtil { + + private static final Logger LOG = LoggerFactory.getLogger(HandlerUtil.class); + + /** + * 将configuration处理成 ODPS->OSS的 config + * + * @param jobConfiguration + */ + public static void preHandler(Configuration jobConfiguration) { + LOG.info("================ OssWriter Phase 1 preHandler starting... ================ "); + Configuration writerOriginPluginConf = jobConfiguration.getConfiguration( + CoreConstant.DATAX_JOB_CONTENT_WRITER_PARAMETER); + Configuration writerOssPluginConf = writerOriginPluginConf.getConfiguration(Key.OSS_CONFIG); + Configuration newWriterPluginConf = Configuration.newDefault(); + jobConfiguration.remove(CoreConstant.DATAX_JOB_CONTENT_WRITER_PARAMETER); + //将postgresqlwriter的pg配置注入到postgresqlConfig中, 供后面的postHandler使用 + writerOriginPluginConf.remove(Key.OSS_CONFIG); + newWriterPluginConf.set(Key.POSTGRESQL_CONFIG, writerOriginPluginConf); + newWriterPluginConf.merge(writerOssPluginConf, true); + //设置writer的名称为osswriter + jobConfiguration.set(CoreConstant.DATAX_JOB_CONTENT_WRITER_NAME, "osswriter"); + jobConfiguration.set(CoreConstant.DATAX_JOB_CONTENT_WRITER_PARAMETER, newWriterPluginConf); + LOG.info("================ OssWriter Phase 1 preHandler end... ================ "); + } +} diff --git a/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HdfsParquetUtil.java b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HdfsParquetUtil.java new file mode 100644 index 00000000..ccd3aa35 --- /dev/null +++ b/osswriter/src/main/java/com/alibaba/datax/plugin/writer/osswriter/util/HdfsParquetUtil.java @@ -0,0 +1,145 @@ +package com.alibaba.datax.plugin.writer.osswriter.util; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.hdfswriter.HdfsWriter; +import com.alibaba.datax.plugin.writer.osswriter.Key; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem; +import org.apache.hadoop.mapred.JobConf; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:35 + */ +public class HdfsParquetUtil { + + + private static final Logger logger = LoggerFactory.getLogger(HdfsParquetUtil.class); + + public static boolean isUseHdfsWriterProxy( String fileFormat){ + if("orc".equalsIgnoreCase(fileFormat) || "parquet".equalsIgnoreCase(fileFormat)){ + return true; + } + return false; + } + + /** + * 配置writerSliceConfig 适配hdfswriter写oss parquet + * https://help.aliyun.com/knowledge_detail/74344.html + * @param hdfsWriterJob + * @param writerSliceConfig + */ + public static void adaptConfiguration(HdfsWriter.Job hdfsWriterJob, Configuration writerSliceConfig){ + String fileFormat = writerSliceConfig.getString( + com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT, + com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.FILE_FORMAT_TEXT); + + String bucket = writerSliceConfig.getString(Key.BUCKET); + String fs =String.format("oss://%s",bucket); + writerSliceConfig.set(com.alibaba.datax.plugin.writer.hdfswriter.Key.DEFAULT_FS,fs); + writerSliceConfig.set(com.alibaba.datax.plugin.writer.hdfswriter.Key.FILE_TYPE, + writerSliceConfig.getString(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_FORMAT)); + + /** + * "writeMode"、 "compress"、"encoding" 、path、fileName 相互一致 + */ + JSONObject hadoopConfig = new JSONObject(); + hadoopConfig.put(Key.FS_OSS_ACCESSID,writerSliceConfig.getString(Key.ACCESSID)); + hadoopConfig.put(Key.FS_OSS_ACCESSKEY,writerSliceConfig.getString(Key.ACCESSKEY)); + hadoopConfig.put(Key.FS_OSS_ENDPOINT,writerSliceConfig.getString(Key.ENDPOINT)); + writerSliceConfig.set(Key.HDOOP_CONFIG,Configuration.from(JSON.toJSONString(hadoopConfig))); + + String object = writerSliceConfig.getString(Key.OBJECT); + String path = writerSliceConfig.getString(Key.PATH); + String fielName = writerSliceConfig.getString(Key.FILE_NAME); + + if (StringUtils.isNotBlank(object) && (StringUtils.isNotBlank(path) || StringUtils.isNotBlank(fielName))) { + logger.warn("You configure both the \"object\" property and the \"path\" or \"fileName\" property, ignoring the object property. " + + "It is recommended to remove the \"path\" or \"fileName\" attribute, which has been deprecated."); + } + + //兼容之前配置了PATH的datax任务, 如果已经配置了PATH,则无需从object里解析 + if (StringUtils.isBlank(path)) { + Validate.notBlank(object, "object can't be blank!"); + writerSliceConfig.set(Key.PATH, getPathAndFileNameFromObject(object.trim()).get(Key.PATH)); + } + //兼容之前配置了fileName的datax任务,如果已经配置了fileName,则无需从object里解析 + if (StringUtils.isBlank(fielName)) { + Validate.notBlank(object, "object can't be blank!"); + writerSliceConfig.set(Key.FILE_NAME, getPathAndFileNameFromObject(object.trim()).get(Key.FILE_NAME)); + } + if (StringUtils.equalsIgnoreCase(fileFormat, "parquet")) { + hdfsWriterJob.unitizeParquetConfig(writerSliceConfig); + } + + } + + + + /** + * 从object中 解析出 path和fileName + * + * 举例1: + * /hello/aaa/bbb/ccc.txt + * path: /hello/aaa/bbb + * fileName: ccc.txt + * + * 举例2: + * hello/aaa/bbb/ccc.txt + * path: /hello/aaa/bbb + * fileName: ccc.txt + * + * 举例3: + * ccc.txt + * path: / + * fileName: ccc.txt + * + * 举例4: + * /ccc.txt + * path: / + * fileName: ccc.txt + * + * @param object + * @return + */ + public static Map getPathAndFileNameFromObject(String object) { + Map pathAndFileName = new HashMap<>(); + + boolean isContainsBackslash = object.contains("/"); + + //object里没有包含"/", 则将path设置为 "/", fileName设置为 object + if (!isContainsBackslash) { + pathAndFileName.put(Key.PATH, "/"); + pathAndFileName.put(Key.FILE_NAME, object); + return pathAndFileName; + } + + if (!object.startsWith("/")) { + object = "/" + object; + } + + int lastIndex = object.lastIndexOf("/"); + String path = object.substring(0, lastIndex); + String fileName = object.substring(lastIndex + 1); + + path = StringUtils.isNotBlank(path) ? path : "/"; + + logger.info("path: {}", path); + logger.info("fileName: {}", fileName); + + pathAndFileName.put(Key.PATH, path); + pathAndFileName.put(Key.FILE_NAME, fileName); + return pathAndFileName; + } +} diff --git a/otsreader/pom.xml b/otsreader/pom.xml index bd017423..eaac8804 100644 --- a/otsreader/pom.xml +++ b/otsreader/pom.xml @@ -10,6 +10,17 @@ otsreader + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -34,6 +45,16 @@ com.aliyun.openservices ots-public 2.2.4 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/otsstreamreader/pom.xml b/otsstreamreader/pom.xml index 2a12872f..cb4a6206 100644 --- a/otsstreamreader/pom.xml +++ b/otsstreamreader/pom.xml @@ -13,6 +13,17 @@ 0.0.1 + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -33,6 +44,16 @@ com.aliyun.openservices tablestore-streamclient 1.0.0 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/otsstreamreader/src/main/resources/plugin.json b/otsstreamreader/src/main/resources/plugin.json index 9a70a47a..57071d6f 100644 --- a/otsstreamreader/src/main/resources/plugin.json +++ b/otsstreamreader/src/main/resources/plugin.json @@ -2,5 +2,5 @@ "name": "otsstreamreader", "class": "com.alibaba.datax.plugin.reader.otsstreamreader.internal.OTSStreamReader", "description": "", - "developer": "zhaofeng.zhou@alibaba-inc.com" + "developer": "alibaba" } diff --git a/otswriter/pom.xml b/otswriter/pom.xml index 8677c8ab..cb255e1f 100644 --- a/otswriter/pom.xml +++ b/otswriter/pom.xml @@ -10,6 +10,17 @@ otswriter + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + com.alibaba.datax datax-common @@ -34,6 +45,16 @@ com.aliyun.openservices ots-public 2.2.4 + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + com.google.code.gson diff --git a/package.xml b/package.xml index 882dd23b..456f780c 100755 --- a/package.xml +++ b/package.xml @@ -131,6 +131,13 @@ datax + + tdenginereader/target/datax/ + + **/*.* + + datax + streamreader/target/datax/ @@ -180,6 +187,34 @@ datax + + gdbreader/target/datax/ + + **/*.* + + datax + + + hbase11xsqlreader/target/datax/ + + **/*.* + + datax + + + hbase20xsqlreader/target/datax/ + + **/*.* + + datax + + + tsdbreader/target/datax/ + + **/*.* + + datax + @@ -189,6 +224,13 @@ datax + + tdenginewriter/target/datax/ + + **/*.* + + datax + drdswriter/target/datax/ @@ -322,13 +364,6 @@ datax - - hbase11xsqlreader/target/datax/ - - **/*.* - - datax - elasticsearchwriter/target/datax/ @@ -336,13 +371,6 @@ datax - - hbase20xsqlreader/target/datax/ - - **/*.* - - datax - hbase20xsqlwriter/target/datax/ @@ -392,5 +420,26 @@ datax + + gdbwriter/target/datax/ + + **/*.* + + datax + + + kuduwriter/target/datax/ + + **/*.* + + datax + + + hologresjdbcwriter/target/datax/ + + **/*.* + + datax + diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/FileFormat.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/FileFormat.java new file mode 100644 index 00000000..b9368e67 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/FileFormat.java @@ -0,0 +1,97 @@ +package com.alibaba.datax.plugin.unstructuredstorage; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.unstructuredstorage.reader.Constant; +import com.alibaba.datax.plugin.unstructuredstorage.reader.Key; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderErrorCode; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:04 + */ +public enum FileFormat { + TEXT("text"), + CSV("csv"), + EXCEL("excel"), + BINARY("binary"); + + private String fileFormat; + + private boolean isText; + private boolean isCsv; + private boolean isExcel; + private boolean isBinary; + + FileFormat(String fileFormat) { + this.fileFormat = fileFormat.toLowerCase(); + } + + /** + * 获取文件类型: 目前支持text,csv,excel,binary + * @param configuration + * @return + */ + public static FileFormat getFileFormatByConfiguration(Configuration configuration) { + String fileFormat = configuration.getString(Key.FILE_FORMAT, Constant.DEFAULT_FILE_FORMAT); + return FileFormat.getByTypeName(fileFormat); + } + + public String getFileFormat() { + return this.fileFormat; + } + + public static FileFormat getByTypeName(String fileFormat) { + for (FileFormat fFormat : values()) { + if (fFormat.fileFormat.equalsIgnoreCase(fileFormat)) { + return fFormat; + } + } + throw DataXException.asDataXException(UnstructuredStorageReaderErrorCode.ILLEGAL_VALUE, + String.format("DataX 不支持该 fileFormat 类型:%s, 目前支持的 fileFormat 类型是:%s", fileFormat, Arrays.asList(values()))); + } + + public boolean equalsIgnoreCase(String fileFormat){ + return StringUtils.equalsIgnoreCase(fileFormat, this.fileFormat); + } + + public boolean isText() { + return this.equalsIgnoreCase(Constant.FILE_FORMAT_TEXT); + } + + public void setText(boolean text) { + isText = text; + } + + public boolean isCsv() { + return this.equalsIgnoreCase(Constant.FILE_FORMAT_CSV); + } + + public void setCsv(boolean csv) { + isCsv = csv; + } + + public boolean isExcel() { + return this.equalsIgnoreCase(Constant.FILE_FORMAT_EXCEL); + } + + public void setExcel(boolean excel) { + isExcel = excel; + } + + public boolean isBinary() { + return this.equalsIgnoreCase(Constant.FILE_FORMAT_BINARY); + } + + public void setBinary(boolean binary) { + isBinary = binary; + } + + @Override + public String toString(){ + return this.fileFormat; + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings.properties new file mode 100644 index 00000000..d53d4749 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1} \ No newline at end of file diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_en_US.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_en_US.properties new file mode 100644 index 00000000..d53d4749 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_en_US.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1} \ No newline at end of file diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_ja_JP.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..d53d4749 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_ja_JP.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1} \ No newline at end of file diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_CN.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..d53d4749 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_CN.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1} \ No newline at end of file diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_HK.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..b92a73ec --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_HK.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1}fileformaterror.1=DataX不支持該fileFormat類型:{0},現時支持的fileFormat類型是:{1} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_TW.properties b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..b92a73ec --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/LocalStrings_zh_TW.properties @@ -0,0 +1 @@ +fileformaterror.1=DataX \u4E0D\u652F\u6301\u8BE5 fileFormat \u7C7B\u578B:{0}, \u76EE\u524D\u652F\u6301\u7684 fileFormat \u7C7B\u578B\u662F:{1}fileformaterror.1=DataX不支持該fileFormat類型:{0},現時支持的fileFormat類型是:{1} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Constant.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Constant.java index 7c6bc139..6be46cb2 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Constant.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Constant.java @@ -10,4 +10,47 @@ public class Constant { public static final String DEFAULT_NULL_FORMAT = "\\N"; public static final Integer DEFAULT_BUFFER_SIZE = 8192; + + public static final String FILE_FORMAT_CSV = "csv"; + + public static final String FILE_FORMAT_TEXT = "text"; + + public static final String FILE_FORMAT_EXCEL = "excel"; + + public static final String FILE_FORMAT_BINARY = "binary"; + + public static final String DEFAULT_FILE_FORMAT = "csv"; + + public static final Boolean DEFAULE_SKIP_TEXT_EMPTY_RECORDS = true; + + public static final String EXCEL_VERSION_03_OR_EARLIER = "03_OR_EARLIER"; + + public static final String EXCEL_VERSION_07_OR_LATER = "07_OR_LATER"; + + /** + * 文件全限定名 + * */ + public static final String SOURCE_FILE = "sourceFile"; + + /** + * 单纯的文件名 + * */ + public static final String SOURCE_FILE_NAME = "sourceFileName"; + + public static final boolean DEFAULT_OUTPUT_SHEET_NAME = false; + + /** + * TODO 暂时先不考虑整个文件夹同步 + * 在同步音视频等二进制文件的情况下: + * 半结构读插件(txtfilreader, ftpreader, hdfsreader, ossreader)需要将相对文件路径注入 RELATIVE_SOURCE_FILE 属性 + * 目的是半结构化写插件可以统一使用 RELATIVE_SOURCE_FILE 获取到读端插件的所有二进制文件名及其相对路径。 + * 举个栗子: + * 读端插件PATH配置了/home/admin/myapp/ + */ + public static final String RELATIVE_SOURCE_FILE = "relativeSourceFile"; + + /** + * 默认读取二进制文件一次性读取的Byte数目: 1048576 Byte [1MB] + */ + public static final int DEFAULT_BLOCK_SIZE_IN_BYTE = 1048576; } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Key.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Key.java index bb5bf59f..71e13ad2 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Key.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/Key.java @@ -28,4 +28,63 @@ public class Key { public static final String CSV_READER_CONFIG = "csvReaderConfig"; + public static final String MARK_DONE_FILE_NAME = "markDoneFileName"; + + public static final String MARK_DOING_FILE_NAME = "markDoingFileName"; + + // public static final String RETRY_TIME = "retryTime"; + public final static String MAX_RETRY_TIME = "maxRetryTime"; + + public final static String RETRY_INTERVAL = "retryInterval"; + + public static final String TEXT_READER_CONFIG = "textReaderConfig"; + + public static final String SKIP_EMPTY_RECORDS = "skipEmptyRecords"; + + public static final String EXCEL_READER_CONFIG = "excelReaderConfig"; + + public static final String EXCEL_SHEET_NAME = "excelSheetName"; + + public static final String VERSION = "version"; + + public static final String OUTPUT_SHEET_NAME = "outputSheetName"; + + /** + * csv or text or excel + */ + public static final String FILE_FORMAT = "fileFormat"; + + /** + * 是否把一个file当做一个column + */ + public static final String FILE_AS_COLUMN = "fileAsColumn"; + + /** + * 读取二进制文件一次性读取的Byte数目 + */ + public static final String BLOCK_SIZE_IN_BYTE = "blockSizeInByte"; + + /** + * 半结构化标示一个Record来源的绝对文件路径名,可以是ftp文件,oss的object等 + * */ + public static final String META_KEY_FILE_PATH = "filePath"; + + /** + * 多文件切分的工作项,Task通过此配置项表示工作内容, 文件内部切分相关key + */ + public static final String SPLIT_SLICE_CONFIG = "__splitSliceConfig"; + public static final String SPLIT_SLICE_FILE_PATH = "filePath"; + public static final String SPLIT_SLICE_START_POINT = "startPoint"; + public static final String SPLIT_SLICE_END_POINT = "endPoint"; + + /** + * tar.gz压缩包,支持配置 tarFileFilterPattern 参数,来过滤要同步的文件 + * For Example: + * "tarFileFilterPattern" : "*.dat" + * + * 同步的时候,只同步 tar.gz 里面文件名后缀为 .dat 的文件 + */ + public static final String TAR_FILE_FILTER_PATTERN = "tarFileFilterPattern"; + public static final String ENABLE_INNER_SPLIT = "enableInnerSplit"; + } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/UnstructuredStorageReaderUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/UnstructuredStorageReaderUtil.java index 423f66db..645971d0 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/UnstructuredStorageReaderUtil.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/UnstructuredStorageReaderUtil.java @@ -26,10 +26,7 @@ import org.slf4j.LoggerFactory; import java.io.*; import java.nio.charset.UnsupportedCharsetException; import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; public class UnstructuredStorageReaderUtil { private static final Logger LOG = LoggerFactory @@ -695,4 +692,27 @@ public class UnstructuredStorageReaderUtil { LOG.info(String.format("CsvReader使用默认值[%s],csvReaderConfig值为[%s]",JSON.toJSONString(csvReader),JSON.toJSONString(UnstructuredStorageReaderUtil.csvReaderConfigMap))); } } + + public static Map buildRecordMeta(String filePath) { + Map meta = new HashMap(); + // 上下文filePath元数据注入, 目前传递的是纯文件名 + // File file = new File(filePath); + // meta.put(Key.META_KEY_FILE_PATH, file.getName()); + meta.put(Key.META_KEY_FILE_PATH, filePath); + return meta; + } + + public static void setSourceFileName(Configuration configuration, List sourceFiles){ + List sourceFilesName = new ArrayList(); + File file; + for (String sourceFile: sourceFiles){ + file = new File(sourceFile); + sourceFilesName.add(file.getName()); + } + configuration.set(Constant.SOURCE_FILE_NAME, sourceFilesName); + } + + public static void setSourceFile(Configuration configuration, List sourceFiles){ + configuration.set(Constant.SOURCE_FILE, sourceFiles); + } } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/BinaryFileReaderUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/BinaryFileReaderUtil.java new file mode 100644 index 00000000..a7d846b3 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/BinaryFileReaderUtil.java @@ -0,0 +1,62 @@ +package com.alibaba.datax.plugin.unstructuredstorage.reader.binaryFileUtil; + +import com.alibaba.datax.common.element.BytesColumn; +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.plugin.unstructuredstorage.reader.Key; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderErrorCode; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:59 + */ +public class BinaryFileReaderUtil { + private static final Logger LOG = LoggerFactory.getLogger(BinaryFileReaderUtil.class); + + public static void readFromStream(InputStream inputStream, String filePath, RecordSender recordSender, int blockSizeInByte) { + try { + Map meta = UnstructuredStorageReaderUtil.buildRecordMeta(filePath); + byte[] tmp = new byte[blockSizeInByte]; + int len; + ByteUtils byteUtils = new ByteUtils(); + while ((len = inputStream.read(tmp)) != -1) { + /**如果len小于blockSizeInByte,说明已经读到了最后一个byte数组 + * 此时需要将byte数组长度调整为实际读到的字节数, + * 否则会导致写入目的文件字节数大于实际文件字节数, 有可能会导致文件损坏(比如pptx, docx等文件) + */ + // warn: 这里可以优化掉,没必要做一次数组拷贝,直接复用byte[] tmp即可 + byte[] readBytesArray = Arrays.copyOf(tmp, len); + byteUtils.append(readBytesArray); + if (byteUtils.getSize() >= blockSizeInByte) { + recordSenderBytesColumn(recordSender, byteUtils.getBuffer(), meta); + byteUtils.clear(); + } + } + recordSenderBytesColumn(recordSender, byteUtils.getBuffer(), meta); + LOG.info("End read!!!"); + } catch (IOException e) { + throw DataXException.asDataXException(UnstructuredStorageReaderErrorCode.READ_FILE_IO_ERROR, e); + } + } + + private static void recordSenderBytesColumn(RecordSender recordSender, byte[] tmp, Map meta){ + Record record = recordSender.createRecord(); + Column column = new BytesColumn(tmp); + record.addColumn(column); + record.setMeta(meta); + recordSender.sendToWriter(record); + } + + +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/ByteUtils.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/ByteUtils.java new file mode 100644 index 00000000..14ba9c47 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/binaryFileUtil/ByteUtils.java @@ -0,0 +1,48 @@ +package com.alibaba.datax.plugin.unstructuredstorage.reader.binaryFileUtil; + +import java.util.Arrays; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:00 + */ +public class ByteUtils { + + private int size; + private int kDefaultBufferSize = 0; + private byte[] buffer; + + public byte[] getBuffer() { + return buffer; + } + + public ByteUtils() { + buffer = new byte[0]; + size = 0; + } + + public long getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public ByteUtils append(byte[] buf) { + + if (buf == null){ + return this; + } + buffer = Arrays.copyOf(buffer, buffer.length + buf.length); + System.arraycopy(buf, 0, buffer, size, buf.length); + size += buf.length; + return this; + } + + public void clear() + { + buffer = new byte[kDefaultBufferSize]; + size = 0; + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/StartEndPair.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/StartEndPair.java new file mode 100644 index 00000000..aa021c99 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/StartEndPair.java @@ -0,0 +1,49 @@ +package com.alibaba.datax.plugin.unstructuredstorage.reader.split; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:50 + */ +public class StartEndPair { + private Long start; + private Long end; + private String filePath; + + public StartEndPair() { + } + + public StartEndPair(Long start, Long end, String filePath) { + this.start = start; + this.end = end; + this.filePath = filePath; + } + + public Long getEnd() { + return end; + } + + public void setEnd(Long end) { + this.end = end; + } + + public Long getStart() { + return start; + } + + public void setStart(Long start) { + this.start = start; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + @Override + public String toString() { + return "StartEndPair [start=" + start + ", end=" + end + ", filePath=" + filePath + "]"; + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/UnstructuredSplitUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/UnstructuredSplitUtil.java new file mode 100644 index 00000000..8087ed63 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/reader/split/UnstructuredSplitUtil.java @@ -0,0 +1,191 @@ +package com.alibaba.datax.plugin.unstructuredstorage.reader.split; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.RangeSplitUtil; +import com.alibaba.datax.plugin.unstructuredstorage.reader.Key; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderErrorCode; +import com.alibaba.fastjson.JSON; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.tuple.ImmutableTriple; +import org.apache.commons.lang3.tuple.Triple; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: guxuan + * @Date 2022-05-17 15:49 + */ +public abstract class UnstructuredSplitUtil { + private static final Logger LOG = LoggerFactory.getLogger(UnstructuredSplitUtil.class); + private boolean needInnerSplit; + // 对每个文件进行切分的块大小是 64MB + // warn: 这个最好弄成可配置的, 用户配置channel为2但是有10个文件,不一定需要文件内部切分; + // 弄成可配置的有些情况下可以避免文件内部切分切分的task太碎 + private static final Long BLOCK_BYTE_CAPACITY = 64 * FileUtils.ONE_MB; + + public UnstructuredSplitUtil(boolean needInnerSplit) { + this.needInnerSplit = needInnerSplit; + } + + public List getSplitConfiguration(Configuration originConfiguration, List sourceObjectList, + int adviceNumber) { + + List splitConfiguration = new ArrayList(); + List regulateSplitStartEndPairList = new ArrayList(); + + for (String object : sourceObjectList) { + boolean realNeedInnerSplit = false; + Long contentTotalLength = -1L; + if (this.needInnerSplit) { + // 减少不必要的oss接口调用 + contentTotalLength = this.getFileTotalLength(object); + if (isNeedSplit(contentTotalLength)) { + realNeedInnerSplit = true; + } + } + // warn: 数据读模式允许文件内部切分,并且文件大小满足 + if (realNeedInnerSplit) { + List startEndPairList = getSplitStartEndPairList(contentTotalLength, object); + List> startEndInputStreamTripleList = new ArrayList>(); + for (int i = 0; i < startEndPairList.size(); i++) { + StartEndPair startEndPair = startEndPairList.get(i); + InputStream inputStream = this.getFileInputStream(startEndPair); + Triple startEndInputStreamTriple = new ImmutableTriple( + startEndPair.getStart(), startEndPair.getEnd(), inputStream); + startEndInputStreamTripleList.add(startEndInputStreamTriple); + } + regulateSplitStartEndPairList.addAll(regulateSplitStartEndPair(startEndInputStreamTripleList, object)); + } else { + // 如果指定的Range无效(比如开始位置、结束位置为负数,大于文件大小),则会下载整个文件; + StartEndPair startEndPair = new StartEndPair(0L, -1L, object); + regulateSplitStartEndPairList.add(startEndPair); + } + } + + // merge task 将多个文件merge到一个task中执行 + List> splitResult = RangeSplitUtil.doListSplit(regulateSplitStartEndPairList, adviceNumber); + // at here this.objects is not null and not empty + for (List eachSlice : splitResult) { + Configuration splitedConfig = originConfiguration.clone(); + splitedConfig.set(Key.SPLIT_SLICE_CONFIG, eachSlice); + splitConfiguration.add(splitedConfig); + LOG.info(String.format("File to be read:%s", JSON.toJSONString(eachSlice))); + } + return splitConfiguration; + } + + /** + * 对原始的切分点位进行调节校准, 将点位落在每一行数据的换行符处 + * + * @param startEndInputStreamTripleList + * 原始的切分点位及inputstream (start, end, inputStream) + * @return + */ + private List regulateSplitStartEndPair( + List> startEndInputStreamTripleList, String filePath) { + List regulatedStartEndPairList = new ArrayList(); + + for (int i = 0; i < startEndInputStreamTripleList.size(); i++) { + if (i == 0) { + Triple firstBlock = startEndInputStreamTripleList.get(i); + StartEndPair startEndPair = new StartEndPair(firstBlock.getLeft(), null, filePath); + regulatedStartEndPairList.add(startEndPair); + continue; + } + Triple block = startEndInputStreamTripleList.get(i); + long start = block.getLeft(); + long offset = 0; + // 对切分点位进行调节,将切分起始点移动到行尾(即'\n'上) + if (i < startEndInputStreamTripleList.size()) { + offset = getLFIndex(block.getRight()); + } + // 调节正确的切分点位 + long regulatedPoint = start + offset; + // 将上一个block的末尾点位调节成行尾 + regulatedStartEndPairList.get(i - 1).setEnd(regulatedPoint); + if (i < startEndInputStreamTripleList.size() - 1) { + // 将本block起始点位进行调节, 结束点位暂不调节 + regulatedStartEndPairList.add(new StartEndPair(regulatedPoint + 1, null, filePath)); + } else { + // 调节最后一个block, 调节起始点位, 结束点位就用文件的字节总长度 + regulatedStartEndPairList.add(new StartEndPair(regulatedPoint + 1, block.getMiddle(), filePath)); + } + } + return regulatedStartEndPairList; + } + + /** + * 获取到输入流开始的第一个'\n'偏移量, 如果向后偏移了ByteCapacity个字节,还是没有找到'\n'的话,则抛出异常 注: + * 对文件切分的最后一个分块不会调用该方法 + * + * @param inputStream + * 输入流 + * @return + */ + private Long getLFIndex(InputStream inputStream) { + Long hasReadByteIndex = -1L; + int ch = 0; + while (ch != -1) { + try { + ch = inputStream.read(); + } catch (IOException e) { + throw DataXException.asDataXException(UnstructuredStorageReaderErrorCode.READ_FILE_IO_ERROR, + String.format("inputstream read Byte has exception: %s", e.getMessage()), e); + } + hasReadByteIndex++; + if (ch == '\n') { + return hasReadByteIndex; + } + } + return hasReadByteIndex; + } + + /** + * 得到一个文件最多能拆分成的份数 + * + * @param fileTotalLength + * @return + */ + private List getSplitStartEndPairList(Long fileTotalLength, String filePath) { + long splitNum = (long) Math.ceil(fileTotalLength * 1.0 / BLOCK_BYTE_CAPACITY); + List startEndPairList = new ArrayList(); + long start, end; + for (int i = 1; i <= splitNum; i++) { + if (i == 1) { + start = (i - 1) * BLOCK_BYTE_CAPACITY; + end = i * BLOCK_BYTE_CAPACITY; + } else if (i < splitNum) { + start = (i - 1) * BLOCK_BYTE_CAPACITY + 1; + end = i * BLOCK_BYTE_CAPACITY; + } else { + start = (i - 1) * BLOCK_BYTE_CAPACITY + 1; + end = fileTotalLength - 1; + } + StartEndPair startEndPair = new StartEndPair(start, end, filePath); + startEndPairList.add(startEndPair); + } + return startEndPairList; + } + + /** + * 判断文件是否需要切分, 切分的条件是必须要大于 transport.channel.byteCapacity + * + * @param fileTotalLength: + * 文件总字节数 + * @return + */ + private boolean isNeedSplit(Long fileTotalLength) { + boolean fileSizeCouldSplit = fileTotalLength > BLOCK_BYTE_CAPACITY ? true : false; + return fileSizeCouldSplit && this.needInnerSplit; + } + + public abstract Long getFileTotalLength(String filePath); + + public abstract InputStream getFileInputStream(StartEndPair startEndPair); +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/ColumnTypeUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/ColumnTypeUtil.java new file mode 100644 index 00000000..8215bc36 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/ColumnTypeUtil.java @@ -0,0 +1,90 @@ +package com.alibaba.datax.plugin.unstructuredstorage.util; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.unstructuredstorage.reader.ColumnEntry; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * @Author: guxuan + * @Date 2022-05-17 16:40 + */ +public class ColumnTypeUtil { + + private static final String TYPE_NAME = "decimal"; + private static final String LEFT_BRACKETS = "("; + private static final String RIGHT_BRACKETS = ")"; + private static final String DELIM = ","; + + public static boolean isDecimalType(String typeName){ + return typeName.toLowerCase().startsWith(TYPE_NAME); + } + + public static DecimalInfo getDecimalInfo(String typeName, DecimalInfo defaultInfo){ + if(!isDecimalType(typeName)){ + throw new IllegalArgumentException("Unsupported column type:" + typeName); + } + + if (typeName.contains(LEFT_BRACKETS) && typeName.contains(RIGHT_BRACKETS)){ + int precision = Integer.parseInt(typeName.substring(typeName.indexOf(LEFT_BRACKETS) + 1,typeName.indexOf(DELIM)).trim()); + int scale = Integer.parseInt(typeName.substring(typeName.indexOf(DELIM) + 1,typeName.indexOf(RIGHT_BRACKETS)).trim()); + return new DecimalInfo(precision, scale); + } else { + return defaultInfo; + } + } + + public static class DecimalInfo { + private int precision; + private int scale; + + public DecimalInfo(int precision, int scale) { + this.precision = precision; + this.scale = scale; + } + + public int getPrecision() { + return precision; + } + + public int getScale() { + return scale; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()){ + return false; + + } + DecimalInfo that = (DecimalInfo) o; + return precision == that.precision && scale == that.scale; + } + + @Override + public int hashCode() { + return Objects.hash(precision, scale); + } + } + + public static List getListColumnEntry( + Configuration configuration, final String path) { + List lists = configuration.getList(path, JSONObject.class); + if (lists == null) { + return null; + } + List result = new ArrayList<>(); + for (final JSONObject object : lists) { + result.add(JSON.parseObject(object.toJSONString(), ColumnEntry.class)); + } + return result; + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/HdfsUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/HdfsUtil.java new file mode 100644 index 00000000..4098ff1d --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/util/HdfsUtil.java @@ -0,0 +1,16 @@ +package com.alibaba.datax.plugin.unstructuredstorage.util; + + +public class HdfsUtil { + private static final double SCALE_TWO = 2.0; + private static final double SCALE_TEN = 10.0; + private static final int BIT_SIZE = 8; + public static int computeMinBytesForPrecision(int precision){ + + int numBytes = 1; + while (Math.pow(SCALE_TWO, BIT_SIZE * numBytes - 1.0) < Math.pow(SCALE_TEN, precision)) { + numBytes += 1; + } + return numBytes; + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Constant.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Constant.java index 93b4baa9..092fbfd7 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Constant.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Constant.java @@ -11,9 +11,31 @@ public class Constant { public static final String FILE_FORMAT_CSV = "csv"; public static final String FILE_FORMAT_TEXT = "text"; - - //每个分块10MB,最大10000个分块 - public static final Long MAX_FILE_SIZE = 1024 * 1024 * 10 * 10000L; - + + //每个分块10MB,最大10000个分块, MAX_FILE_SIZE 单位: MB + public static final Long MAX_FILE_SIZE = 10 * 10000L; + public static final String DEFAULT_SUFFIX = ""; + + public static final String TRUNCATE = "truncate"; + public static final String APPEND = "append"; + public static final String NOCONFLICT = "nonConflict"; + + /** + * 在同步音视频等二进制文件的情况下: + * 半结构化写插件可以统一使用 SOURCE_FILE 获取到读端插件的split file路径 + */ + public static final String SOURCE_FILE = "sourceFile"; + + public static final String SOURCE_FILE_NAME = "sourceFileName"; + + /** + * 是否是音视频等无结构化文件 + */ + public static final String BINARY = "binary"; + + /** + * 文件同步模式, 如果是copy表示纯文件拷贝 + * */ + public static final String SYNC_MODE_VALUE_COPY = "copy"; } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/DataXCsvWriter.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/DataXCsvWriter.java new file mode 100644 index 00000000..85deea2c --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/DataXCsvWriter.java @@ -0,0 +1,296 @@ +package com.alibaba.datax.plugin.unstructuredstorage.writer; + +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.Writer; + +/** + * @Author: guxuan + * @Date 2022-05-19 10:44 + */ +public class DataXCsvWriter { + private Writer writer; + @SuppressWarnings("unused") + private String fileName; + private boolean firstColumn; + private boolean useCustomRecordDelimiter; + private UserSettings userSettings; + private boolean initialized; + private boolean closed; + public static final int ESCAPE_MODE_DOUBLED = 1; + public static final int ESCAPE_MODE_BACKSLASH = 2; + + public DataXCsvWriter(Writer writer, char delimiter) { + this.writer = null; + this.fileName = null; + this.firstColumn = true; + this.useCustomRecordDelimiter = false; + this.userSettings = new UserSettings(); + this.initialized = false; + this.closed = false; + if(writer == null) { + throw new IllegalArgumentException("Parameter writer can not be null."); + } else { + this.writer = writer; + this.userSettings.Delimiter = delimiter; + this.initialized = true; + } + } + + public char getDelimiter() { + return this.userSettings.Delimiter; + } + + public void setDelimiter(char var1) { + this.userSettings.Delimiter = var1; + } + + public char getRecordDelimiter() { + return this.userSettings.RecordDelimiter; + } + + public void setRecordDelimiter(char var1) { + this.useCustomRecordDelimiter = true; + this.userSettings.RecordDelimiter = var1; + } + + public char getTextQualifier() { + return this.userSettings.TextQualifier; + } + + public void setTextQualifier(char var1) { + this.userSettings.TextQualifier = var1; + } + + public boolean getUseTextQualifier() { + return this.userSettings.UseTextQualifier; + } + + public void setUseTextQualifier(boolean var1) { + this.userSettings.UseTextQualifier = var1; + } + + public int getEscapeMode() { + return this.userSettings.EscapeMode; + } + + public void setEscapeMode(int var1) { + this.userSettings.EscapeMode = var1; + } + + public void setComment(char var1) { + this.userSettings.Comment = var1; + } + + public char getComment() { + return this.userSettings.Comment; + } + + public boolean getForceQualifier() { + return this.userSettings.ForceQualifier; + } + + public void setForceQualifier(boolean var1) { + this.userSettings.ForceQualifier = var1; + } + + public void write(String var1, boolean var2) throws IOException { + this.checkClosed(); + if(var1 == null) { + var1 = ""; + } + + if(!this.firstColumn) { + this.writer.write(this.userSettings.Delimiter); + } + + boolean var3 = this.userSettings.ForceQualifier; + if(!var2 && var1.length() > 0) { + var1 = var1.trim(); + } + + if(!var3 && this.userSettings.UseTextQualifier && (var1.indexOf(this.userSettings.TextQualifier) > -1 || var1.indexOf(this.userSettings.Delimiter) > -1 || !this.useCustomRecordDelimiter && (var1.indexOf(10) > -1 || var1.indexOf(13) > -1) || this.useCustomRecordDelimiter && var1.indexOf(this.userSettings.RecordDelimiter) > -1 || this.firstColumn && var1.length() > 0 && var1.charAt(0) == this.userSettings.Comment || this.firstColumn && var1.length() == 0)) { + var3 = true; + } + + if(this.userSettings.UseTextQualifier && !var3 && var1.length() > 0 && var2) { + char var4 = var1.charAt(0); + if(var4 == 32 || var4 == 9) { + var3 = true; + } + + if(!var3 && var1.length() > 1) { + char var5 = var1.charAt(var1.length() - 1); + if(var5 == 32 || var5 == 9) { + var3 = true; + } + } + } + + if(var3) { + this.writer.write(this.userSettings.TextQualifier); + if(this.userSettings.EscapeMode == 2) { + var1 = replace(var1, "\\", "\\\\"); + var1 = replace(var1, "" + this.userSettings.TextQualifier, "\\" + this.userSettings.TextQualifier); + } else { + var1 = replace(var1, "" + this.userSettings.TextQualifier, "" + this.userSettings.TextQualifier + this.userSettings.TextQualifier); + } + } else if(this.userSettings.EscapeMode == 2) { + var1 = replace(var1, "\\", "\\\\"); + var1 = replace(var1, "" + this.userSettings.Delimiter, "\\" + this.userSettings.Delimiter); + if(this.useCustomRecordDelimiter) { + var1 = replace(var1, "" + this.userSettings.RecordDelimiter, "\\" + this.userSettings.RecordDelimiter); + } else { + var1 = replace(var1, "\r", "\\\r"); + var1 = replace(var1, "\n", "\\\n"); + } + + if(this.firstColumn && var1.length() > 0 && var1.charAt(0) == this.userSettings.Comment) { + if(var1.length() > 1) { + var1 = "\\" + this.userSettings.Comment + var1.substring(1); + } else { + var1 = "\\" + this.userSettings.Comment; + } + } + } + + this.writer.write(var1); + if(var3) { + this.writer.write(this.userSettings.TextQualifier); + } + + this.firstColumn = false; + } + + public void write(String var1) throws IOException { + this.write(var1, false); + } + + public void writeComment(String var1) throws IOException { + this.checkClosed(); + this.writer.write(this.userSettings.Comment); + this.writer.write(var1); + if(this.useCustomRecordDelimiter) { + this.writer.write(this.userSettings.RecordDelimiter); + } else { + this.writer.write(IOUtils.LINE_SEPARATOR); + } + + this.firstColumn = true; + } + + public void writeRecord(String[] var1, boolean var2) throws IOException { + if(var1 != null && var1.length > 0) { + for(int var3 = 0; var3 < var1.length; ++var3) { + this.write(var1[var3], var2); + } + + this.endRecord(); + } + + } + + public void writeRecord(String[] var1) throws IOException { + this.writeRecord(var1, false); + } + + public void endRecord() throws IOException { + this.checkClosed(); + if(this.useCustomRecordDelimiter) { + this.writer.write(this.userSettings.RecordDelimiter); + } else { + this.writer.write(IOUtils.LINE_SEPARATOR); + } + + this.firstColumn = true; + } + + public void flush() throws IOException { + this.writer.flush(); + } + + public void close() { + if(!this.closed) { + this.close(true); + this.closed = true; + } + + } + + private void close(boolean var1) { + if(!this.closed) { + try { + if(this.initialized) { + this.writer.close(); + } + } catch (Exception var3) { + ; + } + + this.writer = null; + this.closed = true; + } + + } + + private void checkClosed() throws IOException { + if(this.closed) { + throw new IOException("This instance of the CsvWriter class has already been closed."); + } + } + + @Override + protected void finalize() { + this.close(false); + } + + public static String replace(String var0, String var1, String var2) { + int var3 = var1.length(); + int var4 = var0.indexOf(var1); + if(var4 <= -1) { + return var0; + } else { + StringBuffer var5 = new StringBuffer(); + + int var6; + for(var6 = 0; var4 != -1; var4 = var0.indexOf(var1, var6)) { + var5.append(var0.substring(var6, var4)); + var5.append(var2); + var6 = var4 + var3; + } + + var5.append(var0.substring(var6)); + return var5.toString(); + } + } + + private class UserSettings { + public char TextQualifier = 34; + public boolean UseTextQualifier = true; + public char Delimiter = 44; + public char RecordDelimiter = 0; + public char Comment = 35; + public int EscapeMode = 1; + public boolean ForceQualifier = false; + + public UserSettings() { + } + } + + @SuppressWarnings("unused") + private class Letters { + public static final char LF = '\n'; + public static final char CR = '\r'; + public static final char QUOTE = '\"'; + public static final char COMMA = ','; + public static final char SPACE = ' '; + public static final char TAB = '\t'; + public static final char POUND = '#'; + public static final char BACKSLASH = '\\'; + public static final char NULL = '\u0000'; + + private Letters() { + } + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Key.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Key.java index 2e7fe079..125957f1 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Key.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/Key.java @@ -1,6 +1,7 @@ package com.alibaba.datax.plugin.unstructuredstorage.writer; public class Key { + public static final String PATH = "path"; // must have public static final String FILE_NAME = "fileName"; @@ -10,6 +11,11 @@ public class Key { // not must , not default , public static final String FIELD_DELIMITER = "fieldDelimiter"; + // not must , default os's line delimiter + public static final String LINE_DELIMITER = "lineDelimiter"; + + public static final String CSV_WRITER_CONFIG = "csvWriterConfig"; + // not must, default UTF-8 public static final String ENCODING = "encoding"; @@ -35,4 +41,32 @@ public class Key { // writer file type suffix, like .txt .csv public static final String SUFFIX = "suffix"; + + public static final String MARK_DONE_FILE_NAME = "markDoneFileName"; + + public static final String MARK_DOING_FILE_NAME = "markDoingFileName"; + + // public static final String RETRY_TIME = "retryTime"; + + public final static String MAX_RETRY_TIME = "maxRetryTime"; + + /** + * 半结构化标示一个Record来源的绝对文件路径名,可以是ftp文件,oss的object等 + * */ + public static final String META_KEY_FILE_PATH = "filePath"; + + /** + * 多文件切分的工作项,Task通过此配置项表示工作内容, 文件内部切分相关key + */ + public static final String SPLIT_SLICE_CONFIG = "__splitSliceConfig"; + public static final String SPLIT_SLICE_FILE_PATH = "filePath"; + public static final String SPLIT_SLICE_START_POINT = "startPoint"; + public static final String SPLIT_SLICE_END_POINT = "endPoint"; + + /** + * 文件同步模式, 如果是copy表示纯文件拷贝 + * */ + public static final String SYNC_MODE = "syncMode"; + + public static final String BYTE_ENCODING = "byteEncoding"; } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/TextCsvWriterManager.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/TextCsvWriterManager.java index 1ea82759..167a7a87 100644 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/TextCsvWriterManager.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/TextCsvWriterManager.java @@ -2,8 +2,13 @@ package com.alibaba.datax.plugin.unstructuredstorage.writer; import java.io.IOException; import java.io.Writer; +import java.util.HashMap; import java.util.List; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -11,15 +16,15 @@ import org.slf4j.LoggerFactory; import com.csvreader.CsvWriter; + public class TextCsvWriterManager { - public static UnstructuredWriter produceUnstructuredWriter( - String fileFormat, char fieldDelimiter, Writer writer) { - // warn: false means plain text(old way), true means strict csv format - if (Constant.FILE_FORMAT_TEXT.equals(fileFormat)) { - return new TextWriterImpl(writer, fieldDelimiter); - } else { - return new CsvWriterImpl(writer, fieldDelimiter); - } + + public static UnstructuredWriter produceTextWriter( Writer writer, String fieldDelimiter, Configuration config) { + return new TextWriterImpl(writer, fieldDelimiter, config); + } + + public static UnstructuredWriter produceCsvWriter( Writer writer, char fieldDelimiter, Configuration config) { + return new CsvWriterImpl(writer, fieldDelimiter, config); } } @@ -28,15 +33,40 @@ class CsvWriterImpl implements UnstructuredWriter { .getLogger(CsvWriterImpl.class); // csv 严格符合csv语法, 有标准的转义等处理 private char fieldDelimiter; - private CsvWriter csvWriter; + private String lineDelimiter; + private DataXCsvWriter csvWriter; - public CsvWriterImpl(Writer writer, char fieldDelimiter) { + public CsvWriterImpl(Writer writer, char fieldDelimiter, Configuration config) { this.fieldDelimiter = fieldDelimiter; - this.csvWriter = new CsvWriter(writer, this.fieldDelimiter); + this.lineDelimiter = config.getString(Key.LINE_DELIMITER, IOUtils.LINE_SEPARATOR); + this.csvWriter = new DataXCsvWriter(writer, this.fieldDelimiter); this.csvWriter.setTextQualifier('"'); this.csvWriter.setUseTextQualifier(true); // warn: in linux is \n , in windows is \r\n - this.csvWriter.setRecordDelimiter(IOUtils.LINE_SEPARATOR.charAt(0)); + this.csvWriter.setRecordDelimiter(this.lineDelimiter.charAt(0)); + + String csvWriterConfig = config.getString(Key.CSV_WRITER_CONFIG); + if (StringUtils.isNotBlank(csvWriterConfig)) { + try { + HashMap csvWriterConfigMap = JSON.parseObject(csvWriterConfig, + new TypeReference>() { + }); + if (!csvWriterConfigMap.isEmpty()) { + // this.csvWriter.setComment(var1); + // this.csvWriter.setDelimiter(var1); + // this.csvWriter.setEscapeMode(var1); + // this.csvWriter.setForceQualifier(var1); + // this.csvWriter.setRecordDelimiter(var1); + // this.csvWriter.setTextQualifier(var1); + // this.csvWriter.setUseTextQualifier(var1); + BeanUtils.populate(this.csvWriter, csvWriterConfigMap); + LOG.info(String.format("csvwriterConfig is set successfully. After setting, csvwriter:%s", JSON.toJSONString(this.csvWriter))); + } + } catch (Exception e) { + LOG.warn(String.format("invalid csvWriterConfig config: %s, DataX will ignore it.", csvWriterConfig), + e); + } + } } @Override @@ -44,8 +74,7 @@ class CsvWriterImpl implements UnstructuredWriter { if (splitedRows.isEmpty()) { LOG.info("Found one record line which is empty."); } - this.csvWriter.writeRecord((String[]) splitedRows - .toArray(new String[0])); + this.csvWriter.writeRecord(splitedRows.toArray(new String[0])); } @Override @@ -64,12 +93,14 @@ class TextWriterImpl implements UnstructuredWriter { private static final Logger LOG = LoggerFactory .getLogger(TextWriterImpl.class); // text StringUtils的join方式, 简单的字符串拼接 - private char fieldDelimiter; + private String fieldDelimiter; private Writer textWriter; + private String lineDelimiter; - public TextWriterImpl(Writer writer, char fieldDelimiter) { + public TextWriterImpl(Writer writer, String fieldDelimiter, Configuration config) { this.fieldDelimiter = fieldDelimiter; this.textWriter = writer; + this.lineDelimiter = config.getString(Key.LINE_DELIMITER, IOUtils.LINE_SEPARATOR); } @Override @@ -79,7 +110,7 @@ class TextWriterImpl implements UnstructuredWriter { } this.textWriter.write(String.format("%s%s", StringUtils.join(splitedRows, this.fieldDelimiter), - IOUtils.LINE_SEPARATOR)); + this.lineDelimiter)); } @Override diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterErrorCode.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterErrorCode.java index 0f780ebd..b83cfa1c 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterErrorCode.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterErrorCode.java @@ -8,7 +8,8 @@ public enum UnstructuredStorageWriterErrorCode implements ErrorCode { Write_FILE_WITH_CHARSET_ERROR("UnstructuredStorageWriter-01", "您配置的编码未能正常写入."), Write_FILE_IO_ERROR("UnstructuredStorageWriter-02", "您配置的文件在写入时出现IO异常."), RUNTIME_EXCEPTION("UnstructuredStorageWriter-03", "出现运行时异常, 请联系我们"), - REQUIRED_VALUE("UnstructuredStorageWriter-04", "您缺失了必须填写的参数值."),; + REQUIRED_VALUE("UnstructuredStorageWriter-04", "您缺失了必须填写的参数值."), + Write_ERROR("UnstructuredStorageWriter-05", "errorcode.write_error"),; private final String code; private final String description; diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterUtil.java index b1927ce7..e9040662 100755 --- a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterUtil.java +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/UnstructuredStorageWriterUtil.java @@ -1,10 +1,6 @@ package com.alibaba.datax.plugin.unstructuredstorage.writer; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -13,6 +9,8 @@ import java.util.List; import java.util.Set; import java.util.UUID; +import com.alibaba.datax.common.element.BytesColumn; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.compress.compressors.CompressorOutputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; @@ -53,10 +51,7 @@ public class UnstructuredStorageWriterUtil { if (!supportedWriteModes.contains(writeMode)) { throw DataXException .asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format( - "仅支持 truncate, append, nonConflict 三种模式, 不支持您配置的 writeMode 模式 : [%s]", - writeMode)); + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, writeMode); } writerConfiguration.set(Key.WRITE_MODE, writeMode); @@ -64,8 +59,6 @@ public class UnstructuredStorageWriterUtil { String encoding = writerConfiguration.getString(Key.ENCODING); if (StringUtils.isBlank(encoding)) { // like " ", null - LOG.warn(String.format("您的encoding配置为空, 将使用默认值[%s]", - Constant.DEFAULT_ENCODING)); writerConfiguration.set(Key.ENCODING, Constant.DEFAULT_ENCODING); } else { try { @@ -74,8 +67,7 @@ public class UnstructuredStorageWriterUtil { Charsets.toCharset(encoding); } catch (Exception e) { throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format("不支持您配置的编码格式:[%s]", encoding), e); + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, e); } } @@ -86,45 +78,40 @@ public class UnstructuredStorageWriterUtil { } else { Set supportedCompress = Sets.newHashSet("gzip", "bzip2"); if (!supportedCompress.contains(compress.toLowerCase().trim())) { - String message = String.format( - "仅支持 [%s] 文件压缩格式 , 不支持您配置的文件压缩格式: [%s]", - StringUtils.join(supportedCompress, ","), compress); throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format(message, compress)); + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, String.format("unsupported commpress format %s ", compress)); } } - // fieldDelimiter check - String delimiterInStr = writerConfiguration - .getString(Key.FIELD_DELIMITER); - // warn: if have, length must be one - if (null != delimiterInStr && 1 != delimiterInStr.length()) { - throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format("仅仅支持单字符切分, 您配置的切分为 : [%s]", delimiterInStr)); - } - if (null == delimiterInStr) { - LOG.warn(String.format("您没有配置列分隔符, 使用默认值[%s]", - Constant.DEFAULT_FIELD_DELIMITER)); - writerConfiguration.set(Key.FIELD_DELIMITER, - Constant.DEFAULT_FIELD_DELIMITER); - } - // fileFormat check - String fileFormat = writerConfiguration.getString(Key.FILE_FORMAT, - Constant.FILE_FORMAT_TEXT); + String fileFormat = writerConfiguration.getString(Key.FILE_FORMAT); + if (StringUtils.isBlank(fileFormat)) { + fileFormat = Constant.FILE_FORMAT_TEXT; + writerConfiguration.set(Key.FILE_FORMAT, fileFormat); + } if (!Constant.FILE_FORMAT_CSV.equals(fileFormat) && !Constant.FILE_FORMAT_TEXT.equals(fileFormat)) { throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, String - .format("您配置的fileFormat [%s]错误, 支持csv, text两种.", - fileFormat)); + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, String.format("unsupported fileFormat %s ", fileFormat)); + } + + // fieldDelimiter check + String delimiterInStr = writerConfiguration.getString(Key.FIELD_DELIMITER); + + if (StringUtils.equalsIgnoreCase(fileFormat, Constant.FILE_FORMAT_CSV) && + null != delimiterInStr && 1 != delimiterInStr.length()) { + throw DataXException.asDataXException( + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, + String.format("unsupported delimiterInStr %s ", delimiterInStr)); + } + if (null == delimiterInStr) { + delimiterInStr = String.valueOf(Constant.DEFAULT_FIELD_DELIMITER); + writerConfiguration.set(Key.FIELD_DELIMITER, delimiterInStr); } } public static List split(Configuration writerSliceConfig, - Set originAllFileExists, int mandatoryNumber) { + Set originAllFileExists, int mandatoryNumber) { LOG.info("begin do split..."); Set allFileExists = new HashSet(); allFileExists.addAll(originAllFileExists); @@ -153,19 +140,19 @@ public class UnstructuredStorageWriterUtil { } public static String buildFilePath(String path, String fileName, - String suffix) { + String suffix) { boolean isEndWithSeparator = false; switch (IOUtils.DIR_SEPARATOR) { - case IOUtils.DIR_SEPARATOR_UNIX: - isEndWithSeparator = path.endsWith(String - .valueOf(IOUtils.DIR_SEPARATOR)); - break; - case IOUtils.DIR_SEPARATOR_WINDOWS: - isEndWithSeparator = path.endsWith(String - .valueOf(IOUtils.DIR_SEPARATOR_WINDOWS)); - break; - default: - break; + case IOUtils.DIR_SEPARATOR_UNIX: + isEndWithSeparator = path.endsWith(String + .valueOf(IOUtils.DIR_SEPARATOR)); + break; + case IOUtils.DIR_SEPARATOR_WINDOWS: + isEndWithSeparator = path.endsWith(String + .valueOf(IOUtils.DIR_SEPARATOR_WINDOWS)); + break; + default: + break; } if (!isEndWithSeparator) { path = path + IOUtils.DIR_SEPARATOR; @@ -179,14 +166,12 @@ public class UnstructuredStorageWriterUtil { } public static void writeToStream(RecordReceiver lineReceiver, - OutputStream outputStream, Configuration config, String context, - TaskPluginCollector taskPluginCollector) { + OutputStream outputStream, Configuration config, String context, + TaskPluginCollector taskPluginCollector) { String encoding = config.getString(Key.ENCODING, Constant.DEFAULT_ENCODING); // handle blank encoding if (StringUtils.isBlank(encoding)) { - LOG.warn(String.format("您配置的encoding为[%s], 使用默认值[%s]", encoding, - Constant.DEFAULT_ENCODING)); encoding = Constant.DEFAULT_ENCODING; } String compress = config.getString(Key.COMPRESS); @@ -212,10 +197,7 @@ public class UnstructuredStorageWriterUtil { } else { throw DataXException .asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format( - "仅支持 gzip, bzip2 文件压缩格式 , 不支持您配置的文件压缩格式: [%s]", - compress)); + UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, compress); } } UnstructuredStorageWriterUtil.doWriteToStream(lineReceiver, writer, @@ -223,24 +205,21 @@ public class UnstructuredStorageWriterUtil { } catch (UnsupportedEncodingException uee) { throw DataXException .asDataXException( - UnstructuredStorageWriterErrorCode.Write_FILE_WITH_CHARSET_ERROR, - String.format("不支持的编码格式 : [%s]", encoding), uee); + UnstructuredStorageWriterErrorCode.Write_FILE_WITH_CHARSET_ERROR, uee); } catch (NullPointerException e) { throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.RUNTIME_EXCEPTION, - "运行时错误, 请联系我们", e); + UnstructuredStorageWriterErrorCode.RUNTIME_EXCEPTION,e); } catch (IOException e) { throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.Write_FILE_IO_ERROR, - String.format("流写入错误 : [%s]", context), e); + UnstructuredStorageWriterErrorCode.Write_FILE_IO_ERROR, e); } finally { IOUtils.closeQuietly(writer); } } private static void doWriteToStream(RecordReceiver lineReceiver, - BufferedWriter writer, String contex, Configuration config, - TaskPluginCollector taskPluginCollector) throws IOException { + BufferedWriter writer, String contex, Configuration config, + TaskPluginCollector taskPluginCollector) throws IOException { String nullFormat = config.getString(Key.NULL_FORMAT); @@ -252,26 +231,9 @@ public class UnstructuredStorageWriterUtil { } // warn: default false - String fileFormat = config.getString(Key.FILE_FORMAT, - Constant.FILE_FORMAT_TEXT); + String fileFormat = config.getString(Key.FILE_FORMAT, Constant.FILE_FORMAT_TEXT); - String delimiterInStr = config.getString(Key.FIELD_DELIMITER); - if (null != delimiterInStr && 1 != delimiterInStr.length()) { - throw DataXException.asDataXException( - UnstructuredStorageWriterErrorCode.ILLEGAL_VALUE, - String.format("仅仅支持单字符切分, 您配置的切分为 : [%s]", delimiterInStr)); - } - if (null == delimiterInStr) { - LOG.warn(String.format("您没有配置列分隔符, 使用默认值[%s]", - Constant.DEFAULT_FIELD_DELIMITER)); - } - - // warn: fieldDelimiter could not be '' for no fieldDelimiter - char fieldDelimiter = config.getChar(Key.FIELD_DELIMITER, - Constant.DEFAULT_FIELD_DELIMITER); - - UnstructuredWriter unstructuredWriter = TextCsvWriterManager - .produceUnstructuredWriter(fileFormat, fieldDelimiter, writer); + UnstructuredWriter unstructuredWriter = produceUnstructuredWriter(fileFormat, config, writer); List headers = config.getList(Key.HEADER, String.class); if (null != headers && !headers.isEmpty()) { @@ -279,22 +241,38 @@ public class UnstructuredStorageWriterUtil { } Record record = null; + String byteEncoding = config.getString(Key.BYTE_ENCODING); while ((record = lineReceiver.getFromReader()) != null) { UnstructuredStorageWriterUtil.transportOneRecord(record, nullFormat, dateParse, taskPluginCollector, - unstructuredWriter); + unstructuredWriter, byteEncoding); } // warn:由调用方控制流的关闭 // IOUtils.closeQuietly(unstructuredWriter); } + public static UnstructuredWriter produceUnstructuredWriter(String fileFormat, Configuration config, Writer writer){ + UnstructuredWriter unstructuredWriter = null; + if (StringUtils.equalsIgnoreCase(fileFormat, Constant.FILE_FORMAT_CSV)) { + + Character fieldDelimiter = config.getChar(Key.FIELD_DELIMITER, Constant.DEFAULT_FIELD_DELIMITER); + unstructuredWriter = TextCsvWriterManager.produceCsvWriter(writer, fieldDelimiter, config); + } else if (StringUtils.equalsIgnoreCase(fileFormat, Constant.FILE_FORMAT_TEXT)) { + + String fieldDelimiter = config.getString(Key.FIELD_DELIMITER, String.valueOf(Constant.DEFAULT_FIELD_DELIMITER)); + unstructuredWriter = TextCsvWriterManager.produceTextWriter(writer, fieldDelimiter, config); + } + + return unstructuredWriter; + } + /** * 异常表示脏数据 * */ public static void transportOneRecord(Record record, String nullFormat, - DateFormat dateParse, TaskPluginCollector taskPluginCollector, - UnstructuredWriter unstructuredWriter) { + DateFormat dateParse, TaskPluginCollector taskPluginCollector, + UnstructuredWriter unstructuredWriter, String byteEncoding) { // warn: default is null if (null == nullFormat) { nullFormat = "null"; @@ -309,7 +287,15 @@ public class UnstructuredStorageWriterUtil { if (null != column.getRawData()) { boolean isDateColumn = column instanceof DateColumn; if (!isDateColumn) { - splitedRows.add(column.asString()); + if (column instanceof BytesColumn) { + if ("base64".equalsIgnoreCase(byteEncoding)) { + splitedRows.add(Base64.encodeBase64String(column.asBytes())); + } else { + splitedRows.add(column.asString()); + } + } else { + splitedRows.add(column.asString()); + } } else { if (null != dateParse) { splitedRows.add(dateParse.format(column @@ -325,9 +311,18 @@ public class UnstructuredStorageWriterUtil { } } unstructuredWriter.writeOneRecord(splitedRows); - } catch (Exception e) { + } catch (IllegalArgumentException e){ // warn: dirty data taskPluginCollector.collectDirtyRecord(record, e); + } catch (DataXException e){ + // warn: dirty data + taskPluginCollector.collectDirtyRecord(record, e); + } catch (Exception e) { + // throw exception, it is not dirty data, + // may be network unreachable and the other problem + throw DataXException.asDataXException( + UnstructuredStorageWriterErrorCode.Write_ERROR, e.getMessage(),e); } } + } diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterErrorCode.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterErrorCode.java new file mode 100755 index 00000000..77e51026 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterErrorCode.java @@ -0,0 +1,33 @@ +package com.alibaba.datax.plugin.unstructuredstorage.writer.binaryFileUtil; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum BinaryFileWriterErrorCode implements ErrorCode { + ILLEGAL_VALUE("UnstructuredStorageWriter-00", "errorcode.illegal_value"), + REPEATED_FILE_NAME("UnstructuredStorageWriter-01", "errorcode.repeated_file_name"), + REQUIRED_VALUE("UnstructuredStorageWriter-02","errorcode.required_value"),; + + private final String code; + private final String description; + + private BinaryFileWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s].", this.code, + this.description); + } +} diff --git a/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterUtil.java b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterUtil.java new file mode 100644 index 00000000..e2c9ad16 --- /dev/null +++ b/plugin-unstructured-storage-util/src/main/java/com/alibaba/datax/plugin/unstructuredstorage/writer/binaryFileUtil/BinaryFileWriterUtil.java @@ -0,0 +1,126 @@ +package com.alibaba.datax.plugin.unstructuredstorage.writer.binaryFileUtil; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderErrorCode; +import com.alibaba.datax.plugin.unstructuredstorage.writer.Key; +import com.alibaba.datax.plugin.unstructuredstorage.writer.UnstructuredStorageWriterErrorCode; +import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.*; + +/** + * @Author: guxuan + * @Date 2022-05-17 17:01 + */ +public class BinaryFileWriterUtil { + + private static final Logger LOG = LoggerFactory.getLogger(BinaryFileWriterUtil.class); + + + /** + * 从RecordReceiver获取源文件Bytes数组, 写到目的端 + * + * @param outputStream: 写文件流 + * @param recordReceiver: RecordReceiver + */ + public static void writeFileFromRecordReceiver(OutputStream outputStream, RecordReceiver recordReceiver) { + try { + Record record; + while ((record = recordReceiver.getFromReader()) != null) { + Column column = record.getColumn(0); + outputStream.write(column.asBytes()); + } + outputStream.flush(); + LOG.info("End write!!!"); + } catch (IOException e) { + throw DataXException.asDataXException(UnstructuredStorageReaderErrorCode.READ_FILE_IO_ERROR, e); + } + } + + /** + * 校验同步二进制文件的参数 + * + * @param writerConfiguration: writer的配置 + */ + public static void validateParameter(Configuration writerConfiguration) { + // writeMode check + String writeMode = writerConfiguration.getNecessaryValue( + Key.WRITE_MODE, + UnstructuredStorageWriterErrorCode.REQUIRED_VALUE); + writeMode = writeMode.trim(); + Set supportedWriteModes = Sets.newHashSet(TRUNCATE, NOCONFLICT); + if (!supportedWriteModes.contains(writeMode)) { + throw DataXException + .asDataXException( + BinaryFileWriterErrorCode.ILLEGAL_VALUE, + String.format("Synchronous binary format file, only supports truncate and nonConflict modes, does not support the writeMode mode you configured: %s", writeMode)); + } + writerConfiguration.set(Key.WRITE_MODE, writeMode); + } + + /** + * 校验文件名是否有重复的,如果有重复的文件名则抛出异常 + * @param fileNameList + */ + public static void checkFileNameIfRepeatedThrowException(List fileNameList) { + Set sourceFileNameSet = new HashSet(); + for (String fileName : fileNameList) { + if (!sourceFileNameSet.contains(fileName)) { + sourceFileNameSet.add(fileName); + } else { + throw DataXException.asDataXException(BinaryFileWriterErrorCode.REPEATED_FILE_NAME, + String.format("Source File Name [%s] is repeated!", fileName)); + } + } + } + + /** + * + * @param readerSplitConfigs + * @param writerSliceConfig + * @return 切分后的结果 + */ + public static List split(List readerSplitConfigs, Configuration writerSliceConfig) { + List writerSplitConfigs = new ArrayList(); + + for (Configuration readerSliceConfig : readerSplitConfigs) { + Configuration splitedTaskConfig = writerSliceConfig.clone(); + String fileName = getFileName(readerSliceConfig.getString(SOURCE_FILE)); + splitedTaskConfig + .set(com.alibaba.datax.plugin.unstructuredstorage.writer.Key.FILE_NAME, fileName); + splitedTaskConfig. + set(com.alibaba.datax.plugin.unstructuredstorage.writer.Constant.BINARY, true); + writerSplitConfigs.add(splitedTaskConfig); + } + LOG.info("end do split."); + return writerSplitConfigs; + } + + /** + * 根据文件路径获取到文件名, filePath必定包含了文件名 + * + * @param filePath: 文件路径 + */ + public static String getFileName(String filePath) { + if (StringUtils.isBlank(filePath)) { + return null; + } + File file = new File(filePath); + return file.getName(); + } +} diff --git a/pom.xml b/pom.xml index 3bd75a31..1d298eb6 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 3.3.2 1.10 1.2 - 1.1.46.sec10 + 1.2.49 16.0.1 3.7.2.1-SNAPSHOT @@ -53,60 +53,71 @@ postgresqlreader kingbaseesreader oraclereader + cassandrareader + oceanbasev10reader + rdbmsreader + odpsreader otsreader otsstreamreader - txtfilereader - hdfsreader - streamreader - ossreader - ftpreader - mongodbreader - rdbmsreader hbase11xreader hbase094xreader + hbase11xsqlreader + hbase20xsqlreader + + ossreader + hdfsreader + ftpreader + txtfilereader + streamreader + + mongodbreader + tdenginereader + gdbreader tsdbreader opentsdbreader - cassandrareader - gdbreader - oceanbasev10reader + mysqlwriter drdswriter - odpswriter - txtfilewriter - ftpwriter - hdfswriter - streamwriter - otswriter oraclewriter sqlserverwriter postgresqlwriter kingbaseeswriter - osswriter - mongodbwriter adswriter - ocswriter + oceanbasev10writer + cassandrawriter + clickhousewriter + adbpgwriter + hologresjdbcwriter rdbmswriter + + + odpswriter + osswriter + otswriter hbase11xwriter hbase094xwriter hbase11xsqlwriter - hbase11xsqlreader + hbase20xsqlwriter + kuduwriter + ftpwriter + hdfswriter + txtfilewriter + streamwriter + elasticsearchwriter + mongodbwriter + tdenginewriter + ocswriter tsdbwriter - adbpgwriter gdbwriter - cassandrawriter - clickhousewriter oscarwriter - oceanbasev10writer + plugin-rdbms-util plugin-unstructured-storage-util - hbase20xsqlreader - hbase20xsqlwriter - kuduwriter @@ -182,6 +193,17 @@ 1.9.5 test + + org.apache.logging.log4j + log4j-api + 2.17.1 + + + + org.apache.logging.log4j + log4j-core + 2.17.1 + @@ -197,6 +219,17 @@ true + + spring + spring + https://maven.aliyun.com/repository/spring + + true + + + true + + diff --git a/postgresqlreader/doc/postgresqlreader.md b/postgresqlreader/doc/postgresqlreader.md index fed2c7e9..02c354ab 100644 --- a/postgresqlreader/doc/postgresqlreader.md +++ b/postgresqlreader/doc/postgresqlreader.md @@ -48,7 +48,7 @@ PostgresqlReader插件实现了从PostgreSQL读取数据。在底层实现上, // 数据库连接密码 "password": "xx", "column": [ - "id","name" + "id","name" ], //切分主键 "splitPk": "id", diff --git a/postgresqlreader/pom.xml b/postgresqlreader/pom.xml index e7f90325..410d10a2 100755 --- a/postgresqlreader/pom.xml +++ b/postgresqlreader/pom.xml @@ -45,7 +45,7 @@ org.postgresql postgresql - 9.3-1102-jdbc4 + 42.3.3 diff --git a/postgresqlwriter/pom.xml b/postgresqlwriter/pom.xml index c3240e04..1c9edaf6 100755 --- a/postgresqlwriter/pom.xml +++ b/postgresqlwriter/pom.xml @@ -43,7 +43,7 @@ org.postgresql postgresql - 9.3-1102-jdbc4 + 42.3.3 diff --git a/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java b/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java index 22dc0c1e..2d38db35 100755 --- a/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java +++ b/postgresqlwriter/src/main/java/com/alibaba/datax/plugin/writer/postgresqlwriter/PostgresqlWriter.java @@ -67,6 +67,8 @@ public class PostgresqlWriter extends Writer { public String calcValueHolder(String columnType){ if("serial".equalsIgnoreCase(columnType)){ return "?::int"; + }else if("bigserial".equalsIgnoreCase(columnType)){ + return "?::int8"; }else if("bit".equalsIgnoreCase(columnType)){ return "?::bit varying"; } diff --git a/rdbmsreader/doc/rdbmsreader.md b/rdbmsreader/doc/rdbmsreader.md index dd3039e9..fd8ae103 100644 --- a/rdbmsreader/doc/rdbmsreader.md +++ b/rdbmsreader/doc/rdbmsreader.md @@ -138,7 +138,7 @@ RDBMSReader插件实现了从RDBMS读取数据。在底层实现上,RDBMSReade **rdbmswriter如何增加新的数据库支持:** - - 进入rdbmsreader对应目录,这里${DATAX_HOME}为DataX主目录,即: ${DATAX_HOME}/plugin/reader/rdbmswriter + - 进入rdbmsreader对应目录,这里${DATAX_HOME}为DataX主目录,即: ${DATAX_HOME}/plugin/reader/rdbmsreader - 在rdbmsreader插件目录下有plugin.json配置文件,在此文件中注册您具体的数据库驱动,具体放在drivers数组中。rdbmsreader插件在任务执行时会动态选择合适的数据库驱动连接数据库。 diff --git a/sqlserverwriter/doc/sqlserverwriter.md b/sqlserverwriter/doc/sqlserverwriter.md index 255834c6..cdaf1526 100644 --- a/sqlserverwriter/doc/sqlserverwriter.md +++ b/sqlserverwriter/doc/sqlserverwriter.md @@ -127,7 +127,7 @@ SqlServerWriter 通过 DataX 框架获取 Reader 生成的协议数据,根据 * **column** - * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。如果要依次写入全部列,使用*表示, 例如: "column": ["*"] + * 描述:目的表需要写入数据的字段,字段之间用英文逗号分隔。例如: "column": ["id","name","age"]。如果要依次写入全部列,使用*表示, 例如: "column": ["\*"] **column配置项必须指定,不能留空!** diff --git a/tdenginereader/doc/tdenginereader-CN.md b/tdenginereader/doc/tdenginereader-CN.md new file mode 100644 index 00000000..e9502756 --- /dev/null +++ b/tdenginereader/doc/tdenginereader-CN.md @@ -0,0 +1,195 @@ +# DataX TDengineReader + +## 1 快速介绍 + +TDengineReader 插件实现了 TDengine 读取数据的功能。 + +## 2 实现原理 + +TDengineReader 通过 TDengine 的 JDBC driver 查询获取数据。 + +## 3 功能说明 + +### 3.1 配置样例 + +* 配置一个从 TDengine 抽取数据作业: + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + ] + } + ], + "column": [ + "ts", + "current", + "voltage", + "phase" + ], + "where": "ts>=0", + "beginDateTime": "2017-07-14 10:40:00", + "endDateTime": "2017-08-14 10:40:00" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +* 配置一个自定义 SQL 的数据抽取作业: + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "user": "root", + "password": "taosdata", + "connection": [ + { + "querySql": [ + "select * from test.meters" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/test?timestampFormat=TIMESTAMP" + ] + } + ] + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* **username** + * 描述:TDengine 实例的用户名
+ * 必选:是
+ * 默认值:无
+* **password** + * 描述:TDengine 实例的密码
+ * 必选:是
+ * 默认值:无
+* **jdbcUrl** + * 描述:TDengine 数据库的JDBC连接信息。注意,jdbcUrl必须包含在connection配置单元中。JdbcUrl具体请参看TDengine官方文档。 + * 必选:是
+ * 默认值:无
+* **querySql** + * 描述:在有些业务场景下,where 这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了 querySql 后, TDengineReader 就会忽略 table, column, + where, beginDateTime, endDateTime这些配置型,直接使用这个配置项的内容对数据进行筛选。例如需要 进行多表join后同步数据,使用 select a,b from table_a join + table_b on table_a.id = table_b.id
+ * 必选:否
+ * 默认值:无
+* **table** + * 描述:所选取的需要同步的表。使用 JSON 的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需保证多张表是同一 schema 结构, TDengineReader不予检查表是否同一逻辑表。注意,table必须包含在 + connection 配置单元中。
+ * 必选:是
+ * 默认值:无
+* **where** + * 描述:筛选条件中的 where 子句,TDengineReader 根据指定的column, table, where, begingDateTime, endDateTime 条件拼接 SQL,并根据这个 SQL + 进行数据抽取。
+ * 必选:否
+ * 默认值:无
+* **beginDateTime** + * 描述:数据的开始时间,Job 迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
+ * 必选:否
+ * 默认值:无
+* **endDateTime** + * 描述:数据的结束时间,Job 迁移从 begineDateTime 到 endDateTime 的数据,格式为 yyyy-MM-dd HH:mm:ss
+ * 必选:否
+ * 默认值:无
+ +### 3.3 类型转换 + +| TDengine 数据类型 | DataX 内部类型 | +| --------------- | ------------- | +| TINYINT | Long | +| SMALLINT | Long | +| INTEGER | Long | +| BIGINT | Long | +| FLOAT | Double | +| DOUBLE | Double | +| BOOLEAN | Bool | +| TIMESTAMP | Date | +| BINARY | Bytes | +| NCHAR | String | + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +#### 4.1.2 机器参数 + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数| DataX速度(Rec/s)|DataX流量(MB/s)| DataX机器网卡流出流量(MB/s)|DataX机器运行负载|DB网卡进入流量(MB/s)|DB运行负载|DB TPS| +|--------| --------|--------|--------|--------|--------|--------|--------| +|1| | | | | | | | +|4| | | | | | | | +|8| | | | | | | | +|16| | | | | | | | +|32| | | | | | | | + +说明: + +#### 4.2.4 性能测试小结 + +1. +2. + +## 5 约束限制 + +## FAQ \ No newline at end of file diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml new file mode 100644 index 00000000..319152f8 --- /dev/null +++ b/tdenginereader/pom.xml @@ -0,0 +1,135 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + tdenginereader + + + 8 + 8 + + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + com.alibaba + fastjson + 1.2.78 + + + + com.alibaba.datax.tdenginewriter + tdenginewriter + 0.0.1-SNAPSHOT + compile + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.37 + + + com.alibaba + fastjson + + + + + + junit + junit + ${junit-version} + test + + + com.alibaba.datax + plugin-rdbms-util + 0.0.1-SNAPSHOT + compile + + + + com.alibaba.datax + datax-core + 0.0.1-SNAPSHOT + test + + + + + + + + + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginereader/src/main/assembly/package.xml b/tdenginereader/src/main/assembly/package.xml new file mode 100755 index 00000000..b52f20fb --- /dev/null +++ b/tdenginereader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/reader/tdenginereader + + + target/ + + tdenginereader-0.0.1-SNAPSHOT.jar + + plugin/reader/tdenginereader + + + + + + false + plugin/reader/tdenginereader/libs + runtime + + + diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java new file mode 100644 index 00000000..37977794 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -0,0 +1,265 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.element.*; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.tdenginewriter.Key; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; +import java.sql.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class TDengineReader extends Reader { + + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public static class Job extends Reader.Job { + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + private Configuration originalConfig; + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + // check username + String username = this.originalConfig.getString(Key.USERNAME); + if (StringUtils.isBlank(username)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.USERNAME + "] is not set."); + + // check password + String password = this.originalConfig.getString(Key.PASSWORD); + if (StringUtils.isBlank(password)) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.PASSWORD + "] is not set."); + + // check connection + List connectionList = this.originalConfig.getListConfiguration(Key.CONNECTION); + if (connectionList == null || connectionList.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.CONNECTION + "] is not set."); + for (int i = 0; i < connectionList.size(); i++) { + Configuration conn = connectionList.get(i); + // check jdbcUrl + List jdbcUrlList = conn.getList(Key.JDBC_URL); + if (jdbcUrlList == null || jdbcUrlList.isEmpty()) { + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.JDBC_URL + "] of connection[" + (i + 1) + "] is not set."); + } + // check table/querySql + List querySqlList = conn.getList(Key.QUERY_SQL); + if (querySqlList == null || querySqlList.isEmpty()) { + String querySql = conn.getString(Key.QUERY_SQL); + if (StringUtils.isBlank(querySql)) { + List table = conn.getList(Key.TABLE); + if (table == null || table.isEmpty()) + throw DataXException.asDataXException(TDengineReaderErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.TABLE + "] of connection[" + (i + 1) + "] is not set."); + } + } + } + + SimpleDateFormat format = new SimpleDateFormat(DATETIME_FORMAT); + // check beginDateTime + String beginDatetime = this.originalConfig.getString(Key.BEGIN_DATETIME); + long start = Long.MIN_VALUE; + if (!StringUtils.isBlank(beginDatetime)) { + try { + start = format.parse(beginDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.BEGIN_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + } + // check endDateTime + String endDatetime = this.originalConfig.getString(Key.END_DATETIME); + long end = Long.MAX_VALUE; + if (!StringUtils.isBlank(endDatetime)) { + try { + end = format.parse(endDatetime).getTime(); + } catch (ParseException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.END_DATETIME + "] needs to conform to the [" + DATETIME_FORMAT + "] format."); + } + } + if (start >= end) + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, + "The parameter " + Key.BEGIN_DATETIME + ": " + beginDatetime + " should be less than the parameter " + Key.END_DATETIME + ": " + endDatetime + "."); + + } + + @Override + public void destroy() { + + } + + @Override + public List split(int adviceNumber) { + List configurations = new ArrayList<>(); + + List connectionList = this.originalConfig.getListConfiguration(Key.CONNECTION); + for (Configuration conn : connectionList) { + List jdbcUrlList = conn.getList(Key.JDBC_URL, String.class); + for (String jdbcUrl : jdbcUrlList) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conn.getList(Key.TABLE)); + clone.set(Key.QUERY_SQL, conn.getList(Key.QUERY_SQL)); + clone.remove(Key.CONNECTION); + configurations.add(clone); + } + } + + return configurations; + } + } + + public static class Task extends Reader.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private Configuration readerSliceConfig; + private String mandatoryEncoding; + private Connection conn; + + private List tables; + private List columns; + private String startTime; + private String endTime; + private String where; + private List querySql; + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException ignored) { + LOG.warn(ignored.getMessage(), ignored); + } + } + + @Override + public void init() { + this.readerSliceConfig = super.getPluginJobConf(); + + String user = readerSliceConfig.getString(Key.USERNAME); + String password = readerSliceConfig.getString(Key.PASSWORD); + + String url = readerSliceConfig.getString(Key.JDBC_URL); + try { + this.conn = DriverManager.getConnection(url, user, password); + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.CONNECTION_FAILED, + "The parameter [" + Key.JDBC_URL + "] : " + url + " failed to connect since: " + e.getMessage(), e); + } + + this.tables = readerSliceConfig.getList(Key.TABLE, String.class); + this.columns = readerSliceConfig.getList(Key.COLUMN, String.class); + this.startTime = readerSliceConfig.getString(Key.BEGIN_DATETIME); + this.endTime = readerSliceConfig.getString(Key.END_DATETIME); + this.where = readerSliceConfig.getString(Key.WHERE, "_c0 > " + Long.MIN_VALUE); + this.querySql = readerSliceConfig.getList(Key.QUERY_SQL, String.class); + this.mandatoryEncoding = readerSliceConfig.getString(Key.MANDATORY_ENCODING, "UTF-8"); + } + + @Override + public void destroy() { + try { + if (conn != null) + conn.close(); + } catch (SQLException e) { + LOG.error(e.getMessage(), e); + } + } + + @Override + public void startRead(RecordSender recordSender) { + List sqlList = new ArrayList<>(); + + if (querySql == null || querySql.isEmpty()) { + for (String table : tables) { + StringBuilder sb = new StringBuilder(); + sb.append("select ").append(StringUtils.join(columns, ",")).append(" from ").append(table).append(" "); + sb.append("where ").append(where); + if (!StringUtils.isBlank(startTime)) { + sb.append(" and _c0 >= '").append(startTime).append("'"); + } + if (!StringUtils.isBlank(endTime)) { + sb.append(" and _c0 < '").append(endTime).append("'"); + } + String sql = sb.toString().trim(); + sqlList.add(sql); + } + } else { + sqlList.addAll(querySql); + } + + for (String sql : sqlList) { + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery(sql); + while (rs.next()) { + Record record = buildRecord(recordSender, rs, mandatoryEncoding); + recordSender.sendToWriter(record); + } + } catch (SQLException e) { + LOG.error(e.getMessage(), e); + } + } + } + + private Record buildRecord(RecordSender recordSender, ResultSet rs, String mandatoryEncoding) { + Record record = recordSender.createRecord(); + try { + ResultSetMetaData metaData = rs.getMetaData(); + for (int i = 1; i <= metaData.getColumnCount(); i++) { + int columnType = metaData.getColumnType(i); + switch (columnType) { + case Types.SMALLINT: + case Types.TINYINT: + case Types.INTEGER: + case Types.BIGINT: + record.addColumn(new LongColumn(rs.getString(i))); + break; + case Types.FLOAT: + case Types.DOUBLE: + record.addColumn(new DoubleColumn(rs.getString(i))); + break; + case Types.BOOLEAN: + record.addColumn(new BoolColumn(rs.getBoolean(i))); + break; + case Types.TIMESTAMP: + record.addColumn(new DateColumn(rs.getTimestamp(i))); + break; + case Types.BINARY: + record.addColumn(new BytesColumn(rs.getBytes(i))); + break; + case Types.NCHAR: + String rawData; + if (StringUtils.isBlank(mandatoryEncoding)) { + rawData = rs.getString(i); + } else { + rawData = new String((rs.getBytes(i) == null ? new byte[0] : rs.getBytes(i)), mandatoryEncoding); + } + record.addColumn(new StringColumn(rawData)); + break; + } + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "database query error!", e); + } catch (UnsupportedEncodingException e) { + throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, "illegal mandatoryEncoding", e); + } + return record; + } + } + + +} diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java new file mode 100644 index 00000000..b784ab06 --- /dev/null +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReaderErrorCode.java @@ -0,0 +1,34 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineReaderErrorCode implements ErrorCode { + + REQUIRED_VALUE("TDengineReader-00", "parameter value is missing"), + ILLEGAL_VALUE("TDengineReader-01", "invalid parameter value"), + CONNECTION_FAILED("TDengineReader-02", "connection error"), + RUNTIME_EXCEPTION("TDengineWriter-03", "runtime exception"); + + private final String code; + private final String description; + + TDengineReaderErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, this.description); + } +} diff --git a/tdenginereader/src/main/resources/plugin.json b/tdenginereader/src/main/resources/plugin.json new file mode 100755 index 00000000..7ccdbe63 --- /dev/null +++ b/tdenginereader/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginereader", + "class": "com.alibaba.datax.plugin.reader.TDengineReader", + "description": { + "useScene": "data migration from tdengine", + "mechanism": "use JDBC to read data from tdengine." + }, + "developer": "zyyang-taosdata" +} \ No newline at end of file diff --git a/tdenginereader/src/main/resources/plugin_job_template.json b/tdenginereader/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..934fe96a --- /dev/null +++ b/tdenginereader/src/main/resources/plugin_job_template.json @@ -0,0 +1,23 @@ +{ + "name": "tdenginereader", + "parameter": { + "user": "", + "password": "", + "connection": [ + { + "table": [ + "" + ], + "jdbcUrl": [ + "" + ] + } + ], + "column": [ + "" + ], + "beginDateTime": "", + "endDateTime": "", + "where": "" + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java new file mode 100644 index 00000000..e1064717 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2DMTest.java @@ -0,0 +1,86 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Random; + +@Ignore +public class TDengine2DMTest { + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.0.72"; + + private final Random random = new Random(System.currentTimeMillis()); + + @Test + public void t2dm_case01() throws Throwable { + // given + createSupTable("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void t2dm_case02() throws Throwable { + // given + createSupTable("us"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void t2dm_case03() throws Throwable { + // given + createSupTable("ns"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2dm.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createSupTable(String precision) throws SQLException { + final String url = "jdbc:TAOS-RS://" + host1 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1 precision '" + precision + "'"); + stmt.execute("create table db1.stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(100))"); + + for (int i = 1; i <= 10; i++) { + stmt.execute("insert into db1.tb" + i + " using db1.stb1 tags(now, " + random.nextInt(10) + "," + + random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextInt(10) + "," + + random.nextFloat() + "," + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123'," + + "'北京朝阳望京') values(now+" + i + "s, " + random.nextInt(10) + "," + random.nextInt(10) + "," + + +random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123','北京朝阳望京')"); + } + stmt.close(); + } + + final String url2 = "jdbc:dm://" + host2 + ":5236"; + try (Connection conn = DriverManager.getConnection(url2, "TESTUSER", "test123456")) { + conn.setAutoCommit(true); + Statement stmt = conn.createStatement(); + stmt.execute("drop table if exists stb2"); + stmt.execute("create table stb2(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 BIT, f8 VARCHAR(100), f9 VARCHAR2(200), t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 BIT, t9 VARCHAR(100), t10 VARCHAR2(200))"); + } + } + +} diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java new file mode 100644 index 00000000..f628a648 --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengine2StreamTest.java @@ -0,0 +1,66 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Random; + +@Ignore +public class TDengine2StreamTest { + + private static final String host = "192.168.56.105"; + private static final Random random = new Random(System.currentTimeMillis()); + + @Test + public void case01() throws Throwable { + // given + prepare("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2stream-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case02() throws Throwable { + // given + prepare("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2stream-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + + private void prepare(String precision) throws SQLException { + final String url = "jdbc:TAOS-RS://" + host + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1 precision '" + precision + "'"); + stmt.execute("create table db1.stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, t3 smallint, " + + "t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(100))"); + + for (int i = 1; i <= 10; i++) { + stmt.execute("insert into db1.tb" + i + " using db1.stb1 tags(now, " + random.nextInt(10) + "," + + random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextInt(10) + "," + + random.nextFloat() + "," + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123'," + + "'北京朝阳望京') values(now+" + i + "s, " + random.nextInt(10) + "," + random.nextInt(10) + "," + + +random.nextInt(10) + "," + random.nextInt(10) + "," + random.nextFloat() + "," + + random.nextDouble() + "," + random.nextBoolean() + ",'abcABC123','北京朝阳望京')"); + } + stmt.close(); + } + } + + +} diff --git a/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java new file mode 100644 index 00000000..491ddbaf --- /dev/null +++ b/tdenginereader/src/test/java/com/alibaba/datax/plugin/reader/TDengineReaderTest.java @@ -0,0 +1,153 @@ +package com.alibaba.datax.plugin.reader; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.tdenginewriter.Key; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class TDengineReaderTest { + + @Test + public void jobInit_case01() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"where\":\"_c0 > 0\"," + + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + + "\"endDateTime\": \"2021-01-01 12:00:00\"" + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString(Key.USERNAME)); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("weather", conf.getString("connection[0].table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl[0]")); + Assert.assertEquals("2021-01-01 00:00:00", conf.getString("beginDateTime")); + Assert.assertEquals("2021-01-01 12:00:00", conf.getString("endDateTime")); + Assert.assertEquals("_c0 > 0", conf.getString("where")); + } + + + @Test + public void jobInit_case02() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"querySql\":[\"select * from weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString(Key.USERNAME)); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl[0]")); + Assert.assertEquals("select * from weather", conf.getString("connection[0].querySql[0]")); + } + + @Test + public void jobSplit_case01() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "\"where\":\"_c0 > 0\"," + + "\"beginDateTime\": \"2021-01-01 00:00:00\"," + + "\"endDateTime\": \"2021-01-01 12:00:00\"" + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(1, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("_c0 > 0", conf.getString("where")); + Assert.assertEquals("weather", conf.getString("table[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + + } + + @Test + public void jobSplit_case02() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"querySql\":[\"select * from weather\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\"]}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(1, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("select * from weather", conf.getString("querySql[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + } + + @Test + public void jobSplit_case03() { + // given + TDengineReader.Job job = new TDengineReader.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"connection\": [{\"querySql\":[\"select * from weather\",\"select * from test.meters\"],\"jdbcUrl\":[\"jdbc:TAOS-RS://master:6041/test\", \"jdbc:TAOS://master:6030/test\"]}]," + + "\"column\": [\"ts\",\"current\",\"voltage\",\"phase\"]," + + "}"); + job.setPluginJobConf(configuration); + + // when + job.init(); + List configurationList = job.split(1); + + // assert + Assert.assertEquals(2, configurationList.size()); + Configuration conf = configurationList.get(0); + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("select * from weather", conf.getString("querySql[0]")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + + Configuration conf1 = configurationList.get(1); + Assert.assertEquals("root", conf1.getString("username")); + Assert.assertEquals("taosdata", conf1.getString("password")); + Assert.assertEquals("select * from weather", conf1.getString("querySql[0]")); + Assert.assertEquals("select * from test.meters", conf1.getString("querySql[1]")); + Assert.assertEquals("jdbc:TAOS://master:6030/test", conf1.getString("jdbcUrl")); + } + +} \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2dm.json b/tdenginereader/src/test/resources/t2dm.json new file mode 100644 index 00000000..d87ade0c --- /dev/null +++ b/tdenginereader/src/test/resources/t2dm.json @@ -0,0 +1,52 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2stream-1.json b/tdenginereader/src/test/resources/t2stream-1.json new file mode 100644 index 00000000..183ab7e2 --- /dev/null +++ b/tdenginereader/src/test/resources/t2stream-1.json @@ -0,0 +1,47 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "t1", + "t2" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] + } + ], + "where": "t10 = '北京朝阳望京'", + "beginDateTime": "2022-03-07 12:00:00", + "endDateTime": "2022-03-07 19:00:00" + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginereader/src/test/resources/t2stream-2.json b/tdenginereader/src/test/resources/t2stream-2.json new file mode 100644 index 00000000..15bfe9be --- /dev/null +++ b/tdenginereader/src/test/resources/t2stream-2.json @@ -0,0 +1,37 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "querySql": [ + "select * from stb1 where t10 = '北京朝阳望京' and _c0 >= '2022-03-07 12:00:00' and _c0 < '2022-03-07 19:00:00'" + ], + "jdbcUrl": [ + "jdbc:TAOS-RS://192.168.56.105:6041/db1" + ] + } + ] + } + }, + "writer": { + "name": "streamwriter", + "parameter": { + "encoding": "UTF-8", + "print": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/doc/tdenginewriter-CN.md b/tdenginewriter/doc/tdenginewriter-CN.md new file mode 100644 index 00000000..54cb9b13 --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter-CN.md @@ -0,0 +1,245 @@ +# DataX TDengineWriter + +简体中文| [English](./tdenginewriter.md) + +## 1 快速介绍 + +TDengineWriter插件实现了写入数据到TDengine数据库目标表的功能。底层实现上,TDengineWriter通过JDBC连接TDengine,按照TDengine的SQL语法,执行insert语句/schemaless语句,将数据写入TDengine。 + +TDengineWriter可以作为数据迁移工具供DBA将其它数据库的数据导入到TDengine。 + + + +## 2 实现原理 + +TDengineWriter 通过 DataX 框架获取 Reader生成的协议数据,通过JDBC Driver连接TDengine,执行insert语句/schemaless语句,将数据写入TDengine。 + +在TDengine中,table可以分成超级表、子表、普通表三种类型,超级表和子表包括colum和tag,子表的tag列的值为固定值,普通表与关系型数据库中表的概念一致。(详细请参考:[数据模型](https://www.taosdata.com/docs/cn/v2.0/architecture#model) ) + +TDengineWriter支持向超级表、子表、普通表中写入数据,按照table的类型和column参数中是否包含tbname,使用以下方法进行写入: + +1. table为超级表,column中指定tbname:使用自动建表的insert语句,使用tbname作为子表的名称。 +2. table为超级表,column中未指定tbname:使用schemaless写入,TDengine会根据超级表名、tag值计算一个子表名称。 +3. table为子表:使用insert语句写入,ignoreTagUnmatched参数为true时,忽略record中tag值与table的tag值不一致的数据。 +4. table为普通表:使用insert语句写入。 + + + +## 3 功能说明 +### 3.1 配置样例 + +配置一个写入TDengine的作业 +先在TDengine上创建超级表: + +```sql +create database if not exists test; +create table test.weather (ts timestamp, temperature int, humidity double) tags(is_normal bool, device_id binary(100), address nchar(100)); +``` + +使用下面的Job配置,将数据写入TDengine: + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } + ], + "sliceRecordCount": 1 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 参数说明 + +* jdbcUrl + * 描述:数据源的JDBC连接信息,TDengine的JDBC信息请参考:[Java连接器的使用](https://www.taosdata.com/docs/cn/v2.0/connector/java#url) + * 必选:是 + * 默认值:无 +* username + * 描述:用户名 + * 必选:是 + * 默认值:无 +* password + * 描述:用户名的密码 + * 必选:是 + * 默认值:无 +* table + * 描述:表名的集合,table应该包含column参数中的所有列(tbname除外)。注意,column中的tbname会被当作TDengine中子表名使用。 + * 必选:是 + * 默认值:无 +* column + * 描述:字段名的集合,字段的顺序应该与record中column的 + * 必选:是 + * 默认值:无 +* batchSize + * 描述:每batchSize条record为一个batch进行写入 + * 必选:否 + * 默认值:1 +* ignoreTagsUnmatched + * 描述:当table为TDengine中的一张子表,table具有tag值。如果数据的tag值与table的tag值不想等,数据不写入到table中。 + * 必选:否 + * 默认值:false + + +### 3.3 类型转换 + +datax中的数据类型,可以映射到TDengine的数据类型 + +| DataX 内部类型 | TDengine 数据类型 | +| -------------- | ----------------------------------------- | +| INT | TINYINT, SMALLINT, INT | +| LONG | TIMESTAMP, TINYINT, SMALLINT, INT, BIGINT | +| DOUBLE | FLOAT, DOUBLE | +| STRING | TIMESTAMP, BINARY, NCHAR | +| BOOL | BOOL | +| DATE | TIMESTAMP | +| BYTES | BINARY | + + + +### 3.4 各数据源到TDengine的参考示例 + +下面是一些数据源到TDengine进行数据迁移的示例 + +| 数据迁移示例 | 配置的示例 | +| ------------------ | ------------------------------------------------------------ | +| TDengine到TDengine | [超级表到超级表,指定tbname](../src/test/resources/t2t-1.json) | +| TDengine到TDengine | [超级表到超级表,不指定tbname](../src/test/resources/t2t-2.json) | +| TDengine到TDengine | [超级表到子表](../src/test/resources/t2t-3.json) | +| TDengine到TDengine | [普通表到普通表](../src/test/resources/t2t-4.json) | +| RDBMS到TDengine | [普通表到超级表,指定tbname](../src/test/resources/dm2t-1.json) | +| RDBMS到TDengine | [普通表到超级表,不指定tbname](../src/test/resources/dm2t-2.json) | +| RDBMS到TDengine | [普通表到子表](../src/test/resources/dm2t-3.json) | +| RDBMS到TDengine | [普通表到普通表](../src/test/resources/dm2t-4.json) | +| OpenTSDB到TDengine | [metric到普通表](../src/test/resources/o2t-1.json) | + + + + +## 4 性能报告 + +### 4.1 环境准备 + +#### 4.1.1 数据特征 + +建表语句: + +单行记录类似于: + +#### 4.1.2 机器参数 + +* 执行DataX的机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: DataX 数据不落磁盘,不统计此项 + +* TDengine数据库机器参数为: + 1. cpu: + 2. mem: + 3. net: 千兆双网卡 + 4. disc: + +#### 4.1.3 DataX jvm 参数 + + -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError + +### 4.2 测试报告 + +#### 4.2.1 单表测试报告 + +| 通道数 | DataX速度(Rec/s) | DataX流量(MB/s) | DataX机器网卡流出流量(MB/s) | DataX机器运行负载 | DB网卡进入流量(MB/s) | DB运行负载 | DB TPS | +| ------ | ---------------- | --------------- | --------------------------- | ----------------- | -------------------- | ---------- | ------ | +| 1 | | | | | | | | +| 4 | | | | | | | | +| 8 | | | | | | | | +| 16 | | | | | | | | +| 32 | | | | | | | | + +说明: + +1. + +#### 4.2.4 性能测试小结 + + + + +## 5 约束限制 + +1. + + + +## FAQ + +### 源表和目标表的字段顺序一致吗? + +是的,TDengineWriter按照column中字段的顺序解析来自datax的数据。 diff --git a/tdenginewriter/doc/tdenginewriter.md b/tdenginewriter/doc/tdenginewriter.md new file mode 100644 index 00000000..ba20fdb7 --- /dev/null +++ b/tdenginewriter/doc/tdenginewriter.md @@ -0,0 +1,196 @@ +# DataX TDengineWriter + +[简体中文](./tdenginewriter-CN.md) | English + +## 1 Quick Introduction + +The TDengineWriter plugin enables writing data to the target table of the TDengine database. At the bottom level, TDengineWriter connects TDengine through JDBC, executes insert statement /schemaless statement according to TDengine SQL syntax, and writes data to TDengine. + +TDengineWriter can be used as a data migration tool for DBAs to import data from other databases into TDengine. + + + +## 2 Implementation + +TDengineWriter obtains the protocol data generated by Reader through DataX framework, connects to TDengine through JDBC Driver, executes insert statement /schemaless statement, and writes the data to TDengine. + +In TDengine, table can be divided into super table, sub-table and ordinary table. Super table and sub-table include Colum and Tag. The value of tag column of sub-table is fixed value. (details please refer to: [data model](https://www.taosdata.com/docs/cn/v2.0/architecture#model)) + +The TDengineWriter can write data to super tables, sub-tables, and ordinary tables using the following methods based on the type of the table and whether the column parameter contains TBName: + +1. Table is a super table and column specifies tbname: use the automatic insert statement to create the table and use tbname as the name of the sub-table. + +2. Table is a super table and column does not contain tbname: use schemaless to write the table. TDengine will auto-create a tbname based on the super table name and tag value. + +3. Table is a sub-table: Use insert statement to write, ignoreTagUnmatched parameter is true, ignore data in record whose tag value is inconsistent with that of table. + +4. Table is a common table: use insert statement to write data. + + +## 3 Features Introduction +### 3.1 Sample +Configure a job to write to TDengine + +Create a supertable on TDengine: + +```sql +create database if not exists test; +create table test.weather (ts timestamp, temperature int, humidity double) tags(is_normal bool, device_id binary(100), address nchar(100)); +``` + +Write data to TDengine using the following Job configuration: + +```json +{ + "job": { + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } + ], + "sliceRecordCount": 1 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} +``` + +### 3.2 Configuration + +* jdbcUrl + * Descrption: Data source JDBC connection information, TDengine JDBC information please refer to: [Java connector](https://www.taosdata.com/docs/cn/v2.0/connector/java#url) + * Required: yes + * Default: none +* username + * Descrption: username + * Required: yes + * Default: none + +* password + * Descrption: password of username + * Required: yes + * Default: none + +* table + * Descrption: A list of table names that should contain all of the columns in the column parameter (except tbname). Note that tbname in column is used as the TDengine sub-table name. + * Required: yes + * Default: none + +* column + * Descrption: A list of field names, the order of the fields should be the column in the record + * Required: yes + * Default: none + +* batchSize + * Descrption: Each batchSize record is written to a batch + * Required: no + * Default: 1 + +* ignoreTagsUnmatched + * Descrption: When table is a sub-table in TDengine, table has a tag value. If the tag value of the data and the tag value of the table are not equal, the data is not written to the table. + * Required: no + * Default: false + + +#### 3.3 Type Convert + +Data types in datax that can be mapped to data types in TDengine + +| DataX Type | TDengine Type | +| ---------- | ----------------------------------------- | +| INT | TINYINT, SMALLINT, INT | +| LONG | TIMESTAMP, TINYINT, SMALLINT, INT, BIGINT | +| DOUBLE | FLOAT, DOUBLE | +| STRING | TIMESTAMP, BINARY, NCHAR | +| BOOL | BOOL | +| DATE | TIMESTAMP | +| BYTES | BINARY | + +### 3.2 From MongoDB to TDengine + +Here are some examples of data sources migrating to TDengine + +| Sample | Configuration | +| -------------------- | ------------------------------------------------------------ | +| TDengine to TDengine | [super table to super table with tbname](../src/test/resources/t2t-1.json) | +| TDengine to TDengine | [super table to super table without tbname](../src/test/resources/t2t-2.json) | +| TDengine to TDengine | [super table to sub-table](../src/test/resources/t2t-3.json) | +| TDengine to TDengine | [table to table](../src/test/resources/t2t-4.json) | +| RDBMS to TDengine | [table to super table with tbname](../src/test/resources/dm2t-1.json) | +| RDBMS to TDengine | [table to super table without tbname](../src/test/resources/dm2t-2.json) | +| RDBMS to TDengine | [table to sub-table](../src/test/resources/dm2t-3.json) | +| RDBMS to TDengine | [table to table](../src/test/resources/dm2t-4.json) | +| OpenTSDB to TDengine | [metric to table](../src/test/resources/o2t-1.json) | + +## 4 Restriction + + + +## FAQ + +### Do columns in source table and columns in target table must be in the same order? + +Yes, TDengineWriter parses the data from the Datax in the order of the fields in the column. diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml new file mode 100644 index 00000000..6a7ff251 --- /dev/null +++ b/tdenginewriter/pom.xml @@ -0,0 +1,138 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + com.alibaba.datax.tdenginewriter + tdenginewriter + 0.0.1-SNAPSHOT + + + 8 + 8 + + + + + + com.alibaba + fastjson + 1.2.78 + + + + com.taosdata.jdbc + taos-jdbcdriver + 2.0.37 + + + com.alibaba + fastjson + + + + + + org.apache.commons + commons-lang3 + ${commons-lang3-version} + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + + junit + junit + ${junit-version} + test + + + com.alibaba.datax + datax-core + 0.0.1-SNAPSHOT + test + + + mysql + mysql-connector-java + 5.1.49 + test + + + + + + + + + + + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + + + **/*Test.java + + + + + true + + + + + + + \ No newline at end of file diff --git a/tdenginewriter/src/main/assembly/package.xml b/tdenginewriter/src/main/assembly/package.xml new file mode 100644 index 00000000..d3b75ea2 --- /dev/null +++ b/tdenginewriter/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + plugin_job_template.json + + plugin/writer/tdenginewriter + + + target/ + + tdenginewriter-0.0.1-SNAPSHOT.jar + + plugin/writer/tdenginewriter + + + + + + false + plugin/writer/tdenginewriter/libs + runtime + + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java new file mode 100644 index 00000000..5c77eccd --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/ColumnMeta.java @@ -0,0 +1,24 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class ColumnMeta { + String field; + String type; + int length; + String note; + boolean isTag; + boolean isPrimaryKey; + Object value; + + @Override + public String toString() { + return "ColumnMeta{" + + "field='" + field + '\'' + + ", type='" + type + '\'' + + ", length=" + length + + ", note='" + note + '\'' + + ", isTag=" + isTag + + ", isPrimaryKey=" + isPrimaryKey + + ", value=" + value + + '}'; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java new file mode 100644 index 00000000..e0445219 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java @@ -0,0 +1,6 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class Constants { + public static final int DEFAULT_BATCH_SIZE = 1000; + public static final boolean DEFAULT_IGNORE_TAGS_UNMATCHED = false; +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java new file mode 100644 index 00000000..f22d4d6c --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DataHandler.java @@ -0,0 +1,8 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; + +public interface DataHandler { + int handle(RecordReceiver lineReceiver, TaskPluginCollector collector); +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java new file mode 100644 index 00000000..9801a323 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -0,0 +1,556 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.taosdata.jdbc.SchemalessWriter; +import com.taosdata.jdbc.enums.SchemalessProtocolType; +import com.taosdata.jdbc.enums.SchemalessTimestampType; +import com.taosdata.jdbc.utils.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.*; +import java.util.Date; +import java.util.stream.Collectors; + +public class DefaultDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + + private final TaskPluginCollector taskPluginCollector; + private String username; + private String password; + private String jdbcUrl; + private int batchSize; + private boolean ignoreTagsUnmatched; + + private List tables; + private List columns; + + private Map tableMetas; + private SchemaManager schemaManager; + + public void setTableMetas(Map tableMetas) { + this.tableMetas = tableMetas; + } + + public void setColumnMetas(Map> columnMetas) { + this.columnMetas = columnMetas; + } + + public void setSchemaManager(SchemaManager schemaManager) { + this.schemaManager = schemaManager; + } + + private Map> columnMetas; + + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException ignored) { + } + } + + public DefaultDataHandler(Configuration configuration, TaskPluginCollector taskPluginCollector) { + this.username = configuration.getString(Key.USERNAME); + this.password = configuration.getString(Key.PASSWORD); + this.jdbcUrl = configuration.getString(Key.JDBC_URL); + this.batchSize = configuration.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); + this.tables = configuration.getList(Key.TABLE, String.class); + this.columns = configuration.getList(Key.COLUMN, String.class); + this.ignoreTagsUnmatched = configuration.getBool(Key.IGNORE_TAGS_UNMATCHED, Constants.DEFAULT_IGNORE_TAGS_UNMATCHED); + this.taskPluginCollector = taskPluginCollector; + } + + @Override + public int handle(RecordReceiver lineReceiver, TaskPluginCollector collector) { + int count = 0; + int affectedRows = 0; + + try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { + LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); + if (schemaManager == null) { + // prepare table_name -> table_meta + this.schemaManager = new SchemaManager(conn); + this.tableMetas = schemaManager.loadTableMeta(tables); + // prepare table_name -> column_meta + this.columnMetas = schemaManager.loadColumnMetas(tables); + } + + List recordBatch = new ArrayList<>(); + Record record; + for (int i = 1; (record = lineReceiver.getFromReader()) != null; i++) { + if (i % batchSize != 0) { + recordBatch.add(record); + } else { + try { + recordBatch.add(record); + affectedRows += writeBatch(conn, recordBatch); + } catch (Exception e) { + LOG.warn("use one row insert. because:" + e.getMessage()); + affectedRows += writeEachRow(conn, recordBatch); + } + recordBatch.clear(); + } + count++; + } + + if (!recordBatch.isEmpty()) { + try { + affectedRows += writeBatch(conn, recordBatch); + } catch (Exception e) { + LOG.warn("use one row insert. because:" + e.getMessage()); + affectedRows += writeEachRow(conn, recordBatch); + } + recordBatch.clear(); + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + + if (affectedRows != count) { + LOG.error("write record missing or incorrect happened, affectedRows: " + affectedRows + ", total: " + count); + } + + return affectedRows; + } + + private int writeEachRow(Connection conn, List recordBatch) { + int affectedRows = 0; + for (Record record : recordBatch) { + List recordList = new ArrayList<>(); + recordList.add(record); + try { + affectedRows += writeBatch(conn, recordList); + } catch (Exception e) { + LOG.error(e.getMessage(), e); + this.taskPluginCollector.collectDirtyRecord(record, e); + } + } + return affectedRows; + } + + /** + * table: [ "stb1", "stb2", "tb1", "tb2", "t1" ] + * stb1[ts,f1,f2] tags:[t1] + * stb2[ts,f1,f2,f3] tags:[t1,t2] + * 1. tables 表的的类型分成:stb(super table)/tb(sub table)/t(original table) + * 2. 对于stb,自动建表/schemaless + * 2.1: data中有tbname字段, 例如:data: [ts, f1, f2, f3, t1, t2, tbname] tbColumn: [ts, f1, f2, t1] => insert into tbname using stb1 tags(t1) values(ts, f1, f2) + * 2.2: data中没有tbname字段,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => schemaless: stb1,t1=t1 f1=f1,f2=f2 ts, 没有批量写 + * 3. 对于tb,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => insert into tb(ts, f1, f2) values(ts, f1, f2) + * 4. 对于t,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, f3, t1, t2] insert into t(ts, f1, f2, f3, t1, t2) values(ts, f1, f2, f3, t1, t2) + */ + public int writeBatch(Connection conn, List recordBatch) throws Exception { + int affectedRows = 0; + for (String table : tables) { + TableMeta tableMeta = tableMetas.get(table); + switch (tableMeta.tableType) { + case SUP_TABLE: { + if (columns.contains("tbname")) + affectedRows += writeBatchToSupTableBySQL(conn, table, recordBatch); + else + affectedRows += writeBatchToSupTableBySchemaless(conn, table, recordBatch); + } + break; + case SUB_TABLE: + affectedRows += writeBatchToSubTable(conn, table, recordBatch); + break; + case NML_TABLE: + default: + affectedRows += writeBatchToNormalTable(conn, table, recordBatch); + } + } + return affectedRows; + } + + /** + * insert into record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) + */ + private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws Exception { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder("insert into"); + for (Record record : recordBatch) { + sb.append(" ").append(record.getColumn(indexOf("tbname")).asString()) + .append(" using ").append(table) + .append(" tags"); +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columns.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + if (!colMeta.isTag) + continue; + String tagValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(tagValue); + } else { + sb.append(",").append(tagValue); + } + } + sb.append(")"); + + sb.append(" ").append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values"); + +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return !colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + if (colMeta.isTag) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); + } + String sql = sb.toString(); + + return executeUpdate(conn, sql); + } + + private int executeUpdate(Connection conn, String sql) throws SQLException { + int count; + try (Statement stmt = conn.createStatement()) { + LOG.debug(">>> " + sql); + count = stmt.executeUpdate(sql); + } + return count; + } + + private String buildColumnValue(ColumnMeta colMeta, Record record) throws Exception { + Column column = record.getColumn(indexOf(colMeta.field)); + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); + Column.Type type = column.getType(); + switch (type) { + case DATE: { + Date value = column.asDate(); + switch (timestampPrecision) { + case MILLISEC: + return "" + (value.getTime()); + case MICROSEC: + return "" + (value.getTime() * 1000); + case NANOSEC: + return "" + (value.getTime() * 1000_000); + default: + return "'" + column.asString() + "'"; + } + } + case BYTES: + case STRING: + if (colMeta.type.equals("TIMESTAMP")) + return "\"" + column.asString() + "\""; + String value = column.asString(); + return "\'" + Utils.escapeSingleQuota(value) + "\'"; + case NULL: + case BAD: + return "NULL"; + case BOOL: + case DOUBLE: + case INT: + case LONG: + column.asString(); + default: + throw new Exception("invalid column type: " + type); + } + } + + /** + * table: ["stb1"], column: ["ts", "f1", "f2", "t1"] + * data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => schemaless: stb1,t1=t1 f1=f1,f2=f2 ts + */ + private int writeBatchToSupTableBySchemaless(Connection conn, String table, List recordBatch) throws SQLException { + int count = 0; + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); + + List columnMetaList = this.columnMetas.get(table); + ColumnMeta ts = columnMetaList.stream().filter(colMeta -> colMeta.isPrimaryKey).findFirst().get(); + + List lines = new ArrayList<>(); + for (Record record : recordBatch) { + StringBuilder sb = new StringBuilder(); + sb.append(table).append(",") + .append(columnMetaList.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).map(colMeta -> { + String value = record.getColumn(indexOf(colMeta.field)).asString(); + if (value.contains(" ")) + value = value.replace(" ", "\\ "); + return colMeta.field + "=" + value; + }).collect(Collectors.joining(","))) + .append(" ") + .append(columnMetaList.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag && !colMeta.isPrimaryKey; + }).map(colMeta -> { + return colMeta.field + "=" + buildSchemalessColumnValue(colMeta, record); +// return colMeta.field + "=" + record.getColumn(indexOf(colMeta.field)).asString(); + }).collect(Collectors.joining(","))) + .append(" "); + // timestamp + Column column = record.getColumn(indexOf(ts.field)); + Object tsValue = column.getRawData(); + if (column.getType() == Column.Type.DATE && tsValue instanceof Date) { + long time = column.asDate().getTime(); + switch (timestampPrecision) { + case NANOSEC: + sb.append(time * 1000000); + break; + case MICROSEC: + sb.append(time * 1000); + break; + case MILLISEC: + default: + sb.append(time); + } + } else if (column.getType() == Column.Type.STRING) { + sb.append(Utils.parseTimestamp(column.asString())); + } else { + sb.append(column.asLong()); + } + String line = sb.toString(); + LOG.debug(">>> " + line); + lines.add(line); + count++; + } + + SchemalessWriter writer = new SchemalessWriter(conn); + SchemalessTimestampType timestampType; + switch (timestampPrecision) { + case NANOSEC: + timestampType = SchemalessTimestampType.NANO_SECONDS; + break; + case MICROSEC: + timestampType = SchemalessTimestampType.MICRO_SECONDS; + break; + case MILLISEC: + timestampType = SchemalessTimestampType.MILLI_SECONDS; + break; + default: + timestampType = SchemalessTimestampType.NOT_CONFIGURED; + } + + writer.write(lines, SchemalessProtocolType.LINE, timestampType); + + LOG.warn("schemalessWriter does not return affected rows!"); + return count; + } + + private long dateAsLong(Column column) { + TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); + long time = column.asDate().getTime(); + switch (timestampPrecision) { + case NANOSEC: + return time * 1000000; + case MICROSEC: + return time * 1000; + case MILLISEC: + default: + return time; + } + } + + private String buildSchemalessColumnValue(ColumnMeta colMeta, Record record) { + Column column = record.getColumn(indexOf(colMeta.field)); + switch (column.getType()) { + case DATE: + if (colMeta.type.equals("TIMESTAMP")) + return dateAsLong(column) + "i64"; + return "L'" + column.asString() + "'"; + case NULL: + case BAD: + return "NULL"; + case DOUBLE: { + if (colMeta.type.equals("FLOAT")) + return column.asString() + "f32"; + if (colMeta.type.equals("DOUBLE")) + return column.asString() + "f64"; + } + case INT: + case LONG: { + if (colMeta.type.equals("TINYINT")) + return column.asString() + "i8"; + if (colMeta.type.equals("SMALLINT")) + return column.asString() + "i16"; + if (colMeta.type.equals("INT")) + return column.asString() + "i32"; + if (colMeta.type.equals("BIGINT")) + return column.asString() + "i64"; + } + case BYTES: + case STRING: + if (colMeta.type.equals("TIMESTAMP")) + return column.asString() + "i64"; + String value = column.asString(); + value = value.replace("\"", "\\\""); + if (colMeta.type.startsWith("BINARY")) + return "\"" + value + "\""; + if (colMeta.type.startsWith("NCHAR")) + return "L\"" + value + "\""; + case BOOL: + default: + return column.asString(); + } + } + + /** + * table: ["tb1"], column: [tbname, ts, f1, f2, t1] + * if contains("tbname") and tbname != tb1 continue; + * else if t1 != record[idx(t1)] or t2 != record[idx(t2)]... continue; + * else + * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) + */ + private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws Exception { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder(); + sb.append("insert into ").append(table).append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values"); + int validRecords = 0; + for (Record record : recordBatch) { + if (columns.contains("tbname") && !table.equals(record.getColumn(indexOf("tbname")).asString())) + continue; + + boolean tagsAllMatch = columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).allMatch(colMeta -> { + Column column = record.getColumn(indexOf(colMeta.field)); + boolean equals = equals(column, colMeta); + return equals; + }); + + if (ignoreTagsUnmatched && !tagsAllMatch) + continue; + +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { +// return !colMeta.isTag; +// }).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(", ", "(", ") "))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (colMeta.isTag) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); + + validRecords++; + } + + if (validRecords == 0) { + LOG.warn("no valid records in this batch"); + return 0; + } + + String sql = sb.toString(); + return executeUpdate(conn, sql); + } + + private boolean equals(Column column, ColumnMeta colMeta) { + switch (column.getType()) { + case BOOL: + return column.asBoolean().equals(Boolean.valueOf(colMeta.value.toString())); + case INT: + case LONG: + return column.asLong().equals(Long.valueOf(colMeta.value.toString())); + case DOUBLE: + return column.asDouble().equals(Double.valueOf(colMeta.value.toString())); + case NULL: + return colMeta.value == null; + case DATE: + return column.asDate().getTime() == ((Timestamp) colMeta.value).getTime(); + case BAD: + case BYTES: + return Arrays.equals(column.asBytes(), (byte[]) colMeta.value); + case STRING: + default: + return column.asString().equals(colMeta.value.toString()); + } + } + + /** + * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] + * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) + */ + private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws Exception { + List columnMetas = this.columnMetas.get(table); + + StringBuilder sb = new StringBuilder(); + sb.append("insert into ").append(table) + .append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + return colMeta.field; + }).collect(Collectors.joining(",", "(", ")"))) + .append(" values "); + + for (Record record : recordBatch) { +// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { +// return buildColumnValue(colMeta, record); +// }).collect(Collectors.joining(",", "(", ")"))); + sb.append("("); + for (int i = 0; i < columnMetas.size(); i++) { + ColumnMeta colMeta = columnMetas.get(i); + if (!columns.contains(colMeta.field)) + continue; + String colValue = buildColumnValue(colMeta, record); + if (i == 0) { + sb.append(colValue); + } else { + sb.append(",").append(colValue); + } + } + sb.append(")"); + } + + String sql = sb.toString(); + return executeUpdate(conn, sql); + } + + private int indexOf(String colName) throws DataXException { + for (int i = 0; i < columns.size(); i++) { + if (columns.get(i).equals(colName)) + return i; + } + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, + "cannot find col: " + colName + " in columns: " + columns); + } + +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java new file mode 100644 index 00000000..1a9358db --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Key.java @@ -0,0 +1,18 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class Key { + public static final String USERNAME = "username"; + public static final String PASSWORD = "password"; + public static final String CONNECTION = "connection"; + public static final String BATCH_SIZE = "batchSize"; + public static final String TABLE = "table"; + public static final String JDBC_URL = "jdbcUrl"; + public static final String COLUMN = "column"; + public static final String IGNORE_TAGS_UNMATCHED = "ignoreTagsUnmatched"; + + public static final String BEGIN_DATETIME = "beginDateTime"; + public static final String END_DATETIME = "endDateTime"; + public static final String WHERE = "where"; + public static final String QUERY_SQL = "querySql"; + public static final String MANDATORY_ENCODING = "mandatoryEncoding"; +} \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java new file mode 100644 index 00000000..2fb5a98f --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/OpentsdbDataHandler.java @@ -0,0 +1,99 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.util.Configuration; +import com.taosdata.jdbc.SchemalessWriter; +import com.taosdata.jdbc.enums.SchemalessProtocolType; +import com.taosdata.jdbc.enums.SchemalessTimestampType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class OpentsdbDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(OpentsdbDataHandler.class); + private SchemalessWriter writer; + + private String jdbcUrl; + private String user; + private String password; + int batchSize; + + public OpentsdbDataHandler(Configuration config) { + // opentsdb json protocol use JNI and schemaless API to write + this.jdbcUrl = config.getString(Key.JDBC_URL); + this.user = config.getString(Key.USERNAME, "root"); + this.password = config.getString(Key.PASSWORD, "taosdata"); + this.batchSize = config.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); + } + + @Override + public int handle(RecordReceiver lineReceiver, TaskPluginCollector collector) { + int count = 0; + try (Connection conn = DriverManager.getConnection(jdbcUrl, user, password);) { + LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + user + "] established."); + writer = new SchemalessWriter(conn); + count = write(lineReceiver, batchSize); + } catch (Exception e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); + } + + return count; + } + + private int write(RecordReceiver lineReceiver, int batchSize) throws DataXException { + int recordIndex = 1; + try { + Record record; + StringBuilder sb = new StringBuilder(); + while ((record = lineReceiver.getFromReader()) != null) { + if (batchSize == 1) { + String jsonData = recordToString(record); + LOG.debug(">>> " + jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); + } else if (recordIndex % batchSize == 1) { + sb.append("[").append(recordToString(record)).append(","); + } else if (recordIndex % batchSize == 0) { + sb.append(recordToString(record)).append("]"); + String jsonData = sb.toString(); + LOG.debug(">>> " + jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); + sb.delete(0, sb.length()); + } else { + sb.append(recordToString(record)).append(","); + } + recordIndex++; + } + if (sb.length() != 0 && sb.charAt(0) == '[') { + String jsonData = sb.deleteCharAt(sb.length() - 1).append("]").toString(); + System.err.println(jsonData); + LOG.debug(">>> " + jsonData); + writer.write(jsonData, SchemalessProtocolType.JSON, SchemalessTimestampType.NOT_CONFIGURED); + } + } catch (Exception e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e); + } + return recordIndex - 1; + } + + private String recordToString(Record record) { + int recordLength = record.getColumnNumber(); + if (0 == recordLength) { + return ""; + } + Column column; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < recordLength; i++) { + column = record.getColumn(i); + sb.append(column.asString()).append("\t"); + } + sb.setLength(sb.length() - 1); + return sb.toString(); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java new file mode 100644 index 00000000..f3bdbfbc --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -0,0 +1,177 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.exception.DataXException; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.*; +import java.util.stream.Collectors; + +public class SchemaManager { + private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); + + private final Connection conn; + private TimestampPrecision precision; + + public SchemaManager(Connection conn) { + this.conn = conn; + } + + public TimestampPrecision loadDatabasePrecision() throws DataXException { + if (this.precision != null) + return this.precision; + + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("select database()"); + String dbname = null; + while (rs.next()) { + dbname = rs.getString("database()"); + } + if (dbname == null) + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, + "Database not specified or available"); + + rs = stmt.executeQuery("show databases"); + while (rs.next()) { + String name = rs.getString("name"); + if (!name.equalsIgnoreCase(dbname)) + continue; + String precision = rs.getString("precision"); + switch (precision) { + case "ns": + this.precision = TimestampPrecision.NANOSEC; + break; + case "us": + this.precision = TimestampPrecision.MICROSEC; + break; + case "ms": + default: + this.precision = TimestampPrecision.MILLISEC; + } + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + return this.precision; + } + + public Map loadTableMeta(List tables) throws DataXException { + Map tableMetas = new HashMap(); + + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("show stables"); + while (rs.next()) { + TableMeta tableMeta = buildSupTableMeta(rs); + if (!tables.contains(tableMeta.tbname)) + continue; + tableMetas.put(tableMeta.tbname, tableMeta); + } + + rs = stmt.executeQuery("show tables"); + while (rs.next()) { + TableMeta tableMeta = buildSubTableMeta(rs); + if (!tables.contains(tableMeta.tbname)) + continue; + tableMetas.put(tableMeta.tbname, tableMeta); + } + + for (String tbname : tables) { + if (!tableMetas.containsKey(tbname)) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, "table metadata of " + tbname + " is empty!"); + } + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + return tableMetas; + } + + public Map> loadColumnMetas(List tables) throws DataXException { + Map> ret = new HashMap<>(); + + for (String table : tables) { + List columnMetaList = new ArrayList<>(); + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("describe " + table); + for (int i = 0; rs.next(); i++) { + ColumnMeta columnMeta = buildColumnMeta(rs, i == 0); + columnMetaList.add(columnMeta); + } + } catch (SQLException e) { + throw DataXException.asDataXException(TDengineWriterErrorCode.RUNTIME_EXCEPTION, e.getMessage()); + } + + if (columnMetaList.isEmpty()) { + LOG.error("column metadata of " + table + " is empty!"); + continue; + } + + columnMetaList.stream().filter(colMeta -> colMeta.isTag).forEach(colMeta -> { + String sql = "select " + colMeta.field + " from " + table; + Object value = null; + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery(sql); + for (int i = 0; rs.next(); i++) { + value = rs.getObject(colMeta.field); + if (i > 0) { + value = null; + break; + } + } + } catch (SQLException e) { + LOG.error(e.getMessage(), e); + } + colMeta.value = value; + }); + + LOG.debug("load column metadata of " + table + ": " + + columnMetaList.stream().map(ColumnMeta::toString).collect(Collectors.joining(",", "[", "]")) + ); + ret.put(table, columnMetaList); + } + return ret; + } + + private TableMeta buildSupTableMeta(ResultSet rs) throws SQLException { + TableMeta tableMeta = new TableMeta(); + tableMeta.tableType = TableType.SUP_TABLE; + tableMeta.tbname = rs.getString("name"); + tableMeta.columns = rs.getInt("columns"); + tableMeta.tags = rs.getInt("tags"); + tableMeta.tables = rs.getInt("tables"); + + if (LOG.isDebugEnabled()){ + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + } + return tableMeta; + } + + private TableMeta buildSubTableMeta(ResultSet rs) throws SQLException { + TableMeta tableMeta = new TableMeta(); + String stable_name = rs.getString("stable_name"); + tableMeta.tableType = StringUtils.isBlank(stable_name) ? TableType.NML_TABLE : TableType.SUB_TABLE; + tableMeta.tbname = rs.getString("table_name"); + tableMeta.columns = rs.getInt("columns"); + tableMeta.stable_name = StringUtils.isBlank(stable_name) ? null : stable_name; + + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); + return tableMeta; + } + + private ColumnMeta buildColumnMeta(ResultSet rs, boolean isPrimaryKey) throws SQLException { + ColumnMeta columnMeta = new ColumnMeta(); + columnMeta.field = rs.getString("Field"); + columnMeta.type = rs.getString("Type"); + columnMeta.length = rs.getInt("Length"); + columnMeta.note = rs.getString("Note"); + columnMeta.isTag = columnMeta.note != null && columnMeta.note.equals("TAG"); + columnMeta.isPrimaryKey = isPrimaryKey; + return columnMeta; + } + +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java new file mode 100644 index 00000000..73982744 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriter.java @@ -0,0 +1,114 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class TDengineWriter extends Writer { + + private static final String PEER_PLUGIN_NAME = "peerPluginName"; + + public static class Job extends Writer.Job { + + private Configuration originalConfig; + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + + @Override + public void init() { + this.originalConfig = super.getPluginJobConf(); + this.originalConfig.set(PEER_PLUGIN_NAME, getPeerPluginName()); + + // check username + String user = this.originalConfig.getString(Key.USERNAME); + if (StringUtils.isBlank(user)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.USERNAME + "] is not set."); + + // check password + String password = this.originalConfig.getString(Key.PASSWORD); + if (StringUtils.isBlank(password)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.PASSWORD + "] is not set."); + + // check connection + List connection = this.originalConfig.getList(Key.CONNECTION); + if (connection == null || connection.isEmpty()) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.CONNECTION + "] is not set."); + if (connection.size() > 1) + LOG.warn("connection.size is " + connection.size() + " and only connection[0] will be used."); + Configuration conn = Configuration.from(connection.get(0).toString()); + String jdbcUrl = conn.getString(Key.JDBC_URL); + if (StringUtils.isBlank(jdbcUrl)) + throw DataXException.asDataXException(TDengineWriterErrorCode.REQUIRED_VALUE, "The parameter [" + + Key.JDBC_URL + "] of connection is not set."); + + // check column + } + + @Override + public void destroy() { + + } + + @Override + public List split(int mandatoryNumber) { + List writerSplitConfigs = new ArrayList<>(); + + List conns = this.originalConfig.getList(Key.CONNECTION); + for (int i = 0; i < mandatoryNumber; i++) { + Configuration clone = this.originalConfig.clone(); + Configuration conf = Configuration.from(conns.get(0).toString()); + String jdbcUrl = conf.getString(Key.JDBC_URL); + clone.set(Key.JDBC_URL, jdbcUrl); + clone.set(Key.TABLE, conf.getList(Key.TABLE)); + clone.remove(Key.CONNECTION); + writerSplitConfigs.add(clone); + } + + return writerSplitConfigs; + } + } + + public static class Task extends Writer.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private Configuration writerSliceConfig; + private TaskPluginCollector taskPluginCollector; + + @Override + public void init() { + this.writerSliceConfig = getPluginJobConf(); + this.taskPluginCollector = super.getTaskPluginCollector(); + } + + @Override + public void destroy() { + + } + + @Override + public void startWrite(RecordReceiver lineReceiver) { + String peerPluginName = this.writerSliceConfig.getString(PEER_PLUGIN_NAME); + LOG.debug("start to handle record from: " + peerPluginName); + + DataHandler handler; + if (peerPluginName.equals("opentsdbreader")) + handler = new OpentsdbDataHandler(this.writerSliceConfig); + else + handler = new DefaultDataHandler(this.writerSliceConfig, this.taskPluginCollector); + + long records = handler.handle(lineReceiver, getTaskPluginCollector()); + LOG.debug("handle data finished, records: " + records); + } + + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java new file mode 100644 index 00000000..e1f2bc29 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -0,0 +1,34 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum TDengineWriterErrorCode implements ErrorCode { + + REQUIRED_VALUE("TDengineWriter-00", "parameter value is missing"), + ILLEGAL_VALUE("TDengineWriter-01", "invalid parameter value"), + RUNTIME_EXCEPTION("TDengineWriter-02", "runtime exception"), + TYPE_ERROR("TDengineWriter-03", "data type mapping error"); + + private final String code; + private final String description; + + TDengineWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, this.description); + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java new file mode 100644 index 00000000..2a6b0536 --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableMeta.java @@ -0,0 +1,22 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public class TableMeta { + TableType tableType; + String tbname; + int columns; + int tags; + int tables; + String stable_name; + + @Override + public String toString() { + return "TableMeta{" + + "tableType=" + tableType + + ", tbname='" + tbname + '\'' + + ", columns=" + columns + + ", tags=" + tags + + ", tables=" + tables + + ", stable_name='" + stable_name + '\'' + + '}'; + } +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java new file mode 100644 index 00000000..6c97ac3f --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TableType.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public enum TableType { + SUP_TABLE, SUB_TABLE, NML_TABLE +} diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java new file mode 100644 index 00000000..46564d6a --- /dev/null +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TimestampPrecision.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +public enum TimestampPrecision { + MILLISEC, MICROSEC, NANOSEC +} diff --git a/tdenginewriter/src/main/resources/plugin.json b/tdenginewriter/src/main/resources/plugin.json new file mode 100644 index 00000000..10d8e2cf --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin.json @@ -0,0 +1,9 @@ +{ + "name": "tdenginewriter", + "class": "com.alibaba.datax.plugin.writer.tdenginewriter.TDengineWriter", + "description": { + "useScene": "data migration to tdengine", + "mechanism": "use taos-jdbcdriver to write data." + }, + "developer": "support@taosdata.com" +} \ No newline at end of file diff --git a/tdenginewriter/src/main/resources/plugin_job_template.json b/tdenginewriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..3d303305 --- /dev/null +++ b/tdenginewriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,20 @@ +{ + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "" + ], + "connection": [ + { + "table": [ + "" + ], + "jdbcUrl": "" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java new file mode 100644 index 00000000..7352c3ca --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Csv2TDengineTest.java @@ -0,0 +1,41 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +@Ignore +public class Csv2TDengineTest { + + private static final String host = "192.168.56.105"; + + @Test + public void case01() throws Throwable { + // given + prepareTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/csv2t.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + public void prepareTable() throws SQLException { + final String url = "jdbc:TAOS-RS://" + host + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists test"); + stmt.execute("create database if not exists test"); + stmt.execute("create table test.weather (ts timestamp, temperature bigint, humidity double, is_normal bool) " + + "tags(device_id binary(10),address nchar(10))"); + } + } + + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java new file mode 100644 index 00000000..b6932f60 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java @@ -0,0 +1,124 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +@Ignore +public class DM2TDengineTest { + + private String host1 = "192.168.0.72"; + private String host2 = "192.168.1.93"; + private final Random random = new Random(System.currentTimeMillis()); + + @Test + public void dm2t_case01() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case02() throws Throwable { + // given + createSupAndSubTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case03() throws Throwable { + // given + createTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-3.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void dm2t_case04() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/dm2t-4.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createSupTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f2 smallint, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200)) tags(f1 tinyint,f3 int)"); + stmt.close(); + } + } + + private void createSupAndSubTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f2 smallint, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200)) tags(f1 tinyint,f3 int)"); + for (int i = 0; i < 10; i++) { + stmt.execute("create table db2.t" + (i + 1) + "_" + i + " using db2.stb2 tags(" + (i + 1) + "," + i + ")"); + } + stmt.close(); + } + } + + private void createTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint,f5 float, " + + "f6 double, f7 double, f8 bool, f9 nchar(100), f10 nchar(200))"); + stmt.close(); + } + } + + @Before + public void before() throws SQLException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + long ts = System.currentTimeMillis(); + + final String url = "jdbc:dm://" + host1 + ":5236"; + try (Connection conn = DriverManager.getConnection(url, "TESTUSER", "test123456")) { + conn.setAutoCommit(true); + Statement stmt = conn.createStatement(); + stmt.execute("drop table if exists stb1"); + stmt.execute("create table stb1(ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, f5 float, " + + "f6 double, f7 NUMERIC(10,2), f8 BIT, f9 VARCHAR(100), f10 VARCHAR2(200))"); + for (int i = 0; i < 10; i++) { + String sql = "insert into stb1 values('" + sdf.format(new Date(ts + i * 1000)) + "'," + (i + 1) + "," + + random.nextInt(100) + "," + i + ",4,5.55,6.666,7.77," + (random.nextBoolean() ? 1 : 0) + + ",'abcABC123','北京朝阳望京DM')"; + stmt.execute(sql); + } + } + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java new file mode 100644 index 00000000..1034b74a --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -0,0 +1,300 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.element.DateColumn; +import com.alibaba.datax.common.element.LongColumn; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.plugin.TaskPluginCollector; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.core.transport.record.DefaultRecord; +import org.junit.*; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@Ignore +public class DefaultDataHandlerTest { + + private static final String host = "192.168.1.93"; + private static Connection conn; + + private final TaskPluginCollector taskPluginCollector = new TDengineWriter.Task().getTaskPluginCollector(); + + @Test + public void writeSupTableBySQL() throws Exception { + // given + createSupAndSubTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + (i + 10))); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSupTableBySQL_2() throws Exception { + // given + createSupAndSubTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + (i + 10))); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSupTableBySchemaless() throws Exception { + // given + createSupTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"stb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS://" + host + ":6030/scm_test\"," + + "\"batchSize\": \"1000\"" + + "}"); + String jdbcUrl = configuration.getString("jdbcUrl"); + Connection connection = DriverManager.getConnection(jdbcUrl, "root", "taosdata"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new StringColumn("t" + i + " 22")); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(connection); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(connection, recordList); + + // then + Assert.assertEquals(10, count); + } + + @Test + public void writeSubTableWithTableName() throws Exception { + // given + createSupAndSubTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"tbname\", \"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"tb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new StringColumn("tb" + i)); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(1, count); + } + + @Test + public void writeSubTableWithoutTableName() throws Exception { + // given + createSupAndSubTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"tb1\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"," + + "\"ignoreTagsUnmatched\": \"true\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(1, count); + } + + @Test + public void writeNormalTable() throws Exception { + // given + createSupAndSubTable(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"table\":[\"weather\"]," + + "\"jdbcUrl\":\"jdbc:TAOS-RS://" + host + ":6041/test\"," + + "\"batchSize\": \"1000\"," + + "\"ignoreTagsUnmatched\": \"true\"" + + "}"); + long current = System.currentTimeMillis(); + List recordList = IntStream.range(1, 11).mapToObj(i -> { + Record record = new DefaultRecord(); + record.addColumn(new DateColumn(current + 1000 * i)); + record.addColumn(new LongColumn(1)); + record.addColumn(new LongColumn(2)); + record.addColumn(new LongColumn(i)); + return record; + }).collect(Collectors.toList()); + + // when + DefaultDataHandler handler = new DefaultDataHandler(configuration, taskPluginCollector); + List tables = configuration.getList("table", String.class); + SchemaManager schemaManager = new SchemaManager(conn); + Map tableMetas = schemaManager.loadTableMeta(tables); + Map> columnMetas = schemaManager.loadColumnMetas(tables); + handler.setTableMetas(tableMetas); + handler.setColumnMetas(columnMetas); + handler.setSchemaManager(schemaManager); + + int count = handler.writeBatch(conn, recordList); + + // then + Assert.assertEquals(10, count); + } + + private void createSupAndSubTable() throws SQLException { + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); + stmt.execute("create table stb2(ts timestamp, f1 int, f2 int, f3 int) tags(t1 int, t2 int)"); + stmt.execute("create table tb1 using stb1 tags(1)"); + stmt.execute("create table tb2 using stb1 tags(2)"); + stmt.execute("create table tb3 using stb2 tags(1,1)"); + stmt.execute("create table tb4 using stb2 tags(2,2)"); + stmt.execute("create table weather(ts timestamp, f1 int, f2 int, f3 int, t1 int, t2 int)"); + } + } + + private void createSupTable() throws SQLException { + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 nchar(32))"); + } + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041", "root", "taosdata"); + } + + @AfterClass + public static void afterClass() throws SQLException { + if (conn != null) { + conn.close(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java new file mode 100644 index 00000000..8cbc2d90 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java @@ -0,0 +1,72 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Random; + +@Ignore +public class Mysql2TDengineTest { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static final Random random = new Random(System.currentTimeMillis()); + + @Test + public void mysql2tdengine() throws Throwable { + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/m2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Before + public void before() throws SQLException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url = "jdbc:mysql://" + host1 + ":3306/?useSSL=false&useUnicode=true&charset=UTF-8&generateSimpleParameterMetadata=true"; + try (Connection conn = DriverManager.getConnection(url, "root", "123456")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("use db1"); + stmt.execute("create table stb1(id int primary key AUTO_INCREMENT, " + + "f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, " + + "ts timestamp, dt datetime," + + "f7 nchar(100), f8 varchar(100))"); + for (int i = 1; i <= 10; i++) { + String sql = "insert into stb1(f1, f2, f3, f4, f5, f6, ts, dt, f7, f8) values(" + + i + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextFloat() + "," + random.nextDouble() + ", " + + "'" + ts + "', '" + ts + "', " + + "'中国北京朝阳望京abc', '中国北京朝阳望京adc')"; + stmt.execute(sql); + } + + stmt.close(); + } + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2(" + + "ts timestamp, dt timestamp, " + + "f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, " + + "f7 nchar(100), f8 nchar(100))"); + + stmt.close(); + } + + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java new file mode 100644 index 00000000..0d212e8a --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java @@ -0,0 +1,38 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.*; + +@Ignore +public class Opentsdb2TDengineTest { + + @Test + public void opentsdb2tdengine() throws SQLException { + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/o2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + try { + Engine.entry(params); + } catch (Throwable e) { + e.printStackTrace(); + } + + // assert + String jdbcUrl = "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP"; + try (Connection conn = DriverManager.getConnection(jdbcUrl, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("select count(*) from weather_temperature"); + int rows = 0; + while (rs.next()) { + rows = rs.getInt("count(*)"); + } + Assert.assertEquals(5, rows); + stmt.close(); + } + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java new file mode 100644 index 00000000..fac1e0f7 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java @@ -0,0 +1,85 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import org.junit.*; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@Ignore +public class SchemaManagerTest { + + private static Connection conn; + + @Test + public void loadTableMeta() throws SQLException { + // given + SchemaManager schemaManager = new SchemaManager(conn); + List tables = Arrays.asList("stb1", "stb2", "tb1", "tb3", "weather"); + + // when + Map tableMetaMap = schemaManager.loadTableMeta(tables); + + // then + TableMeta stb1 = tableMetaMap.get("stb1"); + Assert.assertEquals(TableType.SUP_TABLE, stb1.tableType); + Assert.assertEquals("stb1", stb1.tbname); + Assert.assertEquals(3, stb1.columns); + Assert.assertEquals(1, stb1.tags); + Assert.assertEquals(2, stb1.tables); + + TableMeta tb3 = tableMetaMap.get("tb3"); + Assert.assertEquals(TableType.SUB_TABLE, tb3.tableType); + Assert.assertEquals("tb3", tb3.tbname); + Assert.assertEquals(4, tb3.columns); + Assert.assertEquals("stb2", tb3.stable_name); + + TableMeta weather = tableMetaMap.get("weather"); + Assert.assertEquals(TableType.NML_TABLE, weather.tableType); + Assert.assertEquals("weather", weather.tbname); + Assert.assertEquals(6, weather.columns); + Assert.assertNull(weather.stable_name); + } + + @Test + public void loadColumnMetas() { + // given + SchemaManager schemaManager = new SchemaManager(conn); + List tables = Arrays.asList("stb1", "stb2", "tb1", "tb3", "weather"); + + // when + Map> columnMetaMap = schemaManager.loadColumnMetas(tables); + + // then + List stb1 = columnMetaMap.get("stb1"); + Assert.assertEquals(4, stb1.size()); + } + + @BeforeClass + public static void beforeClass() throws SQLException { + conn = DriverManager.getConnection("jdbc:TAOS-RS://192.168.56.105:6041", "root", "taosdata"); + try (Statement stmt = conn.createStatement()) { + stmt.execute("drop database if exists scm_test"); + stmt.execute("create database if not exists scm_test"); + stmt.execute("use scm_test"); + stmt.execute("create table stb1(ts timestamp, f1 int, f2 int) tags(t1 int)"); + stmt.execute("create table stb2(ts timestamp, f1 int, f2 int, f3 int) tags(t1 int, t2 int)"); + stmt.execute("insert into tb1 using stb1 tags(1) values(now, 1, 2)"); + stmt.execute("insert into tb2 using stb1 tags(2) values(now, 1, 2)"); + stmt.execute("insert into tb3 using stb2 tags(1,1) values(now, 1, 2, 3)"); + stmt.execute("insert into tb4 using stb2 tags(2,2) values(now, 1, 2, 3)"); + stmt.execute("create table weather(ts timestamp, f1 int, f2 int, f3 int, t1 int, t2 int)"); + } + } + + @AfterClass + public static void afterClass() throws SQLException { + if (conn != null) { + conn.close(); + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java new file mode 100644 index 00000000..613d2aa9 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java @@ -0,0 +1,70 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +@Ignore +public class Stream2TDengineTest { + + private String host2 = "192.168.56.105"; + + @Test + public void s2t_case1() throws Throwable { + // given + createSupTable("ms"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void s2t_case2() throws Throwable { + // given + createSupTable("us"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void s2t_case3() throws Throwable { + // given + createSupTable("ns"); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/defaultJob.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + void createSupTable(String precision) throws SQLException { + + final String url = "jdbc:TAOS-RS://" + host2 + ":6041/"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2 precision '" + precision + "'"); + stmt.execute("create table db2.stb2(ts1 timestamp, ts2 timestamp,ts3 timestamp,ts4 timestamp,ts5 timestamp," + + "ts6 timestamp,ts7 timestamp, ts8 timestamp, ts9 timestamp, ts10 timestamp, f1 tinyint, f2 smallint," + + "f3 int, f4 bigint, f5 float, f6 double," + + "f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp,t2 timestamp,t3 timestamp,t4 timestamp," + + "t5 timestamp,t6 timestamp,t7 timestamp, t8 tinyint, t9 smallint, t10 int, t11 bigint, t12 float," + + "t13 double, t14 bool, t15 binary(100), t16 nchar(100))"); + + stmt.close(); + } + + } + +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java new file mode 100644 index 00000000..18efdc14 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java @@ -0,0 +1,129 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.sql.*; +import java.text.SimpleDateFormat; +import java.util.Random; + +@Ignore +public class TDengine2TDengineTest { + + private static final String host1 = "192.168.56.105"; + private static final String host2 = "192.168.1.93"; + private static final Random random = new Random(System.currentTimeMillis()); + + @Test + public void case_01() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-1.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case_02() throws Throwable { + // given + createSupTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-2.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case_03() throws Throwable { + // given + createSupAndSubTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-3.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + @Test + public void case_04() throws Throwable { + // given + createTable(); + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/t2t-4.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } + + private void createTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.weather (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint, " + + "f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100))"); + stmt.close(); + } + } + + private void createSupTable() throws SQLException { + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + stmt.close(); + } + } + + private void createSupAndSubTable() throws SQLException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + final String ts = sdf.format(new Date(System.currentTimeMillis())); + + final String url2 = "jdbc:TAOS-RS://" + host2 + ":6041"; + try (Connection conn = DriverManager.getConnection(url2, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + stmt.execute("drop database if exists db2"); + stmt.execute("create database if not exists db2"); + stmt.execute("create table db2.stb2 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + + stmt.execute("create table db2.t1 using db2.stb2 tags('" + ts + "',1,2,3,4,5.0,6.0,true,'abc123ABC','北京朝阳望京')"); + stmt.close(); + } + } + + @Before + public void before() throws SQLException { + final String url = "jdbc:TAOS-RS://" + host1 + ":6041"; + try (Connection conn = DriverManager.getConnection(url, "root", "taosdata")) { + Statement stmt = conn.createStatement(); + + stmt.execute("drop database if exists db1"); + stmt.execute("create database if not exists db1"); + stmt.execute("create table db1.stb1 (ts timestamp, f1 tinyint, f2 smallint, f3 int, f4 bigint," + + " f5 float, f6 double, f7 bool, f8 binary(100), f9 nchar(100)) tags(t1 timestamp, t2 tinyint, " + + "t3 smallint, t4 int, t5 bigint, t6 float, t7 double, t8 bool, t9 binary(100), t10 nchar(1000))"); + for (int i = 0; i < 10; i++) { + String sql = "insert into db1.t" + (i + 1) + " using db1.stb1 tags(now+" + i + "s," + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextFloat() + "," + random.nextDouble() + "," + + random.nextBoolean() + ",'abc123ABC','北京朝阳望京') values(now+" + i + "s, " + + random.nextInt(100) + "," + random.nextInt(100) + "," + random.nextInt(100) + "," + + random.nextInt(100) + "," + random.nextFloat() + "," + random.nextDouble() + "," + + random.nextBoolean() + ",'abc123ABC','北京朝阳望京')"; + stmt.execute(sql); + } + } + } +} diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java new file mode 100644 index 00000000..813f6131 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterTest.java @@ -0,0 +1,62 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.common.util.Configuration; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +public class TDengineWriterTest { + + TDengineWriter.Job job; + + @Before + public void before() { + job = new TDengineWriter.Job(); + Configuration configuration = Configuration.from("{" + + "\"username\": \"root\"," + + "\"password\": \"taosdata\"," + + "\"column\": [\"ts\", \"f1\", \"f2\", \"t1\"]," + + "\"connection\": [{\"table\":[\"weather\"],\"jdbcUrl\":\"jdbc:TAOS-RS://master:6041/test\"}]," + + "\"batchSize\": \"1000\"" + + "}"); + job.setPluginJobConf(configuration); + } + + @Test + public void jobInit() { + // when + job.init(); + + // assert + Configuration conf = job.getPluginJobConf(); + + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("connection[0].jdbcUrl")); + Assert.assertEquals(new Integer(1000), conf.getInt("batchSize")); + Assert.assertEquals("ts", conf.getString("column[0]")); + Assert.assertEquals("f2", conf.getString("column[2]")); + } + + @Test + public void jobSplit() { + // when + job.init(); + List configurationList = job.split(10); + + // assert + Assert.assertEquals(10, configurationList.size()); + for (Configuration conf : configurationList) { + Assert.assertEquals("root", conf.getString("username")); + Assert.assertEquals("taosdata", conf.getString("password")); + Assert.assertEquals("jdbc:TAOS-RS://master:6041/test", conf.getString("jdbcUrl")); + Assert.assertEquals(new Integer(1000), conf.getInt("batchSize")); + Assert.assertEquals("ts", conf.getString("column[0]")); + Assert.assertEquals("f2", conf.getString("column[2]")); + + } + } + +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/csv2t.json b/tdenginewriter/src/test/resources/csv2t.json new file mode 100644 index 00000000..ef5c4d04 --- /dev/null +++ b/tdenginewriter/src/test/resources/csv2t.json @@ -0,0 +1,80 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "txtfilereader", + "parameter": { + "path": [ + "/Users/yangzy/IdeaProjects/DataX/tdenginewriter/src/test/resources/weather.csv" + ], + "encoding": "UTF-8", + "column": [ + { + "index": 0, + "type": "string" + }, + { + "index": 1, + "type": "date", + "format": "yyy-MM-dd HH:mm:ss.SSS" + }, + { + "index": 2, + "type": "long" + }, + { + "index": 3, + "type": "double" + }, + { + "index": 4, + "type": "long" + }, + { + "index": 5, + "type": "string" + }, + { + "index": 6, + "type": "String" + } + ], + "fieldDelimiter": "," + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "temperature", + "humidity", + "is_normal", + "device_id", + "address" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/test" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/defaultJob.json b/tdenginewriter/src/test/resources/defaultJob.json new file mode 100644 index 00000000..2a36dfd0 --- /dev/null +++ b/tdenginewriter/src/test/resources/defaultJob.json @@ -0,0 +1,226 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "streamreader", + "parameter": { + "column": [ + { + "type": "string", + "value": "tb1" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "date", + "value": "2022-02-20 12:00:02.123", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:03.123456", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:04.123456789", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" + }, + { + "type": "string", + "value": "2022-02-20 12:00:05.123" + }, + { + "type": "string", + "value": "2022-02-20 12:00:06.123456" + }, + { + "type": "string", + "value": "2022-02-20 12:00:07.123456789" + }, + { + "type": "long", + "value": 1645329608000 + }, + { + "type": "long", + "value": 1645329609000000 + }, + { + "type": "long", + "value": 1645329610000000000 + }, + { + "type": "long", + "random": "0, 10" + }, + { + "type": "long", + "random": "0, 100" + }, + { + "type": "long", + "random": "0, 1000" + }, + { + "type": "long", + "random": "0, 10000" + }, + { + "type": "double", + "random": "0, 10" + }, + { + "type": "double", + "random": "10, 20" + }, + { + "type": "bool", + "random": "0, 50" + }, + { + "type": "bytes", + "random": "0, 10" + }, + { + "type": "string", + "random": "10, 50" + }, + { + "type": "date", + "value": "2022-02-20 12:00:01" + }, + { + "type": "date", + "value": "2022-02-20 12:00:02.123", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:03.123456", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSS" + }, + { + "type": "date", + "value": "2022-02-20 12:00:04.123456789", + "dateFormat": "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" + }, + { + "type": "string", + "value": "2022-02-20 12:00:05.123" + }, + { + "type": "string", + "value": "2022-02-20 12:00:06.123456" + }, + { + "type": "string", + "value": "2022-02-20 12:00:07.123456789" + }, + { + "type": "long", + "value": 1 + }, + { + "type": "long", + "value": 2 + }, + { + "type": "long", + "value": 3 + }, + { + "type": "long", + "value": 4 + }, + { + "type": "double", + "value": 5.55 + }, + { + "type": "double", + "value": 6.666666 + }, + { + "type": "bool", + "value": true + }, + { + "type": "bytes", + "value": "abcABC123" + }, + { + "type": "string", + "value": "北京朝阳望京" + } + ], + "sliceRecordCount": 10 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts1", + "ts2", + "ts3", + "ts4", + "ts5", + "ts6", + "ts7", + "ts8", + "ts9", + "ts10", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10", + "t11", + "t12", + "t13", + "t14", + "t15", + "t16" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db2" + } + ], + "batchSize": 100, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm-schema.sql b/tdenginewriter/src/test/resources/dm-schema.sql new file mode 100644 index 00000000..d9985b1b --- /dev/null +++ b/tdenginewriter/src/test/resources/dm-schema.sql @@ -0,0 +1,30 @@ +select tablespace_name +from dba_data_files; + +create +tablespace test datafile '/home/dmdba/dmdbms/data/DAMENG/test.dbf' size 32 autoextend on next 1 maxsize 1024; + +create +user TESTUSER identified by test123456 default tablespace test; + +grant dba to TESTUSER; + +select * +from user_tables; + +drop table if exists stb1; + +create table stb1 +( + ts timestamp, + f1 tinyint, + f2 smallint, + f3 int, + f4 bigint, + f5 float, + f6 double, + f7 NUMERIC(10, 2), + f8 BIT, + f9 VARCHAR(100), + f10 VARCHAR2(200) +); diff --git a/tdenginewriter/src/test/resources/dm2t-1.json b/tdenginewriter/src/test/resources/dm2t-1.json new file mode 100644 index 00000000..183786bf --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-1.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-2.json b/tdenginewriter/src/test/resources/dm2t-2.json new file mode 100644 index 00000000..dfea82bf --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-2.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024, + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "t1_0" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-3.json b/tdenginewriter/src/test/resources/dm2t-3.json new file mode 100644 index 00000000..cd96a536 --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-3.json @@ -0,0 +1,76 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "splitPk": "f1", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024, + "where": "1 = 1" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/dm2t-4.json b/tdenginewriter/src/test/resources/dm2t-4.json new file mode 100644 index 00000000..5f169d5b --- /dev/null +++ b/tdenginewriter/src/test/resources/dm2t-4.json @@ -0,0 +1,61 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select * from stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/m2t-1.json b/tdenginewriter/src/test/resources/m2t-1.json new file mode 100644 index 00000000..dcacb4b2 --- /dev/null +++ b/tdenginewriter/src/test/resources/m2t-1.json @@ -0,0 +1,72 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "mysqlreader", + "parameter": { + "username": "root", + "password": "123456", + "column": [ + "ts", + "dt", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8" + ], + "splitPk": "id", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": [ + "jdbc:mysql://192.168.56.105:3306/db1?useSSL=false&useUnicode=true&characterEncoding=utf8" + ] + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "dt", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/o2t-1.json b/tdenginewriter/src/test/resources/o2t-1.json new file mode 100644 index 00000000..11264c98 --- /dev/null +++ b/tdenginewriter/src/test/resources/o2t-1.json @@ -0,0 +1,36 @@ +{ + "job":{ + "content":[{ + "reader": { + "name": "opentsdbreader", + "parameter": { + "endpoint": "http://192.168.56.105:4242", + "column": ["weather_temperature"], + "beginDateTime": "2021-01-01 00:00:00", + "endDateTime": "2021-01-01 01:00:00" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "meters" + ], + "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/test?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000 + } + } + }], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-1.json b/tdenginewriter/src/test/resources/t2t-1.json new file mode 100644 index 00000000..5ca04d9a --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-1.json @@ -0,0 +1,94 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-2.json b/tdenginewriter/src/test/resources/t2t-2.json new file mode 100644 index 00000000..18130b6e --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-2.json @@ -0,0 +1,92 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-3.json b/tdenginewriter/src/test/resources/t2t-3.json new file mode 100644 index 00000000..e0a22959 --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-3.json @@ -0,0 +1,92 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "t2", + "t3", + "t4", + "t5", + "t6", + "t7", + "t8", + "t9", + "t10" + ], + "connection": [ + { + "table": [ + "t1" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2?timestampFormat=TIMESTAMP" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/t2t-4.json b/tdenginewriter/src/test/resources/t2t-4.json new file mode 100644 index 00000000..b7716363 --- /dev/null +++ b/tdenginewriter/src/test/resources/t2t-4.json @@ -0,0 +1,72 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1?timestampFormat=TIMESTAMP" + } + ], + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9" + ], + "beginDateTime": "2022-02-15 00:00:00", + "endDateTime": "2022-02-16 00:00:00", + "splitInterval": "1d" + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9" + ], + "connection": [ + { + "table": [ + "weather" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/weather.csv b/tdenginewriter/src/test/resources/weather.csv new file mode 100644 index 00000000..21c4a1aa --- /dev/null +++ b/tdenginewriter/src/test/resources/weather.csv @@ -0,0 +1,10 @@ +tb1,2022-02-20 04:05:59.255,5,8.591868744,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 04:58:47.068,3,1.489693641,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 06:31:09.408,1,4.026500719,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 08:08:00.336,1,9.606400360,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 08:28:58.053,9,7.872178184,1,abcABC123123,北京朝阳望京 +tb1,2022-02-20 10:23:20.836,9,2.699478524,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 11:09:59.739,7,7.906723716,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 19:08:29.315,1,5.852338895,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 22:10:06.243,10,5.535007901,1,abcABC123,北京朝阳望京 +tb1,2022-02-20 23:52:43.683,10,10.642013185,1,abcABC123,北京朝阳望京 diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java index e42dedc0..f5069dc9 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Constant.java @@ -16,6 +16,8 @@ public final class Constant { static final String DEFAULT_DATA_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String METRIC_SPECIFY_KEY = "__metric__"; + public static final String METRIC_SPECIFY_KEY_PREFIX = METRIC_SPECIFY_KEY + "."; + public static final int METRIC_SPECIFY_KEY_PREFIX_LENGTH = METRIC_SPECIFY_KEY_PREFIX.length(); public static final String TS_SPECIFY_KEY = "__ts__"; public static final String VALUE_SPECIFY_KEY = "__value__"; diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java index 14ee7e41..c8a3d7ae 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/Key.java @@ -17,14 +17,19 @@ public class Key { // RDB for MySQL / ADB etc. static final String SINK_DB_TYPE = "sinkDbType"; static final String ENDPOINT = "endpoint"; + static final String USERNAME = "username"; + static final String PASSWORD = "password"; static final String COLUMN = "column"; static final String METRIC = "metric"; static final String FIELD = "field"; static final String TAG = "tag"; + static final String COMBINE = "combine"; static final String INTERVAL_DATE_TIME = "splitIntervalMs"; static final String BEGIN_DATE_TIME = "beginDateTime"; static final String END_DATE_TIME = "endDateTime"; + static final String HINT = "hint"; + static final Boolean COMBINE_DEFAULT_VALUE = false; static final Integer INTERVAL_DATE_TIME_DEFAULT_VALUE = 60; static final String TYPE_DEFAULT_VALUE = "TSDB"; static final Set TYPE_SET = new HashSet<>(); diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java index 04b931c7..550a010a 100755 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/TSDBReader.java @@ -60,6 +60,15 @@ public class TSDBReader extends Reader { "The parameter [" + Key.ENDPOINT + "] is not set."); } + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + // tagK / field could be empty if ("TSDB".equals(type)) { List columns = originalConfig.getList(Key.COLUMN, String.class); @@ -76,7 +85,14 @@ public class TSDBReader extends Reader { "The parameter [" + Key.COLUMN + "] is not set."); } for (String specifyKey : Constant.MUST_CONTAINED_SPECIFY_KEYS) { - if (!columns.contains(specifyKey)) { + boolean containSpecifyKey = false; + for (String column : columns) { + if (column.startsWith(specifyKey)) { + containSpecifyKey = true; + break; + } + } + if (!containSpecifyKey) { throw DataXException.asDataXException( TSDBReaderErrorCode.ILLEGAL_VALUE, "The parameter [" + Key.COLUMN + "] should contain " @@ -99,6 +115,8 @@ public class TSDBReader extends Reader { "The parameter [" + Key.INTERVAL_DATE_TIME + "] should be great than zero."); } + Boolean isCombine = originalConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + SimpleDateFormat format = new SimpleDateFormat(Constant.DEFAULT_DATA_FORMAT); String startTime = originalConfig.getString(Key.BEGIN_DATE_TIME); Long startDate; @@ -168,14 +186,14 @@ public class TSDBReader extends Reader { startTime = format.parse(originalConfig.getString(Key.BEGIN_DATE_TIME)).getTime(); } catch (ParseException e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "解析[" + Key.BEGIN_DATE_TIME + "]失败.", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Analysis [" + Key.BEGIN_DATE_TIME + "] failed.", e); } long endTime; try { endTime = format.parse(originalConfig.getString(Key.END_DATE_TIME)).getTime(); } catch (ParseException e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "解析[" + Key.END_DATE_TIME + "]失败.", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Analysis [" + Key.END_DATE_TIME + "] failed.", e); } if (TimeUtils.isSecond(startTime)) { startTime *= 1000; @@ -186,13 +204,14 @@ public class TSDBReader extends Reader { DateTime startDateTime = new DateTime(TimeUtils.getTimeInHour(startTime)); DateTime endDateTime = new DateTime(TimeUtils.getTimeInHour(endTime)); + final Boolean isCombine = originalConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + if ("TSDB".equals(type)) { - // split by metric - for (String column : columns4TSDB) { + if (isCombine) { // split by time in hour while (startDateTime.isBefore(endDateTime)) { Configuration clone = this.originalConfig.clone(); - clone.set(Key.COLUMN, Collections.singletonList(column)); + clone.set(Key.COLUMN, columns4TSDB); clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); startDateTime = startDateTime.plusMillis(splitIntervalMs); @@ -202,15 +221,30 @@ public class TSDBReader extends Reader { LOG.info("Configuration: {}", JSON.toJSONString(clone)); } + } else { + // split by time in hour + while (startDateTime.isBefore(endDateTime)) { + // split by metric + for (String column : columns4TSDB) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.COLUMN, Collections.singletonList(column)); + + clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); + startDateTime = startDateTime.plusMillis(splitIntervalMs); + // Make sure the time interval is [start, end). + clone.set(Key.END_DATE_TIME, startDateTime.getMillis() - 1); + configurations.add(clone); + + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } } } else { - // split by metric - for (String metric : metrics) { - // split by time in hour + if (isCombine) { while (startDateTime.isBefore(endDateTime)) { Configuration clone = this.originalConfig.clone(); clone.set(Key.COLUMN, columns4RDB); - clone.set(Key.METRIC, Collections.singletonList(metric)); + clone.set(Key.METRIC, metrics); clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); startDateTime = startDateTime.plusMillis(splitIntervalMs); @@ -220,6 +254,24 @@ public class TSDBReader extends Reader { LOG.info("Configuration: {}", JSON.toJSONString(clone)); } + } else { + // split by time in hour + while (startDateTime.isBefore(endDateTime)) { + // split by metric + for (String metric : metrics) { + Configuration clone = this.originalConfig.clone(); + clone.set(Key.COLUMN, columns4RDB); + clone.set(Key.METRIC, Collections.singletonList(metric)); + + clone.set(Key.BEGIN_DATE_TIME, startDateTime.getMillis()); + startDateTime = startDateTime.plusMillis(splitIntervalMs); + // Make sure the time interval is [start, end). + clone.set(Key.END_DATE_TIME, startDateTime.getMillis() - 1); + configurations.add(clone); + + LOG.info("Configuration: {}", JSON.toJSONString(clone)); + } + } } } return configurations; @@ -247,6 +299,8 @@ public class TSDBReader extends Reader { private TSDBConnection conn; private Long startTime; private Long endTime; + private Boolean isCombine; + private Map hint; @Override public void init() { @@ -265,11 +319,16 @@ public class TSDBReader extends Reader { this.tags = readerSliceConfig.getMap(Key.TAG); String address = readerSliceConfig.getString(Key.ENDPOINT); + String username = readerSliceConfig.getString(Key.USERNAME); + String password = readerSliceConfig.getString(Key.PASSWORD); - conn = new TSDBConnection(address); + conn = new TSDBConnection(address, username, password); this.startTime = readerSliceConfig.getLong(Key.BEGIN_DATE_TIME); this.endTime = readerSliceConfig.getLong(Key.END_DATE_TIME); + + this.isCombine = readerSliceConfig.getBool(Key.COMBINE, Key.COMBINE_DEFAULT_VALUE); + this.hint = readerSliceConfig.getMap(Key.HINT); } @Override @@ -283,29 +342,35 @@ public class TSDBReader extends Reader { if ("TSDB".equals(type)) { for (String metric : columns4TSDB) { final Map tags = this.tags == null ? - null : (Map) this.tags.get(metric); + null : (Map) this.tags.get(metric); if (fields == null || !fields.containsKey(metric)) { - conn.sendDPs(metric, tags, this.startTime, this.endTime, recordSender); + conn.sendDPs(metric, tags, this.startTime, this.endTime, recordSender, hint); } else { conn.sendDPs(metric, (List) fields.get(metric), - tags, this.startTime, this.endTime, recordSender); + tags, this.startTime, this.endTime, recordSender, hint); } } } else { - for (String metric : metrics) { + if (isCombine) { final Map tags = this.tags == null ? - null : (Map) this.tags.get(metric); - if (fields == null || !fields.containsKey(metric)) { - conn.sendRecords(metric, tags, startTime, endTime, columns4RDB, recordSender); - } else { - conn.sendRecords(metric, (List) fields.get(metric), - tags, startTime, endTime, columns4RDB, recordSender); + null : (Map) this.tags.get(metrics.get(0)); + conn.sendRecords(metrics, tags, startTime, endTime, columns4RDB, recordSender, hint); + } else { + for (String metric : metrics) { + final Map tags = this.tags == null ? + null : (Map) this.tags.get(metric); + if (fields == null || !fields.containsKey(metric)) { + conn.sendRecords(metric, tags, startTime, endTime, columns4RDB, isCombine, recordSender, hint); + } else { + conn.sendRecords(metric, (List) fields.get(metric), + tags, startTime, endTime, columns4RDB, recordSender, hint); + } } } } } catch (Exception e) { throw DataXException.asDataXException( - TSDBReaderErrorCode.ILLEGAL_VALUE, "获取或发送数据点的过程中出错!", e); + TSDBReaderErrorCode.ILLEGAL_VALUE, "Error in getting or sending data point!", e); } } diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java index 500894bb..96cb7f9d 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/Connection4TSDB.java @@ -22,6 +22,20 @@ public interface Connection4TSDB { */ String address(); + /** + * Get the address of Database. + * + * @return host+ip + */ + String username(); + + /** + * Get the address of Database. + * + * @return host+ip + */ + String password(); + /** * Get the version of Database. * @@ -46,22 +60,27 @@ public interface Connection4TSDB { /** * Send data points for TSDB with single field. */ - void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender) throws Exception; + void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for TSDB with multi fields. */ - void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender) throws Exception; + void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for RDB with single field. */ - void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception; + void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, Boolean isCombine, RecordSender recordSender, Map hint) throws Exception; /** * Send data points for RDB with multi fields. */ - void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception; + void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception; + + /** + * Send data points for RDB with single fields on combine mode. + */ + void sendRecords(List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception; /** * Put data point. diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java index 5426ab49..d466da39 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnection.java @@ -19,9 +19,13 @@ import java.util.Map; public class TSDBConnection implements Connection4TSDB { private String address; + private String username; + private String password; - public TSDBConnection(String address) { + public TSDBConnection(String address, String username, String password) { this.address = address; + this.username = username; + this.password = password; } @Override @@ -29,14 +33,24 @@ public class TSDBConnection implements Connection4TSDB { return address; } + @Override + public String username() { + return username; + } + + @Override + public String password() { + return password; + } + @Override public String version() { - return TSDBUtils.version(address); + return TSDBUtils.version(address, username, password); } @Override public String config() { - return TSDBUtils.config(address); + return TSDBUtils.config(address, username, password); } @Override @@ -45,23 +59,28 @@ public class TSDBConnection implements Connection4TSDB { } @Override - public void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender) throws Exception { - TSDBDump.dump4TSDB(this, metric, tags, start, end, recordSender); + public void sendDPs(String metric, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4TSDB(this, metric, tags, start, end, recordSender, hint); } @Override - public void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender) throws Exception { - TSDBDump.dump4TSDB(this, metric, fields, tags, start, end, recordSender); + public void sendDPs(String metric, List fields, Map tags, Long start, Long end, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4TSDB(this, metric, fields, tags, start, end, recordSender, hint); } @Override - public void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception { - TSDBDump.dump4RDB(this, metric, tags, start, end, columns4RDB, recordSender); + public void sendRecords(String metric, Map tags, Long start, Long end, List columns4RDB, Boolean isCombine, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metric, tags, start, end, columns4RDB, recordSender, hint); } @Override - public void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender) throws Exception { - TSDBDump.dump4RDB(this, metric, fields, tags, start, end, columns4RDB, recordSender); + public void sendRecords(List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metrics, tags, start, end, columns4RDB, recordSender, hint); + } + + @Override + public void sendRecords(String metric, List fields, Map tags, Long start, Long end, List columns4RDB, RecordSender recordSender, Map hint) throws Exception { + TSDBDump.dump4RDB(this, metric, fields, tags, start, end, columns4RDB, recordSender, hint); } @Override diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java index 8bae3a70..c911a062 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBDump.java @@ -9,10 +9,9 @@ import com.alibaba.fastjson.parser.Feature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; + +import static com.alibaba.datax.plugin.reader.tsdbreader.Constant.METRIC_SPECIFY_KEY_PREFIX_LENGTH; /** * Copyright @ 2019 alibaba.com @@ -37,10 +36,10 @@ final class TSDBDump { } static void dump4TSDB(TSDBConnection conn, String metric, Map tags, - Long start, Long end, RecordSender sender) throws Exception { + Long start, Long end, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4SingleField(conn, metric, tags, start, end); + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); List dps = getDps4TSDB(metric, res); if (dps == null || dps.isEmpty()) { return; @@ -49,10 +48,10 @@ final class TSDBDump { } static void dump4TSDB(TSDBConnection conn, String metric, List fields, Map tags, - Long start, Long end, RecordSender sender) throws Exception { + Long start, Long end, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4MultiFields(conn, metric, fields, tags, start, end); + String res = queryRange4MultiFields(conn, metric, fields, tags, start, end, hint); List dps = getDps4TSDB(metric, fields, res); if (dps == null || dps.isEmpty()) { return; @@ -61,10 +60,10 @@ final class TSDBDump { } static void dump4RDB(TSDBConnection conn, String metric, Map tags, - Long start, Long end, List columns4RDB, RecordSender sender) throws Exception { + Long start, Long end, List columns4RDB, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4SingleField(conn, metric, tags, start, end); + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); List dps = getDps4RDB(metric, res); if (dps == null || dps.isEmpty()) { return; @@ -92,12 +91,71 @@ final class TSDBDump { } } + public static void dump4RDB(TSDBConnection conn, List metrics, Map tags, Long start, Long end, List columns4RDB, RecordSender sender, Map hint) throws Exception { + LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metrics, start, end); + + List dps = new LinkedList<>(); + for (String metric : metrics) { + String res = queryRange4SingleField(conn, metric, tags, start, end, hint); + final List dpList = getDps4RDB(metric, res); + if (dpList == null || dpList.isEmpty()) { + continue; + } + dps.addAll(dpList); + } + if (dps.isEmpty()) { + return; + } + Map> dpsCombinedByTs = new LinkedHashMap<>(); + for (DataPoint4TSDB dp : dps) { + final long ts = dp.getTimestamp(); + final Map dpsWithSameTs = dpsCombinedByTs.computeIfAbsent(ts, k -> new LinkedHashMap<>()); + dpsWithSameTs.put(dp.getMetric(), dp); + } + + for (Map.Entry> entry : dpsCombinedByTs.entrySet()) { + final Long ts = entry.getKey(); + final Map metricAndDps = entry.getValue(); + final Record record = sender.createRecord(); + DataPoint4TSDB tmpDp = null; + + for (final String column : columns4RDB) { + if (column.startsWith(Constant.METRIC_SPECIFY_KEY)) { + final String m = column.substring(METRIC_SPECIFY_KEY_PREFIX_LENGTH); + tmpDp = metricAndDps.get(m); + if (tmpDp == null) { + continue; + } + record.addColumn(getColumn(tmpDp.getValue())); + } else if (Constant.TS_SPECIFY_KEY.equals(column)) { + record.addColumn(new LongColumn(ts)); + } else if (Constant.VALUE_SPECIFY_KEY.equals(column)) { + // combine 模式下,不应该定义 __value__ 字段,因为 __metric__.xxx 字段会输出对应的 value 值 + throw new RuntimeException("The " + Constant.VALUE_SPECIFY_KEY + + " column should not be specified in combine mode!"); + } else { + // combine 模式下,应该确保 __metric__.xxx 字段的定义,放在 column 数组的最前面,以保证获取到 metric + if (tmpDp == null) { + throw new RuntimeException("These " + Constant.METRIC_SPECIFY_KEY_PREFIX + + " column should be placed first in the column array in combine mode!"); + } + final Object tagv = tmpDp.getTags().get(column); + if (tagv == null) { + continue; + } + record.addColumn(getColumn(tagv)); + } + } + sender.sendToWriter(record); + } + } + static void dump4RDB(TSDBConnection conn, String metric, List fields, Map tags, Long start, Long end, - List columns4RDB, RecordSender sender) throws Exception { + List columns4RDB, RecordSender sender, Map hint) throws Exception { LOG.info("conn address: {}, metric: {}, start: {}, end: {}", conn.address(), metric, start, end); - String res = queryRange4MultiFields(conn, metric, fields, tags, start, end); + String res = queryRange4MultiFields(conn, metric, fields, tags, start, end, hint); List dps = getDps4RDB(metric, fields, res); if (dps == null || dps.isEmpty()) { return; @@ -131,14 +189,16 @@ final class TSDBDump { valueColumn = new LongColumn((Long) value); } else if (value instanceof String) { valueColumn = new StringColumn((String) value); + } else if (value instanceof Integer) { + valueColumn = new LongColumn(((Integer)value).longValue()); } else { - throw new Exception(String.format("value 不支持类型: [%s]", value.getClass().getSimpleName())); + throw new Exception(String.format("value not supported type: [%s]", value.getClass().getSimpleName())); } return valueColumn; } private static String queryRange4SingleField(TSDBConnection conn, String metric, Map tags, - Long start, Long end) throws Exception { + Long start, Long end, Map hint) throws Exception { String tagKV = getFilterByTags(tags); String body = "{\n" + " \"start\": " + start + ",\n" + @@ -148,14 +208,15 @@ final class TSDBDump { " \"aggregator\": \"none\",\n" + " \"metric\": \"" + metric + "\"\n" + (tagKV == null ? "" : tagKV) + + (hint == null ? "" : (", \"hint\": " + JSON.toJSONString(hint))) + " }\n" + " ]\n" + "}"; - return HttpUtils.post(conn.address() + QUERY, body); + return HttpUtils.post(conn.address() + QUERY, conn.username(), conn.password(), body); } private static String queryRange4MultiFields(TSDBConnection conn, String metric, List fields, - Map tags, Long start, Long end) throws Exception { + Map tags, Long start, Long end, Map hint) throws Exception { // fields StringBuilder fieldBuilder = new StringBuilder(); fieldBuilder.append("\"fields\":["); @@ -177,10 +238,11 @@ final class TSDBDump { " \"metric\": \"" + metric + "\",\n" + fieldBuilder.toString() + (tagKV == null ? "" : tagKV) + + (hint == null ? "" : (", \"hint\": " + JSON.toJSONString(hint))) + " }\n" + " ]\n" + "}"; - return HttpUtils.post(conn.address() + QUERY_MULTI_FIELD, body); + return HttpUtils.post(conn.address() + QUERY_MULTI_FIELD, conn.username(), conn.password(), body); } private static String getFilterByTags(Map tags) { diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java index 3e0be854..5cba4e54 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtils.java @@ -1,11 +1,13 @@ package com.alibaba.datax.plugin.reader.tsdbreader.util; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.fluent.Content; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType; import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -22,13 +24,18 @@ public final class HttpUtils { public final static int CONNECT_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); public final static int SOCKET_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); + private static final String CREDENTIALS_FORMAT = "%s:%s"; + private static final String BASIC_AUTHENTICATION_FORMAT = "Basic %s"; + private HttpUtils() { } - public static String get(String url) throws Exception { - Content content = Request.Get(url) + public static String get(String url, String username, String password) throws Exception { + final Request request = Request.Get(url) .connectTimeout(CONNECT_TIMEOUT_DEFAULT_IN_MILL) - .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL) + .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL); + addAuth(request, username, password); + Content content = request .execute() .returnContent(); if (content == null) { @@ -37,24 +44,21 @@ public final class HttpUtils { return content.asString(StandardCharsets.UTF_8); } - public static String post(String url, Map params) throws Exception { - return post(url, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, Map params) throws Exception { + return post(url, username, password, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, String params) throws Exception { - return post(url, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, String params) throws Exception { + return post(url, username, password, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, Map params, + public static String post(String url, String username, String password, String params, int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - return post(url, JSON.toJSONString(params), connectTimeoutInMill, socketTimeoutInMill); - } - - public static String post(String url, String params, - int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - Content content = Request.Post(url) + Request request = Request.Post(url) .connectTimeout(connectTimeoutInMill) - .socketTimeout(socketTimeoutInMill) + .socketTimeout(socketTimeoutInMill); + addAuth(request, username, password); + Content content = request .addHeader("Content-Type", "application/json") .bodyString(params, ContentType.APPLICATION_JSON) .execute() @@ -64,4 +68,20 @@ public final class HttpUtils { } return content.asString(StandardCharsets.UTF_8); } + + private static void addAuth(Request request, String username, String password) { + String authorization = generateHttpAuthorization(username, password); + if (authorization != null) { + request.setHeader("Authorization", authorization); + } + } + + private static String generateHttpAuthorization(String username, String password) { + if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { + return null; + } + String credentials = String.format(CREDENTIALS_FORMAT, username, password); + credentials = Base64.getEncoder().encodeToString(credentials.getBytes()); + return String.format(BASIC_AUTHENTICATION_FORMAT, credentials); + } } diff --git a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java index bb7b4b87..d91c3557 100644 --- a/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java +++ b/tsdbreader/src/main/java/com/alibaba/datax/plugin/reader/tsdbreader/util/TSDBUtils.java @@ -1,11 +1,5 @@ package com.alibaba.datax.plugin.reader.tsdbreader.util; -import com.alibaba.datax.plugin.reader.tsdbreader.conn.DataPoint4TSDB; -import com.alibaba.fastjson.JSON; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; /** * Copyright @ 2019 alibaba.com @@ -17,52 +11,28 @@ import java.util.List; */ public final class TSDBUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(TSDBUtils.class); - private TSDBUtils() { } - public static String version(String address) { + public static String version(String address, String username, String password) { String url = String.format("%s/api/version", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static String config(String address) { + public static String config(String address, String username, String password) { String url = String.format("%s/api/config", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - - public static boolean put(String address, List dps) { - return put(address, JSON.toJSON(dps)); - } - - public static boolean put(String address, DataPoint4TSDB dp) { - return put(address, JSON.toJSON(dp)); - } - - private static boolean put(String address, Object o) { - String url = String.format("%s/api/put", address); - String rsp; - try { - rsp = HttpUtils.post(url, o.toString()); - // If successful, the returned content should be null. - assert rsp == null; - } catch (Exception e) { - LOGGER.error("Address: {}, DataPoints: {}", url, o); - throw new RuntimeException(e); - } - return true; - } } diff --git a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java index e4544088..6be291e8 100644 --- a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java +++ b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/conn/TSDBConnectionTest.java @@ -19,12 +19,12 @@ public class TSDBConnectionTest { @Test public void testVersion() { - String version = new TSDBConnection(TSDB_ADDRESS).version(); + String version = new TSDBConnection(TSDB_ADDRESS,null,null).version(); Assert.assertNotNull(version); } @Test public void testIsSupported() { - Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS).isSupported()); + Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS,null,null).isSupported()); } } diff --git a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java b/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java deleted file mode 100644 index 12a2660a..00000000 --- a/tsdbreader/src/test/java/com/alibaba/datax/plugin/reader/tsdbreader/util/HttpUtilsTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.alibaba.datax.plugin.reader.tsdbreader.util; - -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -/** - * Copyright @ 2019 alibaba.com - * All right reserved. - * Function:HttpUtils Test - * - * @author Benedict Jin - * @since 2019-10-21 - */ -@Ignore -public class HttpUtilsTest { - - @Test - public void testSimpleCase() throws Exception { - String url = "https://httpbin.org/post"; - Map params = new HashMap<>(); - params.put("foo", "bar"); - - String rsp = HttpUtils.post(url, params); - System.out.println(rsp); - Assert.assertNotNull(rsp); - } - - @Test - public void testGet() throws Exception { - String url = String.format("%s/api/version", Const.TSDB_ADDRESS); - String rsp = HttpUtils.get(url); - System.out.println(rsp); - Assert.assertNotNull(rsp); - } -} diff --git a/tsdbwriter/doc/tsdbhttpwriter.md b/tsdbwriter/doc/tsdbhttpwriter.md index c723a360..c0b13654 100644 --- a/tsdbwriter/doc/tsdbhttpwriter.md +++ b/tsdbwriter/doc/tsdbhttpwriter.md @@ -6,24 +6,57 @@ ___ ## 1 快速介绍 -TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库中(后续简称 TSDB)。 +TSDBWriter 插件实现了将数据点写入到阿里巴巴云原生多模数据库Lindorm TSDB数据库中(后续简称 TSDB)。 -时间序列数据库(Time Series Database , 简称 TSDB)是一种高性能,低成本,稳定可靠的在线时序数据库服务;提供高效读写,高压缩比存储、时序数据插值及聚合计算,广泛应用于物联网(IoT)设备监控系统 ,企业能源管理系统(EMS),生产安全监控系统,电力检测系统等行业场景。 TSDB 提供百万级时序数据秒级写入,高压缩比低成本存储、预降采样、插值、多维聚合计算,查询结果可视化功能;解决由于设备采集点数量巨大,数据采集频率高,造成的存储成本高,写入和查询分析效率低的问题。更多关于 TSDB 的介绍,详见[阿里云 TSDB 官网](https://help.aliyun.com/product/54825.html)。 +时间序列数据库(Time Series Database , 简称 TSDB)是一种高性能,低成本,稳定可靠的在线时序数据库服务;提供高效读写,高压缩比存储、时序数据插值及聚合计算,广泛应用于物联网(IoT)设备监控系统 ,企业能源管理系统(EMS),生产安全监控系统,电力检测系统等行业场景。 TSDB 提供千万级时序数据秒级写入,高压缩比低成本存储、预降采样、插值、多维聚合计算,查询结果可视化功能;解决由于设备采集点数量巨大,数据采集频率高,造成的存储成本高,写入和查询分析效率低的问题。更多关于 TSDB 的介绍,详见[阿里云 Lindorm TSDB 官网](https://help.aliyun.com/document_detail/174600.html)。 +注意:阿里巴巴自研HiTSDB已全新升级为云原生多模数据库Lindorm TSDB。Lindorm TSDB兼容大部分HiTSDB的HTTP API并提供原生SQL能力,TSDBWriter插件使用HTTP API方式写入,要使用原生SQL能力需要提前在Lindorm TSDB进行建表。详细参见[与旧版TSDB的比较](https://help.aliyun.com/document_detail/387477.html) ## 2 实现原理 -通过 HTTP 连接 TSDB 实例,并通过 `/api/put` 接口将数据点写入。关于写入接口详见 TSDB 的[接口说明文档](https://help.aliyun.com/document_detail/59939.html)。 - - +通过TSDB客户端 hitsdb-client 连接 TSDB 实例,并将数据点通过HTTP API方式写入。关于写入接口详见TSDB 的[SDK 参考](https://help.aliyun.com/document_detail/61587.html)。 ## 3 功能说明 ### 3.1 配置样例 -* 配置一个从 OpenTSDB 数据库同步抽取数据到 TSDB: +* 配置TSDB Writer: +```json +{ + "name": "tsdbwriter", + "parameter": { + "endpoint": "http://localhost:8242", + "sourceDbType": "RDB", + "batchSize": 256, + "columnType": [ + "tag", + "tag", + "field_string", + "field_double", + "timestamp", + "field_bool" + ], + "column": [ + "tag1", + "tag2", + "field1", + "field2", + "timestamp", + "field3" + ], + "multiField":"true", + "table":"testmetric", + "username":"xxx", + "password":"xxx", + "ignoreWriteError":"false", + "database":"default" + } +} +``` + +* 配置一个从 支持 OpenTSDB 协议的数据库同步抽取数据到 TSDB: ```json { @@ -42,7 +75,7 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 } }, "writer": { - "name": "tsdbhttpwriter", + "name": "tsdbwriter", "parameter": { "endpoint": "http://localhost:8242" } @@ -58,7 +91,37 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 } ``` - +* 使用 OpenTSDB (单值)协议写入TSDB(不推荐): +```json +{ + "name": "tsdbwriter", + "endpoint": "http://localhost:8242", + "sourceDbType": "RDB", + "parameter": { + "batchSize": 256, + "columnType": [ + "tag", + "tag", + "field_string", + "field_double", + "timestamp", + "field_boolean" + ], + "column": [ + "tag1", + "tag2", + "field_metric_1", + "field_metric_2", + "timestamp", + "field_metric_3" + ], + "username":"tsdb", + "password":"enxU^", + "ignoreWriteError":"false" + } +} +``` +转换到的TSDB 表名(metric)由column中field对应的列名决定:对于上诉配置一行关系型数据将会写入三个metric(field_metric_1,field_metric_2,field_metric_3) ### 3.2 参数说明 @@ -74,23 +137,85 @@ TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库 * 格式:http://IP:Port * 默认值:无 +* **sourceDbType** + * 描述:源端数据类型 + * 必选:否 + * 格式:string [RDB或者TSDB] + * 默认值:TSDB + +* **multiField** + * 描述:使用HTTP API多值(多个field)方式写入,目前TSDB版本使用多值写入,需要指定为true + * 必选:是 + * 格式:bool + * 默认值:false (单值) + * 说明: 如果使用Lindorm TSDB原生SQL能力访问HTTP API方式写入的数据,需要在TSDB进行预建表,否则只能使用HiTSDB HTTP API方式[查询数据](https://help.aliyun.com/document_detail/107576.html)。 + +* **column** + * 描述:关系型数据库中表的字段名 + * 必选:当sourceDbType为RDB时必选 + * 格式:string + * 默认值:无 + * 说明: 此处的字段顺序,需要和Reader插件中配置的column字段的顺序保持一致。 + +* **columnType** + * 描述:关系型数据库中表字段,映射到TSDB中的类型。支持的类型如下所示: + * timestamp:该字段为时间戳 + * tag:该字段为tag + * field_string: 该Field的value是字符串类型 + * field_double: 该Field的value是数值类型 + * field_boolean: 该Field的value是布尔类型 + * 必选:当sourceDbType为RDB时必选 + * 格式:string [RDB或者TSDB] + * 默认值: 无 + * 说明: 此处的字段顺序,需要和column配置中的字段顺序保持一致 + +* **table** + * 描述:TSDB对应表名(metric) + * 必选:当sourceDbType为RDB时且multiField为true时必选 + * 格式:string + * 默认值:无 + * 说明: 要导入的TSDB表名,如果multiField为falase,不需要填写,对应的metric需要写到column字段 + * **batchSize** * 描述:每次批量数据的条数 * 必选:否 * 格式:int,需要保证大于 0 * 默认值:100 +* **ignoreWriteError** + * 描述:如果设置为 true,则忽略写入错误,继续写入;否则,多次重试后仍写入失败的话,则会终止写入任务 + * 必选:否 + * 格式:bool + * 默认值:false + +* **username** + * 描述:数据库用户名 + * 必选:否 + * 格式:string + * 默认值:无 + * 说明: TSDB配置了鉴权需要填写 + + +* **password** + * 描述:数据库密码 + * 必选:否 + * 格式:string + * 默认值:无 + * 说明: TSDB配置了鉴权需要填写 + +* **database** + * 描述:导入的数据库 + * 必选:否 + * 格式:string + * 默认值:default + * 说明: TSDB需要提前创建数据库 + * **maxRetryTime** * 描述:失败后重试的次数 * 必选:否 * 格式:int,需要保证大于 1 * 默认值:3 -* **ignoreWriteError** - * 描述:如果设置为 true,则忽略写入错误,继续写入;否则,多次重试后仍写入失败的话,则会终止写入任务 - * 必选:否 - * 格式:bool - * 默认值:false @@ -171,7 +296,7 @@ HBase 机型: 8C16G * 5 ## 5 约束限制 -### 5.1 目前只支持兼容 TSDB 2.4.x 及以上版本 +### 5.1 目前支持Lindorm TSDB全部版本 以及 HiTSDB 2.4.x 及以上版本 其他版本暂不保证兼容 diff --git a/tsdbwriter/pom.xml b/tsdbwriter/pom.xml index 1fb7c1e0..6f2bac52 100644 --- a/tsdbwriter/pom.xml +++ b/tsdbwriter/pom.xml @@ -91,6 +91,13 @@ ${fastjson.version} + + + com.aliyun + hitsdb-client + 0.3.7 + + junit diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java index 8119348d..ecb30055 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/Connection4TSDB.java @@ -21,6 +21,28 @@ public interface Connection4TSDB { */ String address(); + /** + * Get the setted database name. + * + * @return database + */ + String database(); + + + /** + * Get the username of Database. + * + * @return username + */ + String username(); + + /** + * Get the password of Database. + * + * @return password + */ + String password(); + /** * Get the version of Database. * @@ -69,17 +91,25 @@ public interface Connection4TSDB { boolean put(List dps); /** - * Put data points. + * Put data points with single field. * * @param dps data points * @return whether the data point is written successfully */ boolean put(String dps); + /** + * Put data points with multi fields. + * + * @param dps data points + * @return whether the data point is written successfully + */ + boolean mput(String dps); + /** * Whether current version is supported. * * @return true: supported; false: not yet! */ boolean isSupported(); -} +} \ No newline at end of file diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java index e4ebad7d..074f0295 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/conn/TSDBConnection.java @@ -18,12 +18,18 @@ import java.util.List; public class TSDBConnection implements Connection4TSDB { private String address; + private String username; + private String password; + private String database; - public TSDBConnection(String address) { + public TSDBConnection(String address, String database, String username, String password) { if (StringUtils.isBlank(address)) { throw new RuntimeException("TSDBConnection init failed because address is blank!"); } this.address = address; + this.database = database; + this.username = username; + this.password = password; } @Override @@ -31,14 +37,29 @@ public class TSDBConnection implements Connection4TSDB { return address; } + @Override + public String username() { + return username; + } + + @Override + public String database() { + return database; + } + + @Override + public String password() { + return password; + } + @Override public String version() { - return TSDBUtils.version(address); + return TSDBUtils.version(address, username, password); } @Override public String config() { - return TSDBUtils.config(address); + return TSDBUtils.config(address, username, password); } @Override @@ -53,17 +74,22 @@ public class TSDBConnection implements Connection4TSDB { @Override public boolean put(DataPoint4TSDB dp) { - return TSDBUtils.put(address, dp); + return TSDBUtils.put(address, database, username, password, dp); } @Override public boolean put(List dps) { - return TSDBUtils.put(address, dps); + return TSDBUtils.put(address, database, username, password, dps); } @Override public boolean put(String dps) { - return TSDBUtils.put(address, dps); + return TSDBUtils.put(address, database, username, password, dps); + } + + @Override + public boolean mput(String dps) { + return TSDBUtils.mput(address, database, username, password, dps); } @Override diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java index 2cc3f671..6cb239ec 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/Key.java @@ -10,8 +10,22 @@ package com.alibaba.datax.plugin.writer.tsdbwriter; */ public class Key { + static final String SOURCE_DB_TYPE = "sourceDbType"; + static final String MULTI_FIELD = "multiField"; + + // common static final String ENDPOINT = "endpoint"; + static final String USERNAME = "username"; + static final String PASSWORD = "password"; + static final String IGNORE_WRITE_ERROR = "ignoreWriteError"; + static final String DATABASE = "database"; + + // for tsdb static final String BATCH_SIZE = "batchSize"; static final String MAX_RETRY_TIME = "maxRetryTime"; - static final String IGNORE_WRITE_ERROR = "ignoreWriteError"; + + // for rdb + static final String COLUMN = "column"; + static final String COLUMN_TYPE = "columnType"; + static final String TABLE = "table"; } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java new file mode 100644 index 00000000..792806a6 --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/SourceDBType.java @@ -0,0 +1,5 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +public enum SourceDBType { + TSDB, RDB +} diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java new file mode 100644 index 00000000..86e35c56 --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBConverter.java @@ -0,0 +1,96 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.fastjson.JSON; +import com.aliyun.hitsdb.client.value.request.MultiFieldPoint; +import com.aliyun.hitsdb.client.value.request.Point; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class TSDBConverter { + + private static final Logger LOG = LoggerFactory.getLogger(TSDBConverter.class); + + private List columnName; + private List columnType; + + TSDBConverter(List columnName, List columnType) { + this.columnName = columnName; + this.columnType = columnType; + LOG.info("columnName: {}, columnType: {}", JSON.toJSONString(columnName), JSON.toJSONString(columnType)); + } + + List transRecord2Point(List records) { + List dps = new ArrayList(); + for (Record record : records) { + List metricBuilders = new ArrayList(); + Map tags = new HashMap(); + Long time = 0L; + + for (int i = 0; i < columnType.size(); i++) { + String type = columnType.get(i); + String name = columnName.get(i); + Column column = record.getColumn(i); + if (TSDBModel.TSDB_TAG.equals(type)) { + tags.put(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asDouble())); + } else if (TSDBModel.TSDB_FIELD_STRING.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asString())); + } else if (TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + metricBuilders.add(new Point.MetricBuilder(name).value(column.asBoolean())); + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + time = column.asLong(); + } else if (TSDBModel.TSDB_METRIC_NUM.equals(type)) { + // compatible with previous usage of TSDB_METRIC_NUM + metricBuilders.add(new Point.MetricBuilder(name).value(column.asDouble())); + } else if (TSDBModel.TSDB_METRIC_STRING.equals(type)) { + // compatible with previous usage of TSDB_METRIC_STRING + metricBuilders.add(new Point.MetricBuilder(name).value(column.asString())); + } + } + for (Point.MetricBuilder metricBuilder : metricBuilders) { + dps.add(metricBuilder.tag(tags).timestamp(time).build(false)); + } + } + return dps; + } + + List transRecord2MultiFieldPoint(List records, String tableName) { + List dps = new ArrayList(); + for (Record record : records) { + MultiFieldPoint.MetricBuilder builder = MultiFieldPoint.metric(tableName); + for (int i = 0; i < columnType.size(); i++) { + String type = columnType.get(i); + String name = columnName.get(i); + Column column = record.getColumn(i); + if (TSDBModel.TSDB_TAG.equals(type)) { + builder.tag(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type)) { + builder.field(name, column.asDouble()); + } else if (TSDBModel.TSDB_FIELD_STRING.equals(type)) { + builder.field(name, column.asString()); + } else if (TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + builder.field(name, column.asBoolean()); + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + builder.timestamp(column.asLong()); + } else if (TSDBModel.TSDB_METRIC_NUM.equals(type)) { + // compatible with previous usage of TSDB_METRIC_NUM + builder.field(name, column.asDouble()); + } else if (TSDBModel.TSDB_METRIC_STRING.equals(type)) { + // compatible with previous usage of TSDB_METRIC_STRING + builder.field(name, column.asString()); + } + } + MultiFieldPoint point = builder.build(false); + dps.add(point); + } + return dps; + } +} diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java new file mode 100644 index 00000000..ead0e2cc --- /dev/null +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBModel.java @@ -0,0 +1,11 @@ +package com.alibaba.datax.plugin.writer.tsdbwriter; + +class TSDBModel { + static final String TSDB_METRIC_NUM = "metric_num"; + static final String TSDB_METRIC_STRING = "metric_string"; + static final String TSDB_TAG = "tag"; + static final String TSDB_TIMESTAMP = "timestamp"; + static final String TSDB_FIELD_DOUBLE = "field_double"; + static final String TSDB_FIELD_STRING = "field_string"; + static final String TSDB_FIELD_BOOL = "field_bool"; +} \ No newline at end of file diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java index e410b2ba..433527da 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriter.java @@ -5,14 +5,23 @@ import com.alibaba.datax.common.exception.DataXException; import com.alibaba.datax.common.plugin.RecordReceiver; import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.ConfigurationUtil; import com.alibaba.datax.common.util.RetryUtil; import com.alibaba.datax.plugin.writer.conn.TSDBConnection; +import com.aliyun.hitsdb.client.TSDB; +import com.aliyun.hitsdb.client.TSDBClientFactory; +import com.aliyun.hitsdb.client.TSDBConfig; +import com.aliyun.hitsdb.client.value.request.MultiFieldPoint; +import com.aliyun.hitsdb.client.value.request.Point; +import com.aliyun.hitsdb.client.value.response.batch.IgnoreErrorsResult; +import com.aliyun.hitsdb.client.value.response.batch.MultiFieldIgnoreErrorsResult; +import com.aliyun.hitsdb.client.value.response.batch.SummaryResult; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; +import java.io.IOException; +import java.util.*; import java.util.concurrent.Callable; /** @@ -26,6 +35,9 @@ import java.util.concurrent.Callable; @SuppressWarnings("unused") public class TSDBWriter extends Writer { + private static SourceDBType DB_TYPE; + private static TSDB tsdb = null; + public static class Job extends Writer.Job { private static final Logger LOG = LoggerFactory.getLogger(Job.class); @@ -34,33 +46,100 @@ public class TSDBWriter extends Writer { @Override public void init() { - this.originalConfig = super.getPluginJobConf(); + originalConfig = super.getPluginJobConf(); - String address = this.originalConfig.getString(Key.ENDPOINT); - if (StringUtils.isBlank(address)) { + // check source db type + String sourceDbType = originalConfig.getString(Key.SOURCE_DB_TYPE); + if (StringUtils.isBlank(sourceDbType)) { + sourceDbType = SourceDBType.TSDB.name(); + originalConfig.set(Key.SOURCE_DB_TYPE, sourceDbType); + LOG.info("The parameter [" + Key.SOURCE_DB_TYPE + "] will be default value: " + SourceDBType.TSDB); + } + try { + DB_TYPE = SourceDBType.valueOf(sourceDbType); + } catch (Exception e) { throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, - "The parameter [" + Key.ENDPOINT + "] is not set."); + "The parameter [" + Key.SOURCE_DB_TYPE + + "] is invalid, which should be one of [" + Arrays.toString(SourceDBType.values()) + "]."); } - Integer batchSize = this.originalConfig.getInt(Key.BATCH_SIZE); - if (batchSize == null || batchSize < 1) { - originalConfig.set(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); - LOG.info("The parameter [" + Key.BATCH_SIZE + - "] will be default value: " + Constant.DEFAULT_BATCH_SIZE); - } + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + String address = originalConfig.getString(Key.ENDPOINT); + if (StringUtils.isBlank(address)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.ENDPOINT + "] is not set."); + } - Integer retrySize = this.originalConfig.getInt(Key.MAX_RETRY_TIME); - if (retrySize == null || retrySize < 0) { - originalConfig.set(Key.MAX_RETRY_TIME, Constant.DEFAULT_TRY_SIZE); - LOG.info("The parameter [" + Key.MAX_RETRY_TIME + - "] will be default value: " + Constant.DEFAULT_TRY_SIZE); - } + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + + Integer batchSize = originalConfig.getInt(Key.BATCH_SIZE); + if (batchSize == null || batchSize < 1) { + originalConfig.set(Key.BATCH_SIZE, Constant.DEFAULT_BATCH_SIZE); + LOG.info("The parameter [" + Key.BATCH_SIZE + + "] will be default value: " + Constant.DEFAULT_BATCH_SIZE); + } + + Integer retrySize = originalConfig.getInt(Key.MAX_RETRY_TIME); + if (retrySize == null || retrySize < 0) { + originalConfig.set(Key.MAX_RETRY_TIME, Constant.DEFAULT_TRY_SIZE); + LOG.info("The parameter [" + Key.MAX_RETRY_TIME + + "] will be default value: " + Constant.DEFAULT_TRY_SIZE); + } + + Boolean ignoreWriteError = originalConfig.getBool(Key.IGNORE_WRITE_ERROR); + if (ignoreWriteError == null) { + originalConfig.set(Key.IGNORE_WRITE_ERROR, Constant.DEFAULT_IGNORE_WRITE_ERROR); + LOG.info("The parameter [" + Key.IGNORE_WRITE_ERROR + + "] will be default value: " + Constant.DEFAULT_IGNORE_WRITE_ERROR); + } + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + originalConfig.getNecessaryValue(Key.ENDPOINT, TSDBWriterErrorCode.REQUIRED_VALUE); + originalConfig.getNecessaryValue(Key.COLUMN_TYPE, TSDBWriterErrorCode.REQUIRED_VALUE); + originalConfig.getNecessaryValue(Key.COLUMN, TSDBWriterErrorCode.REQUIRED_VALUE); + String endpoint = originalConfig.getString(Key.ENDPOINT); + String[] split = endpoint.split(":"); + if (split.length != 3) { + throw DataXException.asDataXException(TSDBWriterErrorCode.REQUIRED_VALUE, + "The parameter [" + Key.ENDPOINT + "] is invalid, which should be [http://IP:Port]."); + } + String ip = split[1].substring(2); + int port = Integer.parseInt(split[2]); + + String username = originalConfig.getString(Key.USERNAME, null); + if (StringUtils.isBlank(username)) { + LOG.warn("The parameter [" + Key.USERNAME + "] is blank."); + } + + String password = originalConfig.getString(Key.PASSWORD, null); + if (StringUtils.isBlank(password)) { + LOG.warn("The parameter [" + Key.PASSWORD + "] is blank."); + } + + if (!StringUtils.isBlank(password) && !StringUtils.isBlank(username)) { + tsdb = TSDBClientFactory.connect(TSDBConfig.address(ip, port).basicAuth(username, password).config()); + } else { + tsdb = TSDBClientFactory.connect(TSDBConfig.address(ip, port).config()); + } + + String database = originalConfig.getString(Key.DATABASE, null); + if (StringUtils.isBlank(database)) { + LOG.info("The parameter [" + Key.DATABASE + "] is blank."); + } else { + LOG.warn("The parameter [" + Key.DATABASE + "] : {} is ignored."); + // tsdb.useDatabase(database); + } + + LOG.info("Tsdb config: {}", ConfigurationUtil.filterSensitive(originalConfig).toJSON()); - Boolean ignoreWriteError = this.originalConfig.getBool(Key.IGNORE_WRITE_ERROR); - if (ignoreWriteError == null) { - originalConfig.set(Key.IGNORE_WRITE_ERROR, Constant.DEFAULT_IGNORE_WRITE_ERROR); - LOG.info("The parameter [" + Key.IGNORE_WRITE_ERROR + - "] will be default value: " + Constant.DEFAULT_IGNORE_WRITE_ERROR); } } @@ -72,7 +151,7 @@ public class TSDBWriter extends Writer { public List split(int mandatoryNumber) { ArrayList configurations = new ArrayList(mandatoryNumber); for (int i = 0; i < mandatoryNumber; i++) { - configurations.add(this.originalConfig.clone()); + configurations.add(originalConfig.clone()); } return configurations; } @@ -83,6 +162,14 @@ public class TSDBWriter extends Writer { @Override public void destroy() { + if (DB_TYPE == SourceDBType.RDB) { + if (tsdb != null) { + try { + tsdb.close(); + } catch (IOException ignored) { + } + } + } } } @@ -91,18 +178,87 @@ public class TSDBWriter extends Writer { private static final Logger LOG = LoggerFactory.getLogger(Task.class); private TSDBConnection conn; + private boolean multiField; private int batchSize; private int retrySize; private boolean ignoreWriteError; + private String tableName; + private TSDBConverter tsdbConverter; @Override public void init() { Configuration writerSliceConfig = getPluginJobConf(); - String address = writerSliceConfig.getString(Key.ENDPOINT); - this.conn = new TSDBConnection(address); - this.batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE); - this.retrySize = writerSliceConfig.getInt(Key.MAX_RETRY_TIME); + + // single field | multi fields + this.multiField = writerSliceConfig.getBool(Key.MULTI_FIELD, false); this.ignoreWriteError = writerSliceConfig.getBool(Key.IGNORE_WRITE_ERROR); + + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + String address = writerSliceConfig.getString(Key.ENDPOINT); + String database = writerSliceConfig.getString(Key.DATABASE); + String username = writerSliceConfig.getString(Key.USERNAME); + String password = writerSliceConfig.getString(Key.PASSWORD); + this.conn = new TSDBConnection(address, database, username, password); + this.batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE); + this.retrySize = writerSliceConfig.getInt(Key.MAX_RETRY_TIME); + + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + int timeSize = 0; + int fieldSize = 0; + int tagSize = 0; + batchSize = writerSliceConfig.getInt(Key.BATCH_SIZE, 100); + List columnName = writerSliceConfig.getList(Key.COLUMN, String.class); + List columnType = writerSliceConfig.getList(Key.COLUMN_TYPE, String.class); + Set typeSet = new HashSet(columnType); + if (columnName.size() != columnType.size()) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] should has same length with [" + Key.COLUMN + "]."); + } + + for (String type : columnType) { + if (TSDBModel.TSDB_TAG.equals(type)) { + tagSize ++; + } else if (TSDBModel.TSDB_FIELD_DOUBLE.equals(type) || TSDBModel.TSDB_FIELD_STRING.equals(type) + || TSDBModel.TSDB_FIELD_BOOL.equals(type)) { + fieldSize++; + } else if (TSDBModel.TSDB_TIMESTAMP.equals(type)) { + timeSize++; + } + } + + if (fieldSize == 0) { + // compatible with previous usage of TSDB_METRIC_NUM and TSDB_METRIC_STRING + if (!typeSet.contains(TSDBModel.TSDB_METRIC_NUM) && !typeSet.contains(TSDBModel.TSDB_METRIC_STRING)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set at least one of " + + TSDBModel.TSDB_FIELD_DOUBLE + ", " + TSDBModel.TSDB_FIELD_STRING + " or " + TSDBModel.TSDB_FIELD_BOOL + "."); + } + } + + if (tagSize == 0) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set " + TSDBModel.TSDB_TAG + ". "); + } + + if (timeSize != 1) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.COLUMN_TYPE + "] is invalid, must set one and only one " + + TSDBModel.TSDB_TIMESTAMP + "."); + } + + if (multiField) { + // check source db type + tableName = writerSliceConfig.getString(Key.TABLE); + if (StringUtils.isBlank(tableName)) { + throw DataXException.asDataXException(TSDBWriterErrorCode.ILLEGAL_VALUE, + "The parameter [" + Key.TABLE + "] h must set when use multi field input."); + } + } + tsdbConverter = new TSDBConverter(columnName, columnType); + + } } @Override @@ -111,30 +267,52 @@ public class TSDBWriter extends Writer { @Override public void startWrite(RecordReceiver recordReceiver) { - try { - Record lastRecord = null; - Record record; - int count = 0; - StringBuilder dps = new StringBuilder(); - while ((record = recordReceiver.getFromReader()) != null) { - final int recordLength = record.getColumnNumber(); - for (int i = 0; i < recordLength; i++) { - dps.append(record.getColumn(i).asString()); - dps.append(","); - count++; - if (count == batchSize) { - count = 0; - batchPut(record, "[" + dps.substring(0, dps.length() - 1) + "]"); - dps = new StringBuilder(); + // for tsdb + if (DB_TYPE == SourceDBType.TSDB) { + try { + Record lastRecord = null; + Record record; + int count = 0; + StringBuilder dps = new StringBuilder(); + while ((record = recordReceiver.getFromReader()) != null) { + final int recordLength = record.getColumnNumber(); + for (int i = 0; i < recordLength; i++) { + dps.append(record.getColumn(i).asString()); + dps.append(","); + count++; + if (count == batchSize) { + count = 0; + batchPut(record, "[" + dps.substring(0, dps.length() - 1) + "]"); + dps = new StringBuilder(); + } } + lastRecord = record; } - lastRecord = record; + if (StringUtils.isNotBlank(dps.toString())) { + batchPut(lastRecord, "[" + dps.substring(0, dps.length() - 1) + "]"); + } + } catch (Exception e) { + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, e); } - if (StringUtils.isNotBlank(dps.toString())) { - batchPut(lastRecord, "[" + dps.substring(0, dps.length() - 1) + "]"); + } else if (DB_TYPE == SourceDBType.RDB) { + // for rdb + List writerBuffer = new ArrayList(this.batchSize); + Record record; + long total = 0; + while ((record = recordReceiver.getFromReader()) != null) { + writerBuffer.add(record); + if (writerBuffer.size() >= this.batchSize) { + total += doBatchInsert(writerBuffer); + writerBuffer.clear(); + } } - } catch (Exception e) { - throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, e); + if (!writerBuffer.isEmpty()) { + total += doBatchInsert(writerBuffer); + writerBuffer.clear(); + } + getTaskPluginCollector().collectMessage("write size", total + ""); + LOG.info("Task finished, write size: {}", total); + } } @@ -143,12 +321,13 @@ public class TSDBWriter extends Writer { RetryUtil.executeWithRetry(new Callable() { @Override public Integer call() { - if (!conn.put(dps)) { - getTaskPluginCollector().collectDirtyRecord(record, "Put data points failed!"); - throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, - "Put data points failed!"); + final boolean success = multiField ? conn.mput(dps) : conn.put(dps); + if (success) { + return 0; } - return 0; + getTaskPluginCollector().collectDirtyRecord(record, "Put data points failed!"); + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, + "Put data points failed!"); } }, retrySize, 60000L, true); } catch (Exception e) { @@ -160,6 +339,47 @@ public class TSDBWriter extends Writer { } } + private long doBatchInsert(final List writerBuffer) { + int size; + if (ignoreWriteError) { + if (multiField) { + List points = tsdbConverter.transRecord2MultiFieldPoint(writerBuffer, tableName); + size = points.size(); + MultiFieldIgnoreErrorsResult ignoreErrorsResult = tsdb.multiFieldPutSync(points, MultiFieldIgnoreErrorsResult.class); + if (ignoreErrorsResult == null) { + LOG.error("Unexpected inner error for insert"); + } else if (ignoreErrorsResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + ignoreErrorsResult.getFailed()); + } + } else { + List points = tsdbConverter.transRecord2Point(writerBuffer); + size = points.size(); + IgnoreErrorsResult ignoreErrorsResult = tsdb.putSync(points, IgnoreErrorsResult.class); + if (ignoreErrorsResult == null) { + LOG.error("Unexpected inner error for insert"); + } else if (ignoreErrorsResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + ignoreErrorsResult.getFailed()); + } + } + } else { + SummaryResult summaryResult; + if (multiField) { + List points = tsdbConverter.transRecord2MultiFieldPoint(writerBuffer, tableName); + size = points.size(); + summaryResult = tsdb.multiFieldPutSync(points, SummaryResult.class); + } else { + List points = tsdbConverter.transRecord2Point(writerBuffer); + size = points.size(); + summaryResult = tsdb.putSync(points, SummaryResult.class); + } + if (summaryResult.getFailed() > 0) { + LOG.error("write TSDB failed num:" + summaryResult.getFailed()); + throw DataXException.asDataXException(TSDBWriterErrorCode.RUNTIME_EXCEPTION, "Write TSDB failed", new Exception()); + } + } + return size; + } + @Override public void post() { } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java index f907fb67..ab4c3894 100755 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/tsdbwriter/TSDBWriterErrorCode.java @@ -13,6 +13,7 @@ import com.alibaba.datax.common.spi.ErrorCode; public enum TSDBWriterErrorCode implements ErrorCode { REQUIRED_VALUE("TSDBWriter-00", "Missing the necessary value"), + ILLEGAL_VALUE("TSDBWriter-01", "Illegal value"), RUNTIME_EXCEPTION("TSDBWriter-01", "Runtime exception"), RETRY_WRITER_EXCEPTION("TSDBWriter-02", "After repeated attempts, the write still fails"); diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java index b81512f7..29b14dab 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/HttpUtils.java @@ -1,11 +1,14 @@ package com.alibaba.datax.plugin.writer.util; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.fluent.Content; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Base64; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -19,43 +22,44 @@ import java.util.concurrent.TimeUnit; */ public final class HttpUtils { - public final static Charset UTF_8 = Charset.forName("UTF-8"); public final static int CONNECT_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); public final static int SOCKET_TIMEOUT_DEFAULT_IN_MILL = (int) TimeUnit.SECONDS.toMillis(60); + private static final String CREDENTIALS_FORMAT = "%s:%s"; + private static final String BASIC_AUTHENTICATION_FORMAT = "Basic %s"; + private HttpUtils() { } - public static String get(String url) throws Exception { - Content content = Request.Get(url) + public static String get(String url, String username, String password) throws Exception { + final Request request = Request.Get(url) .connectTimeout(CONNECT_TIMEOUT_DEFAULT_IN_MILL) - .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL) + .socketTimeout(SOCKET_TIMEOUT_DEFAULT_IN_MILL); + addAuth(request, username, password); + Content content = request .execute() .returnContent(); if (content == null) { return null; } - return content.asString(UTF_8); + return content.asString(StandardCharsets.UTF_8); } - public static String post(String url, Map params) throws Exception { - return post(url, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, Map params) throws Exception { + return post(url, username, password, JSON.toJSONString(params), CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, String params) throws Exception { - return post(url, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); + public static String post(String url, String username, String password, String params) throws Exception { + return post(url, username, password, params, CONNECT_TIMEOUT_DEFAULT_IN_MILL, SOCKET_TIMEOUT_DEFAULT_IN_MILL); } - public static String post(String url, Map params, + public static String post(String url, String username, String password, String params, int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - return post(url, JSON.toJSONString(params), connectTimeoutInMill, socketTimeoutInMill); - } - - public static String post(String url, String params, - int connectTimeoutInMill, int socketTimeoutInMill) throws Exception { - Content content = Request.Post(url) + Request request = Request.Post(url) .connectTimeout(connectTimeoutInMill) - .socketTimeout(socketTimeoutInMill) + .socketTimeout(socketTimeoutInMill); + addAuth(request, username, password); + Content content = request .addHeader("Content-Type", "application/json") .bodyString(params, ContentType.APPLICATION_JSON) .execute() @@ -63,6 +67,22 @@ public final class HttpUtils { if (content == null) { return null; } - return content.asString(UTF_8); + return content.asString(StandardCharsets.UTF_8); + } + + private static void addAuth(Request request, String username, String password) { + String authorization = generateHttpAuthorization(username, password); + if (authorization != null) { + request.setHeader("Authorization", authorization); + } + } + + private static String generateHttpAuthorization(String username, String password) { + if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) { + return null; + } + String credentials = String.format(CREDENTIALS_FORMAT, username, password); + credentials = Base64.getEncoder().encodeToString(credentials.getBytes()); + return String.format(BASIC_AUTHENTICATION_FORMAT, credentials); } } diff --git a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java index ed01d877..d57c5935 100644 --- a/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java +++ b/tsdbwriter/src/main/java/com/alibaba/datax/plugin/writer/util/TSDBUtils.java @@ -2,6 +2,7 @@ package com.alibaba.datax.plugin.writer.util; import com.alibaba.datax.plugin.writer.conn.DataPoint4TSDB; import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,45 +23,56 @@ public final class TSDBUtils { private TSDBUtils() { } - public static String version(String address) { + public static String version(String address, String username, String password) { String url = String.format("%s/api/version", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static String config(String address) { + public static String config(String address, String username, String password) { String url = String.format("%s/api/config", address); String rsp; try { - rsp = HttpUtils.get(url); + rsp = HttpUtils.get(url, username, password); } catch (Exception e) { throw new RuntimeException(e); } return rsp; } - public static boolean put(String address, List dps) { - return put(address, JSON.toJSON(dps)); + public static boolean put(String address, String database, String username, String password, List dps) { + return put(address, database, username, password, JSON.toJSON(dps)); } - public static boolean put(String address, DataPoint4TSDB dp) { - return put(address, JSON.toJSON(dp)); + public static boolean put(String address, String database, String username, String password, DataPoint4TSDB dp) { + return put(address, database, username, password, JSON.toJSON(dp)); } - private static boolean put(String address, Object o) { - return put(address, o.toString()); + private static boolean put(String address, String database, String username, String password, Object o) { + return put(address, database, username, password, o.toString()); } - public static boolean put(String address, String s) { - String url = String.format("%s/api/put", address); + public static boolean put(String address, String database, String username, String password, String s) { + return put(address, database, username, password, s, false); + } + + public static boolean mput(String address, String database, String username, String password, String s) { + return put(address, database, username, password, s, true); + } + + public static boolean put(String address, String database, String username, String password, String s, boolean multiField) { + String url = address + (multiField ? "/api/mput" : "/api/put"); + if (!StringUtils.isBlank(database)) { + url = url.concat("?db=" + database); + } String rsp; try { - rsp = HttpUtils.post(url, s); + rsp = HttpUtils.post(url, username, password, s); // If successful, the returned content should be null. assert rsp == null; } catch (Exception e) { diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java index 455f4ce6..fada706e 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/conn/TSDBConnectionTest.java @@ -19,12 +19,12 @@ public class TSDBConnectionTest { @Test public void testVersion() { - String version = new TSDBConnection(TSDB_ADDRESS).version(); + String version = new TSDBConnection(TSDB_ADDRESS,null,null,null).version(); Assert.assertNotNull(version); } @Test public void testIsSupported() { - Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS).isSupported()); + Assert.assertTrue(new TSDBConnection(TSDB_ADDRESS,null,null,null).isSupported()); } } diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java index 69f26b80..1f8fb870 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/HttpUtilsTest.java @@ -24,7 +24,7 @@ public class HttpUtilsTest { Map params = new HashMap(); params.put("foo", "bar"); - String rsp = HttpUtils.post(url, params); + String rsp = HttpUtils.post(url, null,null,params); System.out.println(rsp); Assert.assertNotNull(rsp); } @@ -32,7 +32,7 @@ public class HttpUtilsTest { @Test public void testGet() throws Exception { String url = String.format("%s/api/version", Const.OPENTSDB_ADDRESS); - String rsp = HttpUtils.get(url); + String rsp = HttpUtils.get(url,null,null); System.out.println(rsp); Assert.assertNotNull(rsp); } diff --git a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java index 7d22bb72..8debf406 100644 --- a/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java +++ b/tsdbwriter/src/test/java/com/alibaba/datax/plugin/writer/util/TSDBTest.java @@ -17,11 +17,11 @@ public class TSDBTest { @Test public void testVersion() { - String version = TSDBUtils.version(Const.TSDB_ADDRESS); + String version = TSDBUtils.version(Const.TSDB_ADDRESS,null,null); Assert.assertNotNull(version); System.out.println(version); - version = TSDBUtils.version(Const.OPENTSDB_ADDRESS); + version = TSDBUtils.version(Const.OPENTSDB_ADDRESS,null,null); Assert.assertNotNull(version); System.out.println(version); } diff --git a/userGuid.md b/userGuid.md index 153c8111..16771a5e 100644 --- a/userGuid.md +++ b/userGuid.md @@ -10,7 +10,7 @@ DataX本身作为数据同步框架,将不同数据源的同步抽象为从源 - Linux - [JDK(1.8以上,推荐1.8) ](http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html) -- [Python(推荐Python2.6.X) ](https://www.python.org/downloads/) +- [Python(2或3都可以) ](https://www.python.org/downloads/) - [Apache Maven 3.x](https://maven.apache.org/download.cgi) (Compile DataX) # Quick Start From 47a9ac564200bdff164e026ff43c7e3c86882b35 Mon Sep 17 00:00:00 2001 From: Trafalgar Date: Sat, 11 Jun 2022 12:37:45 +0800 Subject: [PATCH 184/251] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新README文档,介绍月度迭代机制和datax_v202205迭代内容 --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index ec5de715..dc828128 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,13 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N 请点击:[DataX插件开发宝典](https://github.com/alibaba/DataX/blob/master/dataxPluginDev.md) +# 重要版本更新说明 + +DataX 后续计划月度迭代更新,也欢迎感兴趣的同学提交 Pull requests,月度更新内容会介绍介绍如下。 + +- [datax_v202205](https://github.com/alibaba/DataX/releases/tag/datax_v202205) + - 涉及通道能力更新(MaxCompute、Hologres、OSS、Tdengine等)、安全漏洞更新、通用打包更新等 + # 项目成员 @@ -137,8 +144,11 @@ This software is free to use under the Apache License [Apache license](https://g 8. 对高并发、高稳定可用性、高性能、大数据处理有过实际项目及产品经验者优先考虑; 9. 有大数据产品、云产品、中间件技术解决方案者优先考虑。 ```` + 钉钉用户群: +钉钉群目前暂时受到了一些管控策略影响,建议大家有问题优先在这里提交问题 Issue,DataX研发和社区会定期回答Issue中的问题,知识库丰富后也能帮助到后来的使用者。 + - DataX开源用户交流群 - From ab6cf7352767348cea5cf520575736532b8fd3b5 Mon Sep 17 00:00:00 2001 From: Trafalgar Date: Mon, 13 Jun 2022 16:45:14 +0800 Subject: [PATCH 185/251] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新二进制包datax.tar.gz下载地址,为最新版本构建包地址 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dc828128..299e9a37 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ DataX本身作为数据同步框架,将不同数据源的同步抽象为从源 # Quick Start -##### Download [DataX下载地址](http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz) +##### Download [DataX下载地址](https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/20220530/datax.tar.gz) + ##### 请点击:[Quick Start](https://github.com/alibaba/DataX/blob/master/userGuid.md) From 8c92ce2caa401c1d2d438e1ae41e517f770b612f Mon Sep 17 00:00:00 2001 From: Trafalgar Date: Mon, 13 Jun 2022 20:55:41 +0800 Subject: [PATCH 186/251] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 钉钉群容量受到管控,暂时先隐藏过期分享二维码 --- README.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/README.md b/README.md index 299e9a37..59795e25 100644 --- a/README.md +++ b/README.md @@ -146,25 +146,9 @@ This software is free to use under the Apache License [Apache license](https://g 9. 有大数据产品、云产品、中间件技术解决方案者优先考虑。 ```` -钉钉用户群: +用户咨询支持: 钉钉群目前暂时受到了一些管控策略影响,建议大家有问题优先在这里提交问题 Issue,DataX研发和社区会定期回答Issue中的问题,知识库丰富后也能帮助到后来的使用者。 -- DataX开源用户交流群 - - -- DataX开源用户交流群2 - - - -- DataX开源用户交流群3 - - - -- DataX开源用户交流群4 - - - -- DataX开源用户交流群5 - - - -- DataX开源用户交流群6 - - From beaf7aa620e11ca3577c03fb58bf43f67c8b57d6 Mon Sep 17 00:00:00 2001 From: zyyang Date: Wed, 15 Jun 2022 10:57:10 +0800 Subject: [PATCH 187/251] feat: migrate mongo's data to tdengine without tbname specified #TS-1538 #TS-1539 --- tdenginereader/pom.xml | 14 +-- tdenginewriter/pom.xml | 31 ++--- .../tdenginewriter/DefaultDataHandler.java | 105 ++++++++++++++--- .../writer/tdenginewriter/SchemaManager.java | 42 ++++++- .../DefaultDataHandlerTest.java | 13 +-- .../tdenginewriter/Mongo2TDengineTest.java | 16 +++ .../tdenginewriter/SchemaManagerTest.java | 21 +++- .../resources/incremental_sync/clean_env.sh | 9 ++ .../resources/incremental_sync/csv2t-jni.json | 106 ++++++++++++++++++ .../incremental_sync/csv2t-restful.json | 57 ++++++++++ .../resources/incremental_sync/dm2t-jni.json | 62 ++++++++++ .../incremental_sync/dm2t-restful.json | 62 ++++++++++ .../incremental_sync/dm2t-update.json | 63 +++++++++++ .../resources/incremental_sync/dm2t_sync.sh | 57 ++++++++++ .../resources/incremental_sync/t2dm-jni.json | 50 +++++++++ .../incremental_sync/t2dm-restful.json | 50 +++++++++ .../test/resources/incremental_sync/upload.sh | 13 +++ .../src/test/resources/mongo2t.json | 66 +++++++++++ 18 files changed, 774 insertions(+), 63 deletions(-) create mode 100644 tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mongo2TDengineTest.java create mode 100755 tdenginewriter/src/test/resources/incremental_sync/clean_env.sh create mode 100644 tdenginewriter/src/test/resources/incremental_sync/csv2t-jni.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/csv2t-restful.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/dm2t-jni.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/dm2t-restful.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json create mode 100755 tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh create mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json create mode 100644 tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json create mode 100755 tdenginewriter/src/test/resources/incremental_sync/upload.sh create mode 100644 tdenginewriter/src/test/resources/mongo2t.json diff --git a/tdenginereader/pom.xml b/tdenginereader/pom.xml index 319152f8..075a2789 100644 --- a/tdenginereader/pom.xml +++ b/tdenginereader/pom.xml @@ -29,12 +29,6 @@ - - com.alibaba - fastjson - 1.2.78 - - com.alibaba.datax.tdenginewriter tdenginewriter @@ -45,13 +39,7 @@ com.taosdata.jdbc taos-jdbcdriver - 2.0.37 - - - com.alibaba - fastjson - - + 2.0.39 diff --git a/tdenginewriter/pom.xml b/tdenginewriter/pom.xml index 791a4bdc..a7564e6b 100644 --- a/tdenginewriter/pom.xml +++ b/tdenginewriter/pom.xml @@ -20,22 +20,10 @@ - - com.alibaba - fastjson - 1.2.78 - - com.taosdata.jdbc taos-jdbcdriver - 2.0.37 - - - com.alibaba - fastjson - - + 2.0.39 @@ -74,15 +62,16 @@ 5.1.49 test + - - - - - - - - + + + + + + + + diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 30ba7e23..84adaf72 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -17,19 +17,20 @@ import java.sql.*; import java.util.*; import java.util.Date; import java.util.stream.Collectors; +import java.util.stream.IntStream; public class DefaultDataHandler implements DataHandler { + private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + static { try { Class.forName("com.taosdata.jdbc.TSDBDriver"); Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); } catch (ClassNotFoundException e) { - e.printStackTrace(); + LOG.error(e.getMessage(), e); } } - private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); - private final TaskPluginCollector taskPluginCollector; private String username; private String password; @@ -47,15 +48,15 @@ public class DefaultDataHandler implements DataHandler { this.tableMetas = tableMetas; } - public void setColumnMetas(Map> columnMetas) { - this.columnMetas = columnMetas; + public void setTbnameColumnMetasMap(Map> tbnameColumnMetasMap) { + this.tbnameColumnMetasMap = tbnameColumnMetasMap; } public void setSchemaManager(SchemaManager schemaManager) { this.schemaManager = schemaManager; } - private Map> columnMetas; + private Map> tbnameColumnMetasMap; public DefaultDataHandler(Configuration configuration, TaskPluginCollector taskPluginCollector) { this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); @@ -73,14 +74,13 @@ public class DefaultDataHandler implements DataHandler { int count = 0; int affectedRows = 0; - try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); // prepare table_name -> table_meta this.schemaManager = new SchemaManager(conn); this.tableMetas = schemaManager.loadTableMeta(tables); // prepare table_name -> column_meta - this.columnMetas = schemaManager.loadColumnMetas(tables); + this.tbnameColumnMetasMap = schemaManager.loadColumnMetas(tables); List recordBatch = new ArrayList<>(); Record record; @@ -152,10 +152,12 @@ public class DefaultDataHandler implements DataHandler { TableMeta tableMeta = tableMetas.get(table); switch (tableMeta.tableType) { case SUP_TABLE: { - if (columns.contains("tbname")) + if (columns.contains("tbname")) { affectedRows += writeBatchToSupTableBySQL(conn, table, recordBatch); - else - affectedRows += writeBatchToSupTableBySchemaless(conn, table, recordBatch); + } else { + Map tag2Tbname = schemaManager.loadTagTableNameMap(table); + affectedRows += writeBatchToSupTableWithoutTbname(conn, table, recordBatch, tag2Tbname); + } } break; case SUB_TABLE: @@ -169,13 +171,82 @@ public class DefaultDataHandler implements DataHandler { return affectedRows; } + private int writeBatchToSupTableWithoutTbname(Connection conn, String table, List recordBatch, Map tag2Tbname) throws SQLException { + List columnMetas = tbnameColumnMetasMap.get(table); + List subTableExist = filterSubTableExistRecords(recordBatch, columnMetas, tag2Tbname); + List subTableNotExist = filterSubTableNotExistRecords(recordBatch, columnMetas, tag2Tbname); + + int affectedRows = 0; + Map> subTableRecordsMap = splitRecords(subTableExist, columnMetas, tag2Tbname); + + List subTables = new ArrayList<>(subTableRecordsMap.keySet()); + this.tbnameColumnMetasMap.putAll(schemaManager.loadColumnMetas(subTables)); + + for (String subTable : subTableRecordsMap.keySet()) { + List subTableRecords = subTableRecordsMap.get(subTable); + affectedRows += writeBatchToNormalTable(conn, subTable, subTableRecords); + } + if (!subTableNotExist.isEmpty()) + affectedRows += writeBatchToSupTableBySchemaless(conn, table, subTableNotExist); + return affectedRows; + } + + private List filterSubTableExistRecords(List recordBatch, List columnMetas, Map tag2Tbname) { + return recordBatch.stream().filter(record -> { + String tagStr = getTagString(columnMetas, record); + return tag2Tbname.containsKey(tagStr); + }).collect(Collectors.toList()); + } + + private List filterSubTableNotExistRecords(List recordBatch, List columnMetas, Map tag2Tbname) { + return recordBatch.stream().filter(record -> { + String tagStr = getTagString(columnMetas, record); + return !tag2Tbname.containsKey(tagStr); + }).collect(Collectors.toList()); + } + + private Map> splitRecords(List subTableExist, List columnMetas, Map tag2Tbname) { + Map> ret = new HashMap<>(); + for (Record record : subTableExist) { + String tagstr = getTagString(columnMetas, record); + String tbname = tag2Tbname.get(tagstr); + if (ret.containsKey(tbname)) { + ret.get(tbname).add(record); + } else { + List list = new ArrayList<>(); + list.add(record); + ret.put(tbname, list); + } + } + return ret; + } + + private String getTagString(List columnMetas, Record record) { + return IntStream.range(0, columnMetas.size()).mapToObj(colIndex -> { + ColumnMeta columnMeta = columnMetas.get(colIndex); + if (columnMeta.isTag) { + Column column = record.getColumn(colIndex); + switch (columnMeta.type) { + case "TINYINT": + case "SMALLINT": + case "INT": + case "BIGINT": + return column.asLong().toString(); + default: + return column.asString(); + } + } + return ""; + }).collect(Collectors.joining()); + } + /** * insert into record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) */ private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws SQLException { - List columnMetas = this.columnMetas.get(table); + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder("insert into"); for (Record record : recordBatch) { @@ -257,7 +328,7 @@ public class DefaultDataHandler implements DataHandler { int count = 0; TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); - List columnMetaList = this.columnMetas.get(table); + List columnMetaList = this.tbnameColumnMetasMap.get(table); ColumnMeta ts = columnMetaList.stream().filter(colMeta -> colMeta.isPrimaryKey).findFirst().get(); List lines = new ArrayList<>(); @@ -394,7 +465,7 @@ public class DefaultDataHandler implements DataHandler { * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) */ private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws SQLException { - List columnMetas = this.columnMetas.get(table); + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(table).append(" ") @@ -464,18 +535,18 @@ public class DefaultDataHandler implements DataHandler { * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) */ private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws SQLException { - List columnMetas = this.columnMetas.get(table); + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(table) .append(" ") - .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + .append(columnMetas.stream().filter(colMeta -> !colMeta.isTag).filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { return colMeta.field; }).collect(Collectors.joining(",", "(", ")"))) .append(" values "); for (Record record : recordBatch) { - sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + sb.append(columnMetas.stream().filter(colMeta -> !colMeta.isTag).filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { return buildColumnValue(colMeta, record); }).collect(Collectors.joining(",", "(", ")"))); } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index c48b7942..fc0c002d 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -5,17 +5,18 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; import java.util.*; +import java.util.stream.Collectors; public class SchemaManager { private static final Logger LOG = LoggerFactory.getLogger(SchemaManager.class); +// private static final String TAG_TABLE_NAME_MAP_KEY_SPLITTER = "_"; + private static final String TAG_TABLE_NAME_MAP_KEY_SPLITTER = ""; private final Connection conn; private TimestampPrecision precision; + private Map> tags2tbnameMaps = new HashMap<>(); public SchemaManager(Connection conn) { this.conn = conn; @@ -169,4 +170,37 @@ public class SchemaManager { return columnMeta; } + public Map loadTagTableNameMap(String table) throws SQLException { + if (tags2tbnameMaps.containsKey(table)) + return tags2tbnameMaps.get(table); + Map tags2tbname = new HashMap<>(); + try (Statement stmt = conn.createStatement()) { + // describe table + List tags = new ArrayList<>(); + ResultSet rs = stmt.executeQuery("describe " + table); + while (rs.next()) { + String note = rs.getString("Note"); + if ("TAG".equals(note)) { + tags.add(rs.getString("Field")); + } + } + // select distinct tbname, t1, t2 from stb + rs = stmt.executeQuery("select distinct " + String.join(",", tags) + ",tbname from " + table); + while (rs.next()) { + ResultSet finalRs = rs; + String tagStr = tags.stream().map(t -> { + try { + return finalRs.getString(t); + } catch (SQLException e) { + LOG.error(e.getMessage(), e); + } + return "NULL"; + }).collect(Collectors.joining(TAG_TABLE_NAME_MAP_KEY_SPLITTER)); + String tbname = rs.getString("tbname"); + tags2tbname.put(tagStr, tbname); + } + } + tags2tbnameMaps.put(table, tags2tbname); + return tags2tbname; + } } diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index 8840aa28..46e601ad 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -5,7 +5,6 @@ import com.alibaba.datax.common.element.LongColumn; import com.alibaba.datax.common.element.Record; import com.alibaba.datax.common.element.StringColumn; import com.alibaba.datax.common.plugin.TaskPluginCollector; -import com.alibaba.datax.common.spi.Writer; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.core.transport.record.DefaultRecord; import org.junit.AfterClass; @@ -60,7 +59,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -98,7 +97,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -138,7 +137,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(connection, recordList); @@ -177,7 +176,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -216,7 +215,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); @@ -255,7 +254,7 @@ public class DefaultDataHandlerTest { Map tableMetas = schemaManager.loadTableMeta(tables); Map> columnMetas = schemaManager.loadColumnMetas(tables); handler.setTableMetas(tableMetas); - handler.setColumnMetas(columnMetas); + handler.setTbnameColumnMetasMap(columnMetas); handler.setSchemaManager(schemaManager); int count = handler.writeBatch(conn, recordList); diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mongo2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mongo2TDengineTest.java new file mode 100644 index 00000000..2356b6f8 --- /dev/null +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mongo2TDengineTest.java @@ -0,0 +1,16 @@ +package com.alibaba.datax.plugin.writer.tdenginewriter; + +import com.alibaba.datax.core.Engine; +import org.junit.Test; + +public class Mongo2TDengineTest { + + @Test + public void case01() throws Throwable { + + // when + String[] params = {"-mode", "standalone", "-jobid", "-1", "-job", "src/test/resources/mongo2t.json"}; + System.setProperty("datax.home", "../target/datax/datax"); + Engine.entry(params); + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java index 6df0de1d..3708e6f9 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java @@ -1,6 +1,5 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; -import com.alibaba.fastjson.util.TypeUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -62,6 +61,23 @@ public class SchemaManagerTest { Assert.assertEquals(4, stb1.size()); } + @Test + public void loadTagTableNameMap() throws SQLException { + // given + SchemaManager schemaManager = new SchemaManager(conn); + String table = "stb3"; + + // when + Map tagTableMap = schemaManager.loadTagTableNameMap(table); + + // then + Assert.assertEquals(2, tagTableMap.keySet().size()); + Assert.assertTrue(tagTableMap.containsKey("11.1abc")); + Assert.assertTrue(tagTableMap.containsKey("22.2defg")); + Assert.assertEquals("tb5", tagTableMap.get("11.1abc")); + Assert.assertEquals("tb6", tagTableMap.get("22.2defg")); + } + @BeforeClass public static void beforeClass() throws SQLException { conn = DriverManager.getConnection("jdbc:TAOS-RS://192.168.56.105:6041", "root", "taosdata"); @@ -76,6 +92,9 @@ public class SchemaManagerTest { stmt.execute("insert into tb3 using stb2 tags(1,1) values(now, 1, 2, 3)"); stmt.execute("insert into tb4 using stb2 tags(2,2) values(now, 1, 2, 3)"); stmt.execute("create table weather(ts timestamp, f1 int, f2 int, f3 int, t1 int, t2 int)"); + stmt.execute("create table stb3(ts timestamp, f1 int) tags(t1 int, t2 float, t3 nchar(32))"); + stmt.execute("insert into tb5 using stb3 tags(1,1.1,'abc') values(now, 1)"); + stmt.execute("insert into tb6 using stb3 tags(2,2.2,'defg') values(now, 2)"); } } diff --git a/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh b/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh new file mode 100755 index 00000000..f3dca7c1 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/clean_env.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +datax_home_dir=$(dirname $(readlink -f "$0")) + +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'drop table if exists db2.stb2;' 192.168.1.93:6041/rest/sql +curl -H 'Authorization: Basic cm9vdDp0YW9zZGF0YQ==' -d 'create table if not exists db2.stb2 (`ts` TIMESTAMP,`f2` SMALLINT,`f4` BIGINT,`f5` FLOAT,`f6` DOUBLE,`f7` DOUBLE,`f8` BOOL,`f9` NCHAR(100),`f10` NCHAR(200)) TAGS (`f1` TINYINT,`f3` INT);' 192.168.1.93:6041/rest/sql + +rm -f ${datax_home_dir}/log/* +rm -f ${datax_home_dir}/job/*.csv \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/csv2t-jni.json b/tdenginewriter/src/test/resources/incremental_sync/csv2t-jni.json new file mode 100644 index 00000000..625c3801 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/csv2t-jni.json @@ -0,0 +1,106 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "txtfilereader", + "parameter": { + "path": [ + "/root/workspace/tmp/a.txt" + ], + "encoding": "UTF-8", + "column": [ + { + "index": 0, + "type": "date", + "format": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "index": 1, + "type": "long" + }, + { + "index": 2, + "type": "long" + }, + { + "index": 3, + "type": "long" + }, + { + "index": 4, + "type": "long" + }, + { + "index": 5, + "type": "double" + }, + { + "index": 6, + "type": "double" + }, + { + "index": 7, + "type": "boolean" + }, + { + "index": 8, + "type": "string" + }, + { + "index": 9, + "type": "string" + }, + { + "index": 10, + "type": "date", + "format": "yyyy-MM-dd HH:mm:ss.SSS" + }, + { + "index": 11, + "type": "string" + } + ], + "fieldDelimiter": "," + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "tbname" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/csv2t-restful.json b/tdenginewriter/src/test/resources/incremental_sync/csv2t-restful.json new file mode 100644 index 00000000..d852e2e2 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/csv2t-restful.json @@ -0,0 +1,57 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "txtfilereader", + "parameter": { + "path": [ + "/root/workspace/tmp/a.txt" + ], + "encoding": "UTF-8", + "column": [ + "*" + ], + "fieldDelimiter": "," + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "t1", + "tbname" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t-jni.json b/tdenginewriter/src/test/resources/incremental_sync/dm2t-jni.json new file mode 100644 index 00000000..3e86bb8d --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t-jni.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS://192.168.1.93:6030/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t-restful.json b/tdenginewriter/src/test/resources/incremental_sync/dm2t-restful.json new file mode 100644 index 00000000..183786bf --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t-restful.json @@ -0,0 +1,62 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1;" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json b/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json new file mode 100644 index 00000000..d9285b23 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t-update.json @@ -0,0 +1,63 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "rdbmsreader", + "parameter": { + "username": "TESTUSER", + "password": "test123456", + "connection": [ + { + "querySql": [ + "select concat(concat(concat('t', f1), '_'),f3) as tbname,* from stb1" + ], + "jdbcUrl": [ + "jdbc:dm://192.168.0.72:5236" + ] + } + ], + "where": "1=1", + "fetchSize": 1024 + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "tbname", + "ts", + "f1", + "f2", + "f3", + "f4", + "f5", + "f6", + "f7", + "f8", + "f9", + "f10" + ], + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.93:6041/db2" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh b/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh new file mode 100755 index 00000000..426c6233 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/dm2t_sync.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -e +#set -x + +datax_home_dir=$(dirname $(readlink -f "$0")) +table_name="stb1" +update_key="ts" + +while getopts "hd:t:" arg; do + case $arg in + d) + datax_home_dir=$(echo $OPTARG) + ;; + v) + table_name=$(echo $OPTARG) + ;; + h) + echo "Usage: $(basename $0) -d [datax_home_dir] -t [table_name] -k [update_key]" + echo " -h help" + exit 0 + ;; + ?) #unknow option + echo "unkonw argument" + exit 1 + ;; + esac +done + +if [[ -e ${datax_home_dir}/job/${table_name}.csv ]]; then + MAX_TIME=$(cat ${datax_home_dir}/job/${table_name}.csv) +else + MAX_TIME="null" +fi +current_datetime=$(date +"%Y-%m-%d %H:%M:%S") +current_timestamp=$(date +%s) + +if [ "$MAX_TIME" != "null" ]; then + WHERE="${update_key} >= '$MAX_TIME' and ${update_key} < '$current_datetime'" + sed "s/1=1/$WHERE/g" ${datax_home_dir}/job/dm2t-update.json >${datax_home_dir}/job/dm2t_${current_timestamp}.json + echo "incremental data synchronization, from '${MAX_TIME}' to '${current_datetime}'" + python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t_${current_timestamp}.json 1> /dev/null 2>&1 +else + echo "full data synchronization, to '${current_datetime}'" + python ${datax_home_dir}/bin/datax.py ${datax_home_dir}/job/dm2t-update.json 1> /dev/null 2>&1 +fi + +if [[ $? -ne 0 ]]; then + echo "datax migration job falied" +else + echo ${current_datetime} >$datax_home_dir/job/${table_name}.csv + echo "datax migration job success" +fi + +rm -rf ${datax_home_dir}/job/dm2t_${current_timestamp}.json + +#while true; do ./dm2t_sync.sh; sleep 5s; done \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json new file mode 100644 index 00000000..341f6293 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/t2dm-jni.json @@ -0,0 +1,50 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS://192.168.56.105:6030/db1" + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json b/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json new file mode 100644 index 00000000..b2cf91e2 --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/t2dm-restful.json @@ -0,0 +1,50 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "tdenginereader", + "parameter": { + "username": "root", + "password": "taosdata", + "column": [ + "*" + ], + "connection": [ + { + "table": [ + "stb1" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.56.105:6041/db1" + } + ] + } + }, + "writer": { + "name": "rdbmswriter", + "parameter": { + "connection": [ + { + "table": [ + "stb2" + ], + "jdbcUrl": "jdbc:dm://192.168.0.72:5236" + } + ], + "username": "TESTUSER", + "password": "test123456", + "table": "stb2", + "column": [ + "*" + ] + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/incremental_sync/upload.sh b/tdenginewriter/src/test/resources/incremental_sync/upload.sh new file mode 100755 index 00000000..388d275b --- /dev/null +++ b/tdenginewriter/src/test/resources/incremental_sync/upload.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +scp t2dm-restful.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp t2dm-jni.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp dm2t-restful.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp dm2t-jni.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp dm2t-update.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp csv2t-restful.json root@192.168.56.105:/root/workspace/tmp/datax/job +scp csv2t-jni.json root@192.168.56.105:/root/workspace/tmp/datax/job + + +scp dm2t_sync.sh root@192.168.56.105:/root/workspace/tmp/datax +scp clean_env.sh root@192.168.56.105:/root/workspace/tmp/datax \ No newline at end of file diff --git a/tdenginewriter/src/test/resources/mongo2t.json b/tdenginewriter/src/test/resources/mongo2t.json new file mode 100644 index 00000000..902e6f7c --- /dev/null +++ b/tdenginewriter/src/test/resources/mongo2t.json @@ -0,0 +1,66 @@ +{ + "job": { + "content": [ + { + "reader": { + "name": "mongodbreader", + "parameter": { + "address": [ + "192.168.1.213:27017" + ], + "userName": "", + "userPassword": "", + "dbName": "testdb", + "collectionName": "monitor_data", + "column": [ + { + "name": "ct", + "type": "date" + }, + { + "name": "pv", + "type": "float" + }, + { + "name": "tv", + "type": "float" + }, + { + "name": "pid", + "type": "float" + } + ] + } + }, + "writer": { + "name": "tdenginewriter", + "parameter": { + "username": "root", + "password": "hmdata", + "column": [ + "ts", + "pressure", + "temperature", + "position_id" + ], + "connection": [ + { + "table": [ + "pipeline_data" + ], + "jdbcUrl": "jdbc:TAOS-RS://192.168.1.213:6041/mongo3040" + } + ], + "batchSize": 1000, + "ignoreTagsUnmatched": true + } + } + } + ], + "setting": { + "speed": { + "channel": 1 + } + } + } +} \ No newline at end of file From 2de4e5513798c37b6ea0c1e05fba5aa6fc28e5a8 Mon Sep 17 00:00:00 2001 From: zyyang Date: Thu, 16 Jun 2022 13:06:23 +0800 Subject: [PATCH 188/251] handle null data --- .../datax/plugin/writer/tdenginewriter/DefaultDataHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 84adaf72..27ade382 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -307,6 +307,8 @@ public class DefaultDataHandler implements DataHandler { if (colMeta.type.equals("TIMESTAMP")) return "\"" + column.asString() + "\""; String value = column.asString(); + if (value == null) + return "NULL"; return "\'" + Utils.escapeSingleQuota(value) + "\'"; case NULL: case BAD: From a66a1b5df85019c57e3aaf33bbe4baf1bbb016e1 Mon Sep 17 00:00:00 2001 From: cuishuang Date: Sat, 18 Jun 2022 13:18:53 +0800 Subject: [PATCH 189/251] fix some typos Signed-off-by: cuishuang --- .../alibaba/datax/plugin/writer/adswriter/odps/DataType.java | 2 +- .../datax/core/transport/transformer/FilterTransformer.java | 2 +- .../reader/hbase20xsqlreader/HBase20SQLReaderHelper.java | 4 ++-- .../alibaba/datax/plugin/reader/otsreader/utils/Common.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/adswriter/src/main/java/com/alibaba/datax/plugin/writer/adswriter/odps/DataType.java b/adswriter/src/main/java/com/alibaba/datax/plugin/writer/adswriter/odps/DataType.java index 595b1dfd..f625336e 100644 --- a/adswriter/src/main/java/com/alibaba/datax/plugin/writer/adswriter/odps/DataType.java +++ b/adswriter/src/main/java/com/alibaba/datax/plugin/writer/adswriter/odps/DataType.java @@ -70,7 +70,7 @@ public class DataType { } else if ("datetime".equals(type)) { return DATETIME; } else { - throw new IllegalArgumentException("unkown type: " + type); + throw new IllegalArgumentException("unknown type: " + type); } } diff --git a/core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java b/core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java index 8f6492fa..a3251715 100644 --- a/core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java +++ b/core/src/main/java/com/alibaba/datax/core/transport/transformer/FilterTransformer.java @@ -61,7 +61,7 @@ public class FilterTransformer extends Transformer { } else if (code.equalsIgnoreCase("<=")) { return doLess(record, value, column, true); } else { - throw new RuntimeException("dx_filter can't suport code:" + code); + throw new RuntimeException("dx_filter can't support code:" + code); } } catch (Exception e) { throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_RUN_EXCEPTION, e.getMessage(), e); diff --git a/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java index 0edc993f..11bbf734 100644 --- a/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java +++ b/hbase20xsqlreader/src/main/java/com/alibaba/datax/plugin/reader/hbase20xsqlreader/HBase20SQLReaderHelper.java @@ -175,7 +175,7 @@ public class HBase20SQLReaderHelper { if (querySql == null || querySql.isEmpty()) { // 如果splitPoints为空,则根据splitKey自动切分,不过这种切分方式无法保证数据均分,且只支持整形和字符型列 if (splitPoints == null || splitPoints.isEmpty()) { - LOG.info("Split accoring min and max value of splitColumn..."); + LOG.info("Split according min and max value of splitColumn..."); Pair minMaxPK = getPkRange(configuration); if (null == minMaxPK) { throw DataXException.asDataXException(HBase20xSQLReaderErrorCode.ILLEGAL_SPLIT_PK, @@ -208,7 +208,7 @@ public class HBase20SQLReaderHelper { } } else { - LOG.info("Split accoring splitPoints..."); + LOG.info("Split according splitPoints..."); // 根据指定splitPoints进行切分 rangeList = buildSplitRange(); } diff --git a/otsreader/src/main/java/com/alibaba/datax/plugin/reader/otsreader/utils/Common.java b/otsreader/src/main/java/com/alibaba/datax/plugin/reader/otsreader/utils/Common.java index 7bb3f52e..fb8c7feb 100644 --- a/otsreader/src/main/java/com/alibaba/datax/plugin/reader/otsreader/utils/Common.java +++ b/otsreader/src/main/java/com/alibaba/datax/plugin/reader/otsreader/utils/Common.java @@ -119,7 +119,7 @@ public class Common { case BOOLEAN: line.addColumn(new BoolColumn(v.asBoolean())); break; case BINARY: line.addColumn(new BytesColumn(v.asBinary())); break; default: - throw new IllegalArgumentException("Unsuporrt tranform the type: " + col.getValue().getType() + "."); + throw new IllegalArgumentException("Unsupported transform the type: " + col.getValue().getType() + "."); } } } From 2151860a079acb40846f9bb0080e4a9d8d99f648 Mon Sep 17 00:00:00 2001 From: Trafalgar Date: Mon, 20 Jun 2022 15:15:03 +0800 Subject: [PATCH 190/251] add new datax logo --- images/datax.logo.png | Bin 0 -> 103929 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/datax.logo.png diff --git a/images/datax.logo.png b/images/datax.logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b20350e85f2e81c33bce3130bb1dfc672805dc GIT binary patch literal 103929 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
sGI>$G*W7S>(gr50< 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 BEG_^5 literal 0 HcmV?d00001 From bef624414ab6f20d4b18290b040b446b2579019f Mon Sep 17 00:00:00 2001 From: zyyang Date: Tue, 28 Jun 2022 15:43:53 +0800 Subject: [PATCH 191/251] merge taosdata/master --- .../datax/plugin/reader/TDengineReader.java | 3 +- .../writer/tdenginewriter/Constants.java | 4 +- .../tdenginewriter/DefaultDataHandler.java | 165 ++++++------------ .../writer/tdenginewriter/SchemaManager.java | 10 +- .../TDengineWriterErrorCode.java | 8 +- .../tdenginewriter/DM2TDengineTest.java | 2 - .../DefaultDataHandlerTest.java | 18 +- .../tdenginewriter/Mysql2TDengineTest.java | 2 - .../tdenginewriter/Opentsdb2TDengineTest.java | 2 - .../tdenginewriter/SchemaManagerTest.java | 6 +- .../tdenginewriter/Stream2TDengineTest.java | 3 +- .../tdenginewriter/TDengine2TDengineTest.java | 2 - 12 files changed, 79 insertions(+), 146 deletions(-) diff --git a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java index 37977794..4ec42d9e 100644 --- a/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java +++ b/tdenginereader/src/main/java/com/alibaba/datax/plugin/reader/TDengineReader.java @@ -93,7 +93,7 @@ public class TDengineReader extends Reader { } if (start >= end) throw DataXException.asDataXException(TDengineReaderErrorCode.ILLEGAL_VALUE, - "The parameter " + Key.BEGIN_DATETIME + ": " + beginDatetime + " should be less than the parameter " + Key.END_DATETIME + ": " + endDatetime + "."); + "The parameter [" + Key.BEGIN_DATETIME + "] should be less than the parameter [" + Key.END_DATETIME + "]."); } @@ -119,6 +119,7 @@ public class TDengineReader extends Reader { } } + LOG.info("Configuration: {}", configurations); return configurations; } } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java index e0445219..d62c8f32 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/Constants.java @@ -1,6 +1,8 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; public class Constants { - public static final int DEFAULT_BATCH_SIZE = 1000; + public static final String DEFAULT_USERNAME = "root"; + public static final String DEFAULT_PASSWORD = "taosdata"; + public static final int DEFAULT_BATCH_SIZE = 1; public static final boolean DEFAULT_IGNORE_TAGS_UNMATCHED = false; } \ No newline at end of file diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java index 8eb7466a..27ade382 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandler.java @@ -22,6 +22,15 @@ import java.util.stream.IntStream; public class DefaultDataHandler implements DataHandler { private static final Logger LOG = LoggerFactory.getLogger(DefaultDataHandler.class); + static { + try { + Class.forName("com.taosdata.jdbc.TSDBDriver"); + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + } catch (ClassNotFoundException e) { + LOG.error(e.getMessage(), e); + } + } + private final TaskPluginCollector taskPluginCollector; private String username; private String password; @@ -49,17 +58,9 @@ public class DefaultDataHandler implements DataHandler { private Map> tbnameColumnMetasMap; - static { - try { - Class.forName("com.taosdata.jdbc.TSDBDriver"); - Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); - } catch (ClassNotFoundException ignored) { - } - } - public DefaultDataHandler(Configuration configuration, TaskPluginCollector taskPluginCollector) { - this.username = configuration.getString(Key.USERNAME); - this.password = configuration.getString(Key.PASSWORD); + this.username = configuration.getString(Key.USERNAME, Constants.DEFAULT_USERNAME); + this.password = configuration.getString(Key.PASSWORD, Constants.DEFAULT_PASSWORD); this.jdbcUrl = configuration.getString(Key.JDBC_URL); this.batchSize = configuration.getInt(Key.BATCH_SIZE, Constants.DEFAULT_BATCH_SIZE); this.tables = configuration.getList(Key.TABLE, String.class); @@ -75,13 +76,11 @@ public class DefaultDataHandler implements DataHandler { try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) { LOG.info("connection[ jdbcUrl: " + jdbcUrl + ", username: " + username + "] established."); - if (schemaManager == null) { - // prepare table_name -> table_meta - this.schemaManager = new SchemaManager(conn); - this.tableMetas = schemaManager.loadTableMeta(tables); - // prepare table_name -> column_meta - this.columnMetas = schemaManager.loadColumnMetas(tables); - } + // prepare table_name -> table_meta + this.schemaManager = new SchemaManager(conn); + this.tableMetas = schemaManager.loadTableMeta(tables); + // prepare table_name -> column_meta + this.tbnameColumnMetasMap = schemaManager.loadColumnMetas(tables); List recordBatch = new ArrayList<>(); Record record; @@ -92,7 +91,7 @@ public class DefaultDataHandler implements DataHandler { try { recordBatch.add(record); affectedRows += writeBatch(conn, recordBatch); - } catch (Exception e) { + } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); affectedRows += writeEachRow(conn, recordBatch); } @@ -104,7 +103,7 @@ public class DefaultDataHandler implements DataHandler { if (!recordBatch.isEmpty()) { try { affectedRows += writeBatch(conn, recordBatch); - } catch (Exception e) { + } catch (SQLException e) { LOG.warn("use one row insert. because:" + e.getMessage()); affectedRows += writeEachRow(conn, recordBatch); } @@ -128,8 +127,8 @@ public class DefaultDataHandler implements DataHandler { recordList.add(record); try { affectedRows += writeBatch(conn, recordList); - } catch (Exception e) { - LOG.error(e.getMessage(), e); + } catch (SQLException e) { + LOG.error(e.getMessage()); this.taskPluginCollector.collectDirtyRecord(record, e); } } @@ -147,7 +146,7 @@ public class DefaultDataHandler implements DataHandler { * 3. 对于tb,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, t1] => insert into tb(ts, f1, f2) values(ts, f1, f2) * 4. 对于t,拼sql,例如:data: [ts, f1, f2, f3, t1, t2] tbColumn: [ts, f1, f2, f3, t1, t2] insert into t(ts, f1, f2, f3, t1, t2) values(ts, f1, f2, f3, t1, t2) */ - public int writeBatch(Connection conn, List recordBatch) throws Exception { + public int writeBatch(Connection conn, List recordBatch) throws SQLException { int affectedRows = 0; for (String table : tables) { TableMeta tableMeta = tableMetas.get(table); @@ -246,62 +245,31 @@ public class DefaultDataHandler implements DataHandler { * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) * record[idx(tbname)] using table tags(record[idx(t1)]) (ts, f1, f2, f3) values(record[idx(ts)], record[idx(f1)], ) */ - private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws Exception { - List columnMetas = this.columnMetas.get(table); + private int writeBatchToSupTableBySQL(Connection conn, String table, List recordBatch) throws SQLException { + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder("insert into"); for (Record record : recordBatch) { sb.append(" ").append(record.getColumn(indexOf("tbname")).asString()) .append(" using ").append(table) - .append(" tags"); -// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { -// return colMeta.isTag; -// }).map(colMeta -> { -// return buildColumnValue(colMeta, record); -// }).collect(Collectors.joining(",", "(", ")"))); - sb.append("("); - for (int i = 0; i < columns.size(); i++) { - ColumnMeta colMeta = columnMetas.get(i); - if (!columns.contains(colMeta.field)) - continue; - if (!colMeta.isTag) - continue; - String tagValue = buildColumnValue(colMeta, record); - if (i == 0) { - sb.append(tagValue); - } else { - sb.append(",").append(tagValue); - } - } - sb.append(")"); - - sb.append(" ").append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + .append(" tags") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))) + .append(" ") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { return !colMeta.isTag; }).map(colMeta -> { return colMeta.field; }).collect(Collectors.joining(",", "(", ")"))) - .append(" values"); - -// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { -// return !colMeta.isTag; -// }).map(colMeta -> { -// return buildColumnValue(colMeta, record); -// }).collect(Collectors.joining(",", "(", ")"))); - sb.append("("); - for (int i = 0; i < columnMetas.size(); i++) { - ColumnMeta colMeta = columnMetas.get(i); - if (!columns.contains(colMeta.field)) - continue; - if (colMeta.isTag) - continue; - String colValue = buildColumnValue(colMeta, record); - if (i == 0) { - sb.append(colValue); - } else { - sb.append(",").append(colValue); - } - } - sb.append(")"); + .append(" values") + .append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))); } String sql = sb.toString(); @@ -317,11 +285,10 @@ public class DefaultDataHandler implements DataHandler { return count; } - private String buildColumnValue(ColumnMeta colMeta, Record record) throws Exception { + private String buildColumnValue(ColumnMeta colMeta, Record record) { Column column = record.getColumn(indexOf(colMeta.field)); TimestampPrecision timestampPrecision = schemaManager.loadDatabasePrecision(); - Column.Type type = column.getType(); - switch (type) { + switch (column.getType()) { case DATE: { Date value = column.asDate(); switch (timestampPrecision) { @@ -350,9 +317,8 @@ public class DefaultDataHandler implements DataHandler { case DOUBLE: case INT: case LONG: - column.asString(); default: - throw new Exception("invalid column type: " + type); + return column.asString(); } } @@ -500,8 +466,8 @@ public class DefaultDataHandler implements DataHandler { * else * insert into tb1 (ts, f1, f2) values( record[idx(ts)], record[idx(f1)], record[idx(f2)]) */ - private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws Exception { - List columnMetas = this.columnMetas.get(table); + private int writeBatchToSubTable(Connection conn, String table, List recordBatch) throws SQLException { + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(table).append(" ") @@ -527,25 +493,11 @@ public class DefaultDataHandler implements DataHandler { if (ignoreTagsUnmatched && !tagsAllMatch) continue; -// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { -// return !colMeta.isTag; -// }).map(colMeta -> { -// return buildColumnValue(colMeta, record); -// }).collect(Collectors.joining(", ", "(", ") "))); - sb.append("("); - for (int i = 0; i < columnMetas.size(); i++) { - ColumnMeta colMeta = columnMetas.get(i); - if (colMeta.isTag) - continue; - String colValue = buildColumnValue(colMeta, record); - if (i == 0) { - sb.append(colValue); - } else { - sb.append(",").append(colValue); - } - } - sb.append(")"); - + sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).filter(colMeta -> { + return !colMeta.isTag; + }).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(", ", "(", ") "))); validRecords++; } @@ -584,8 +536,8 @@ public class DefaultDataHandler implements DataHandler { * table: ["weather"], column: ["ts, f1, f2, f3, t1, t2"] * sql: insert into weather (ts, f1, f2, f3, t1, t2) values( record[idx(ts), record[idx(f1)], ...) */ - private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws Exception { - List columnMetas = this.columnMetas.get(table); + private int writeBatchToNormalTable(Connection conn, String table, List recordBatch) throws SQLException { + List columnMetas = this.tbnameColumnMetasMap.get(table); StringBuilder sb = new StringBuilder(); sb.append("insert into ").append(table) @@ -596,22 +548,9 @@ public class DefaultDataHandler implements DataHandler { .append(" values "); for (Record record : recordBatch) { -// sb.append(columnMetas.stream().filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { -// return buildColumnValue(colMeta, record); -// }).collect(Collectors.joining(",", "(", ")"))); - sb.append("("); - for (int i = 0; i < columnMetas.size(); i++) { - ColumnMeta colMeta = columnMetas.get(i); - if (!columns.contains(colMeta.field)) - continue; - String colValue = buildColumnValue(colMeta, record); - if (i == 0) { - sb.append(colValue); - } else { - sb.append(",").append(colValue); - } - } - sb.append(")"); + sb.append(columnMetas.stream().filter(colMeta -> !colMeta.isTag).filter(colMeta -> columns.contains(colMeta.field)).map(colMeta -> { + return buildColumnValue(colMeta, record); + }).collect(Collectors.joining(",", "(", ")"))); } String sql = sb.toString(); diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java index 2e773540..fc0c002d 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManager.java @@ -124,14 +124,12 @@ public class SchemaManager { } } } catch (SQLException e) { - LOG.error(e.getMessage(), e); + e.printStackTrace(); } colMeta.value = value; }); - LOG.debug("load column metadata of " + table + ": " + - columnMetaList.stream().map(ColumnMeta::toString).collect(Collectors.joining(",", "[", "]")) - ); + LOG.debug("load column metadata of " + table + ": " + Arrays.toString(columnMetaList.toArray())); ret.put(table, columnMetaList); } return ret; @@ -145,9 +143,7 @@ public class SchemaManager { tableMeta.tags = rs.getInt("tags"); tableMeta.tables = rs.getInt("tables"); - if (LOG.isDebugEnabled()){ - LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); - } + LOG.debug("load table metadata of " + tableMeta.tbname + ": " + tableMeta); return tableMeta; } diff --git a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java index e1f2bc29..469449e6 100644 --- a/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java +++ b/tdenginewriter/src/main/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengineWriterErrorCode.java @@ -4,10 +4,10 @@ import com.alibaba.datax.common.spi.ErrorCode; public enum TDengineWriterErrorCode implements ErrorCode { - REQUIRED_VALUE("TDengineWriter-00", "parameter value is missing"), - ILLEGAL_VALUE("TDengineWriter-01", "invalid parameter value"), - RUNTIME_EXCEPTION("TDengineWriter-02", "runtime exception"), - TYPE_ERROR("TDengineWriter-03", "data type mapping error"); + REQUIRED_VALUE("TDengineWriter-00", "缺失必要的值"), + ILLEGAL_VALUE("TDengineWriter-01", "值非法"), + RUNTIME_EXCEPTION("TDengineWriter-02", "运行时异常"), + TYPE_ERROR("TDengineWriter-03", "Datax类型无法正确映射到TDengine类型"); private final String code; private final String description; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java index b6932f60..15f6b1bc 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DM2TDengineTest.java @@ -2,7 +2,6 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.sql.*; @@ -10,7 +9,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; -@Ignore public class DM2TDengineTest { private String host1 = "192.168.0.72"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java index ad5537ba..46e601ad 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/DefaultDataHandlerTest.java @@ -7,7 +7,10 @@ import com.alibaba.datax.common.element.StringColumn; import com.alibaba.datax.common.plugin.TaskPluginCollector; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.core.transport.record.DefaultRecord; -import org.junit.*; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; @@ -18,7 +21,6 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; -@Ignore public class DefaultDataHandlerTest { private static final String host = "192.168.1.93"; @@ -27,7 +29,7 @@ public class DefaultDataHandlerTest { private final TaskPluginCollector taskPluginCollector = new TDengineWriter.Task().getTaskPluginCollector(); @Test - public void writeSupTableBySQL() throws Exception { + public void writeSupTableBySQL() throws SQLException { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -67,7 +69,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSupTableBySQL_2() throws Exception { + public void writeSupTableBySQL_2() throws SQLException { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -105,7 +107,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSupTableBySchemaless() throws Exception { + public void writeSupTableBySchemaless() throws SQLException { // given createSupTable(); Configuration configuration = Configuration.from("{" + @@ -145,7 +147,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithTableName() throws Exception { + public void writeSubTableWithTableName() throws SQLException { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -184,7 +186,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeSubTableWithoutTableName() throws Exception { + public void writeSubTableWithoutTableName() throws SQLException { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + @@ -223,7 +225,7 @@ public class DefaultDataHandlerTest { } @Test - public void writeNormalTable() throws Exception { + public void writeNormalTable() throws SQLException { // given createSupAndSubTable(); Configuration configuration = Configuration.from("{" + diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java index 8cbc2d90..4a662711 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Mysql2TDengineTest.java @@ -2,14 +2,12 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Random; -@Ignore public class Mysql2TDengineTest { private static final String host1 = "192.168.56.105"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java index 0d212e8a..ad326f7e 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Opentsdb2TDengineTest.java @@ -2,12 +2,10 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; import java.sql.*; -@Ignore public class Opentsdb2TDengineTest { @Test diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java index 51d17d7b..3708e6f9 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/SchemaManagerTest.java @@ -1,6 +1,9 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; -import org.junit.*; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; @@ -10,7 +13,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -@Ignore public class SchemaManagerTest { private static Connection conn; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java index 613d2aa9..e54bcbde 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/Stream2TDengineTest.java @@ -1,7 +1,7 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; -import org.junit.Ignore; +import org.junit.Before; import org.junit.Test; import java.sql.Connection; @@ -9,7 +9,6 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; -@Ignore public class Stream2TDengineTest { private String host2 = "192.168.56.105"; diff --git a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java index 18efdc14..9e954633 100644 --- a/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java +++ b/tdenginewriter/src/test/java/com/alibaba/datax/plugin/writer/tdenginewriter/TDengine2TDengineTest.java @@ -2,14 +2,12 @@ package com.alibaba.datax.plugin.writer.tdenginewriter; import com.alibaba.datax.core.Engine; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Random; -@Ignore public class TDengine2TDengineTest { private static final String host1 = "192.168.56.105"; From 03158bf046c12932b0ec98c3adbbbf25e2c3f150 Mon Sep 17 00:00:00 2001 From: dingxiaobo Date: Fri, 26 Aug 2022 13:25:48 +0800 Subject: [PATCH 192/251] Merge StartRocks plugin --- pom.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 08bb103d..cf7a8e67 100644 --- a/pom.xml +++ b/pom.xml @@ -88,8 +88,6 @@ kingbaseeswriter adswriter oceanbasev10writer - cassandrawriter - clickhousewriter adbpgwriter hologresjdbcwriter rdbmswriter @@ -117,7 +115,7 @@ oscarwriter cassandrawriter clickhousewriter - + plugin-rdbms-util plugin-unstructured-storage-util From b49ceb135f732c4c24442edc6ecc85ec4b4810fd Mon Sep 17 00:00:00 2001 From: dingxiaobo Date: Fri, 26 Aug 2022 13:45:33 +0800 Subject: [PATCH 193/251] Merge StartRocks plugin --- .github/workflows/release.yml | 31 ------------------------------- build.sh | 8 -------- 2 files changed, 39 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100755 build.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index f26d8e32..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Release - -on: - push: - tags: - - "v*.*.*" - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Set up Maven Central Repository - uses: actions/setup-java@v2 - with: - java-version: '8' - distribution: 'adopt' - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - run: | - git checkout main && git pull origin main - rm -rf target - mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true - cd target/datax/datax/plugin/writer/ - tar -czvf starrockswriter.tar.gz starrockswriter - - name: Release - uses: softprops/action-gh-release@v1 - with: - files: | - target/datax/datax/plugin/writer/starrockswriter.tar.gz diff --git a/build.sh b/build.sh deleted file mode 100755 index d8574e17..00000000 --- a/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -ShellDir="$( cd "$( dirname "$0" )" && pwd )" -cd $ShellDir -rm -rf target -mvn -U -pl starrockswriter -am clean package assembly:assembly -Dmaven.test.skip=true -rm -f starrockswriter.tar.gz -cd target/datax/datax/plugin/writer/ -tar -czvf starrockswriter.tar.gz starrockswriter -mv starrockswriter.tar.gz $ShellDir From 6c41fe832b79675171a7fefe4777c3a4887e1b39 Mon Sep 17 00:00:00 2001 From: "jiafeng.zhang" Date: Thu, 29 Sep 2022 09:25:25 +0800 Subject: [PATCH 194/251] support csv format import support csv format import --- doriswriter/src/main/assembly/package.xml | 12 +- .../plugin/writer/doriswriter/DorisCodec.java | 11 +- .../writer/doriswriter/DorisCsvCodec.java | 49 +++++++ .../writer/doriswriter/DorisFlushBatch.java | 36 ++++-- .../writer/doriswriter/DorisJsonCodec.java | 4 +- .../writer/doriswriter/DorisWriter.java | 20 +-- .../doriswriter/DorisWriterEmitter.java | 120 ++++++++++-------- .../writer/doriswriter/EscapeHandler.java | 42 ++++++ .../datax/plugin/writer/doriswriter/Key.java | 56 +++++--- .../main/resources/plugin_job_template.json | 1 + 10 files changed, 245 insertions(+), 106 deletions(-) create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCsvCodec.java create mode 100644 doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/EscapeHandler.java diff --git a/doriswriter/src/main/assembly/package.xml b/doriswriter/src/main/assembly/package.xml index 9fca5e93..71596332 100644 --- a/doriswriter/src/main/assembly/package.xml +++ b/doriswriter/src/main/assembly/package.xml @@ -1,5 +1,4 @@ - - - - + + dir @@ -45,7 +42,6 @@ under the License. plugin/writer/doriswriter - false diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java index 9a364f40..51bc6881 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCodec.java @@ -22,16 +22,17 @@ import com.alibaba.datax.common.element.DateColumn; import com.alibaba.datax.common.element.Record; import org.apache.commons.lang3.time.DateFormatUtils; +import java.time.ZoneId; import java.util.List; import java.util.TimeZone; public abstract class DorisCodec { - protected static String timeZone = "GMT+8"; - protected static TimeZone timeZoner = TimeZone.getTimeZone(timeZone); + protected final TimeZone timeZone; protected final List fieldNames; - public DorisCodec(final List fieldNames) { + public DorisCodec(final List fieldNames, final String timeZone) { this.fieldNames = fieldNames; + this.timeZone = TimeZone.getTimeZone(ZoneId.of(timeZone)); } public abstract String serialize(Record row); @@ -60,9 +61,9 @@ public abstract class DorisCodec { final DateColumn.DateType dateType = ((DateColumn) col).getSubType(); switch (dateType) { case DATE: - return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd", timeZoner); + return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd", timeZone); case DATETIME: - return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd HH:mm:ss", timeZoner); + return DateFormatUtils.format(col.asDate(), "yyyy-MM-dd HH:mm:ss", timeZone); default: return col.asString(); } diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCsvCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCsvCodec.java new file mode 100644 index 00000000..d433af38 --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisCsvCodec.java @@ -0,0 +1,49 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import com.alibaba.datax.common.element.Record; + +import java.util.ArrayList; +import java.util.List; + +public class DorisCsvCodec extends DorisCodec { + + private final String columnSeparator; + + public DorisCsvCodec(final List fieldNames, String columnSeparator, String timeZone) { + super(fieldNames, timeZone); + this.columnSeparator = EscapeHandler.escapeString(columnSeparator); + } + + @Override + public String serialize(final Record row) { + if (null == this.fieldNames) { + return ""; + } + List list = new ArrayList<>(); + + for (int i = 0; i < this.fieldNames.size(); i++) { + Object value = this.convertColumn(row.getColumn(i)); + list.add(value != null ? value.toString() : "\\N"); + } + + return String.join(columnSeparator, list); + } + +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java index 493ddec9..9980c937 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisFlushBatch.java @@ -17,15 +17,20 @@ package com.alibaba.datax.plugin.writer.doriswriter; +import java.util.ArrayList; +import java.util.List; + // A wrapper class to hold a batch of loaded rows public class DorisFlushBatch { - private String lineDelimiter; + private final String format; + private final String lineDelimiter; private String label; - private long rows = 0; - private StringBuilder data = new StringBuilder(); + private long byteSize = 0; + private List data = new ArrayList<>(); - public DorisFlushBatch(String lineDelimiter) { - this.lineDelimiter = lineDelimiter; + public DorisFlushBatch(String lineDelimiter, String format) { + this.lineDelimiter = EscapeHandler.escapeString(lineDelimiter); + this.format = format; } public void setLabel(String label) { @@ -37,22 +42,25 @@ public class DorisFlushBatch { } public long getRows() { - return rows; + return data.size(); } public void putData(String row) { - if (data.length() > 0) { - data.append(lineDelimiter); - } - data.append(row); - rows++; + data.add(row); + byteSize += row.getBytes().length; } - public StringBuilder getData() { - return data; + public String getData() { + String result; + if (Key.DEFAULT_FORMAT_CSV.equalsIgnoreCase(format)) { + result = String.join(this.lineDelimiter, data); + } else { + result = data.toString(); + } + return result; } public long getSize() { - return data.length(); + return byteSize; } } diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java index 8d4568c2..664b9d36 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java @@ -28,8 +28,8 @@ import java.util.Map; public class DorisJsonCodec extends DorisCodec { private Map rowMap; - public DorisJsonCodec(final List fieldNames) { - super(fieldNames); + public DorisJsonCodec(final List fieldNames, final String timeZone) { + super(fieldNames, timeZone); this.rowMap = new HashMap<>(this.fieldNames.size()); } diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java index 71e2d1ad..a2bdfd7e 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriter.java @@ -48,6 +48,7 @@ public class DorisWriter extends Writer { private Key keys; private DorisCodec rowCodec; private int batchNum = 0; + private String labelPrefix; public Task() { } @@ -55,7 +56,12 @@ public class DorisWriter extends Writer { @Override public void init() { this.keys = new Key(super.getPluginJobConf()); - this.rowCodec = new DorisJsonCodec(this.keys.getColumns()); + if (Key.DEFAULT_FORMAT_CSV.equalsIgnoreCase(this.keys.getFormat())) { + this.rowCodec = new DorisCsvCodec(this.keys.getColumns(), this.keys.getColumnSeparator(), this.keys.getTimeZone()); + } else { + this.rowCodec = new DorisJsonCodec(this.keys.getColumns(), this.keys.getTimeZone()); + } + this.labelPrefix = this.keys.getLabelPrefix() + UUID.randomUUID(); this.dorisWriterEmitter = new DorisWriterEmitter(keys); } @@ -66,7 +72,7 @@ public class DorisWriter extends Writer { @Override public void startWrite(RecordReceiver recordReceiver) { String lineDelimiter = this.keys.getLineDelimiter(); - DorisFlushBatch flushBatch = new DorisFlushBatch(lineDelimiter); + DorisFlushBatch flushBatch = new DorisFlushBatch(lineDelimiter, this.keys.getFormat()); long batchCount = 0; long batchByteSize = 0L; Record record; @@ -93,7 +99,7 @@ public class DorisWriter extends Writer { // clear buffer batchCount = 0; batchByteSize = 0L; - flushBatch = new DorisFlushBatch(lineDelimiter); + flushBatch = new DorisFlushBatch(lineDelimiter, this.keys.getFormat()); } } // end of while @@ -103,14 +109,12 @@ public class DorisWriter extends Writer { } private void flush(DorisFlushBatch flushBatch) { - final String label = getStreamLoadLabel(); - flushBatch.setLabel(label); - dorisWriterEmitter.doStreamLoad(flushBatch); + flushBatch.setLabel(getStreamLoadLabel()); + dorisWriterEmitter.emit(flushBatch); } private String getStreamLoadLabel() { - String labelPrefix = this.keys.getLabelPrefix(); - return labelPrefix + UUID.randomUUID().toString() + "_" + (batchNum++); + return labelPrefix + "_" + (batchNum++); } @Override diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java index fb4e46b0..ccd9fc4d 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisWriterEmitter.java @@ -23,6 +23,7 @@ import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.HttpRequest; @@ -47,12 +48,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.net.HttpURLConnection; import java.net.URI; -import java.net.URL; import java.util.Base64; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; // Used to load batch of rows to Doris using stream load public class DorisWriterEmitter { @@ -88,13 +88,28 @@ public class DorisWriterEmitter { } } + public void emit(final DorisFlushBatch flushData) { + String host = this.getAvailableHost(); + for (int i = 0; i <= this.keys.getMaxRetries(); i++) { + try { + doStreamLoad(flushData, host); + return; + } catch (DataXException ex) { + if (i >= this.keys.getMaxRetries()) { + throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, ex); + } + LOG.error("StreamLoad error, switch host {} and retry: ", host, ex); + host = this.getAvailableHost(); + } + } + } + /** * execute doris stream load */ - public void doStreamLoad(final DorisFlushBatch flushData) { + private void doStreamLoad(final DorisFlushBatch flushData, String host) { long start = System.currentTimeMillis(); - final String host = this.getAvailableHost(); - if (null == host) { + if (StringUtils.isEmpty(host)) { throw DataXException.asDataXException(DBUtilErrorCode.WRITE_DATA_ERROR, "None of the load url can be connected."); } final String loadUrl = host + "/api/" + this.keys.getDatabase() + "/" + this.keys.getTable() + "/_stream_load"; @@ -130,28 +145,12 @@ public class DorisWriterEmitter { while (this.hostPos < targetHosts.size()) { final String host = targetHosts.get(hostPos); ++this.hostPos; - if (this.tryHttpConnection(host)) { - return host; - } + return host; } return null; } - private boolean tryHttpConnection(final String host) { - try { - final URL url = new URL(host); - final HttpURLConnection co = (HttpURLConnection) url.openConnection(); - co.setConnectTimeout(1000); - co.connect(); - co.disconnect(); - return true; - } catch (Exception e) { - LOG.warn("Failed to connect to address:{} , Exception ={}", host, e); - return false; - } - } - private Map doHttpPut(final String loadUrl, final DorisFlushBatch flushBatch) throws IOException { LOG.info(String.format("Executing stream load to: '%s', size: %s, rows: %d", loadUrl, flushBatch.getSize(), flushBatch.getRows())); @@ -181,10 +180,12 @@ public class DorisWriterEmitter { final HttpPut httpPut = new HttpPut(loadUrl); final List cols = this.keys.getColumns(); if (null != cols && !cols.isEmpty()) { - httpPut.setHeader("columns", String.join(",", cols)); + httpPut.setHeader("columns", String.join(",", cols.stream().map(item -> String.format("`%s`", item.trim().replace("`", ""))).collect(Collectors.toList()))); } - // put loadProps to http header + //set default header + setDefaultHeader(httpPut); + // put custom loadProps to http header final Map loadProps = this.keys.getLoadProps(); if (null != loadProps) { for (final Map.Entry entry : loadProps.entrySet()) { @@ -196,14 +197,9 @@ public class DorisWriterEmitter { httpPut.setHeader(HttpHeaders.EXPECT, "100-continue"); httpPut.setHeader(HttpHeaders.AUTHORIZATION, this.getBasicAuthHeader(this.keys.getUsername(), this.keys.getPassword())); httpPut.setHeader("label", flushBatch.getLabel()); - httpPut.setHeader("format", "json"); - httpPut.setHeader("line_delimiter", this.keys.getLineDelimiterDesc()); - httpPut.setHeader("read_json_by_line", "true"); - httpPut.setHeader("fuzzy_parse", "true"); // Use ByteArrayEntity instead of StringEntity to handle Chinese correctly - httpPut.setEntity(new ByteArrayEntity(flushBatch.getData().toString().getBytes())); - + httpPut.setEntity(new ByteArrayEntity(flushBatch.getData().getBytes())); httpPut.setConfig(requestConfig); try (final CloseableHttpResponse resp = httpclient.execute(httpPut)) { @@ -222,6 +218,21 @@ public class DorisWriterEmitter { } } + /** + * Set default request headers in json and csv formats. + * csv default delimiters are \x01 and \x02 + */ + private void setDefaultHeader(HttpPut httpPut) { + if (Key.DEFAULT_FORMAT_CSV.equalsIgnoreCase(this.keys.getFormat())) { + httpPut.setHeader("line_delimiter", this.keys.getLineDelimiter()); + httpPut.setHeader("column_separator", this.keys.getColumnSeparator()); + } else { + httpPut.setHeader("format", "json"); + httpPut.setHeader("strip_outer_array", "true"); + httpPut.setHeader("fuzzy_parse", "true"); + } + } + private String getBasicAuthHeader(final String username, final String password) { final String auth = username + ":" + password; final byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes()); @@ -231,44 +242,51 @@ public class DorisWriterEmitter { // for test public static void main(String[] args) throws IOException { String json = "{\n" + - " \"feLoadUrl\": [\"127.0.0.1:8030\"],\n" + - " \"column\": [\"k1\", \"k2\", \"k3\"],\n" + - " \"database\": \"db1\",\n" + + " \"beLoadUrl\": [\"127.0.0.1:8040\"],\n" + + " \"column\": [\"name\", \"age\", \"cdate\", \"cdatetime\"],\n" + + " \"database\": \"test\",\n" + " \"jdbcUrl\": \"jdbc:mysql://127.0.0.1:9030/\",\n" + " \"loadProps\": {\n" + +// " \"line_delimiter\": \"\\\\x03\",\n" + +// " \"column_separator\": \"\\\\x04\",\n" + " },\n" + - " \"password\": \"12345\",\n" + + " \"format\": \"csv\",\n" + + " \"password\": \"\",\n" + " \"postSql\": [],\n" + " \"preSql\": [],\n" + - " \"table\": \"t1\",\n" + + " \"table\": \"test_datax\",\n" + + " \"maxRetries\": \"0\",\n" + " \"username\": \"root\"\n" + " }"; Configuration configuration = Configuration.from(json); Key key = new Key(configuration); DorisWriterEmitter emitter = new DorisWriterEmitter(key); - DorisFlushBatch flushBatch = new DorisFlushBatch("\n"); - flushBatch.setLabel("test4"); + DorisFlushBatch flushBatch = new DorisFlushBatch(key.getLineDelimiter(), key.getFormat()); + Map row1 = Maps.newHashMap(); - row1.put("k1", "2021-02-02"); - row1.put("k2", "2021-02-02 00:00:00"); - row1.put("k3", "3"); - String rowStr1 = JSON.toJSONString(row1); - System.out.println("rows1: " + rowStr1); - flushBatch.putData(rowStr1); - + row1.put("cdate", "2021-02-02"); + row1.put("cdatetime", "2021-02-02 00:00:00"); + row1.put("name", "zhangsan"); + row1.put("age", "18"); Map row2 = Maps.newHashMap(); - row2.put("k1", "2021-02-03"); - row2.put("k2", "2021-02-03 00:00:00"); - row2.put("k3", "4"); + row2.put("cdate", "2022-02-02"); + row2.put("cdatetime", "2022-02-02 10:00:00"); + row2.put("name", "lisi"); + row2.put("age", "180"); + String rowStr1 = JSON.toJSONString(row1); String rowStr2 = JSON.toJSONString(row2); + if ("csv".equals(key.getFormat())) { + rowStr1 = String.join(EscapeHandler.escapeString(key.getColumnSeparator()), "2021-02-02", "2021-02-02 00:00:00", "zhangsan", "18"); + rowStr2 = String.join(EscapeHandler.escapeString(key.getColumnSeparator()), "2022-02-02", "2022-02-02 10:00:00", "lisi", "180"); + } + System.out.println("rows1: " + rowStr1); System.out.println("rows2: " + rowStr2); - flushBatch.putData(rowStr2); - for (int i = 0; i < 500000; ++i) { + for (int i = 0; i < 1; ++i) { + flushBatch.putData(rowStr1); flushBatch.putData(rowStr2); } - - emitter.doStreamLoad(flushBatch); + emitter.emit(flushBatch); } } diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/EscapeHandler.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/EscapeHandler.java new file mode 100644 index 00000000..91b0fbdb --- /dev/null +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/EscapeHandler.java @@ -0,0 +1,42 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.alibaba.datax.plugin.writer.doriswriter; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Handler for escape in properties. + */ +public class EscapeHandler { + public static final String ESCAPE_DELIMITERS_FLAGS = "\\x"; + public static final Pattern ESCAPE_PATTERN = Pattern.compile("\\\\x([0-9|a-f|A-F]{2})"); + + public static String escapeString(String source) { + if (source.startsWith(ESCAPE_DELIMITERS_FLAGS)) { + Matcher m = ESCAPE_PATTERN.matcher(source); + StringBuffer buf = new StringBuffer(); + while (m.find()) { + m.appendReplacement(buf, String.format("%s", (char) Integer.parseInt(m.group(1), 16))); + } + m.appendTail(buf); + return buf.toString(); + } + return source; + } +} diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java index cfbef96c..72812a9c 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/Key.java @@ -23,6 +23,8 @@ import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode; import com.google.common.base.Strings; import java.io.Serializable; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,6 +36,7 @@ public class Key implements Serializable { public static final String DATABASE = "database"; public static final String TABLE = "table"; public static final String COLUMN = "column"; + public static final String TIME_ZONE = "timeZone"; public static final String USERNAME = "username"; public static final String PASSWORD = "password"; @@ -42,28 +45,36 @@ public class Key implements Serializable { public static final String POST_SQL = "postSql"; public static final String LOAD_PROPS = "loadProps"; + public static final String LOAD_PROPS_LINE_DELIMITER = "line_delimiter"; + public static final String LOAD_PROPS_COLUMN_SEPARATOR = "column_separator"; + public static final String MAX_BATCH_ROWS = "maxBatchRows"; public static final String MAX_BATCH_BYTE_SIZE = "maxBatchByteSize"; + public static final String MAX_RETRIES = "maxRetries"; public static final String LABEL_PREFIX = "labelPrefix"; - public static final String LINE_DELIMITER = "lineDelimiter"; + public static final String FORMAT = "format"; public static final String CONNECT_TIMEOUT = "connectTimeout"; private final Configuration options; - private final String lineDelimiterDesc; private static final long DEFAULT_MAX_BATCH_ROWS = 50_0000; - private static final long DEFAULT_MAX_BATCH_BYTE_SIZE = 100 * 1024 * 1024; // 100MB + private static final long DEFAULT_MAX_BATCH_BYTE_SIZE = 90 * 1024 * 1024; // 90MB + private static final int DEFAULT_MAX_RETRIES = 0; + private static final String DEFAULT_LABEL_PREFIX = "datax_doris_writer_"; - private static final String DEFAULT_LINE_DELIMITER = "\n"; + private static final String DEFAULT_COLUMN_SEPARATOR = "\\x01"; + private static final String DEFAULT_LINE_DELIMITER = "\\x02"; + public static final String DEFAULT_FORMAT_CSV = "csv"; + private static final String DEFAULT_TIME_ZONE = "+08:00"; private static final int DEFAULT_CONNECT_TIMEOUT = -1; public Key(final Configuration options) { this.options = options; - this.lineDelimiterDesc = parseHexReadable(this.getLineDelimiter()); } public void doPretreatment() { this.validateRequired(); this.validateStreamLoadUrl(); + this.validateFormat(); } public String getJdbcUrl() { @@ -98,6 +109,10 @@ public class Key implements Serializable { return this.options.getList(COLUMN, String.class); } + public String getTimeZone() { + return this.options.getString(TIME_ZONE, DEFAULT_TIME_ZONE); + } + public List getPreSqlList() { return this.options.getList(PRE_SQL, String.class); } @@ -107,7 +122,7 @@ public class Key implements Serializable { } public Map getLoadProps() { - return this.options.getMap(LOAD_PROPS); + return this.options.getMap(LOAD_PROPS, new HashMap<>()); } public long getBatchRows() { @@ -118,22 +133,30 @@ public class Key implements Serializable { return this.options.getLong(MAX_BATCH_BYTE_SIZE, DEFAULT_MAX_BATCH_BYTE_SIZE); } + public int getMaxRetries() { + return this.options.getInt(MAX_RETRIES, DEFAULT_MAX_RETRIES); + } + public String getLabelPrefix() { return this.options.getString(LABEL_PREFIX, DEFAULT_LABEL_PREFIX); } public String getLineDelimiter() { - return this.options.getString(LINE_DELIMITER, DEFAULT_LINE_DELIMITER); + return getLoadProps().getOrDefault(LOAD_PROPS_LINE_DELIMITER, DEFAULT_LINE_DELIMITER).toString(); + } + + public String getFormat() { + return this.options.getString(FORMAT, DEFAULT_FORMAT_CSV); + } + + public String getColumnSeparator() { + return getLoadProps().getOrDefault(LOAD_PROPS_COLUMN_SEPARATOR, DEFAULT_COLUMN_SEPARATOR).toString(); } public int getConnectTimeout() { return this.options.getInt(CONNECT_TIMEOUT, DEFAULT_CONNECT_TIMEOUT); } - public String getLineDelimiterDesc() { - return lineDelimiterDesc; - } - private void validateStreamLoadUrl() { List urlList = this.getBeLoadUrlList(); if (urlList == null) { @@ -152,14 +175,11 @@ public class Key implements Serializable { } } - private String parseHexReadable(String s) { - byte[] separatorBytes = s.getBytes(); - StringBuilder desc = new StringBuilder(); - - for (byte separatorByte : separatorBytes) { - desc.append(String.format("\\x%02x", separatorByte)); + private void validateFormat() { + String format = this.getFormat(); + if (!Arrays.asList("csv", "json").contains(format.toLowerCase())) { + throw DataXException.asDataXException(DBUtilErrorCode.CONF_ERROR, "format only supports csv or json"); } - return desc.toString(); } private void validateRequired() { diff --git a/doriswriter/src/main/resources/plugin_job_template.json b/doriswriter/src/main/resources/plugin_job_template.json index 152f1eee..9cd9bb18 100644 --- a/doriswriter/src/main/resources/plugin_job_template.json +++ b/doriswriter/src/main/resources/plugin_job_template.json @@ -6,6 +6,7 @@ "database": "", "table": "", "column": [], + "timeZone": "", "preSql": [], "postSql": [], "jdbcUrl": "", From 78ac25cb080520b562f360593f8bd4483bca8ac4 Mon Sep 17 00:00:00 2001 From: "jiafeng.zhang" Date: Thu, 29 Sep 2022 09:58:38 +0800 Subject: [PATCH 195/251] fix --- .../alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java index 664b9d36..2a68d050 100644 --- a/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java +++ b/doriswriter/src/main/java/com/alibaba/datax/plugin/writer/doriswriter/DorisJsonCodec.java @@ -45,6 +45,6 @@ public class DorisJsonCodec extends DorisCodec { rowMap.put(fieldName, this.convertColumn(row.getColumn(idx))); ++idx; } - return JSON.toJSONString(rowMap); + return JSON.toJSONString(rowMap, SerializerFeature.WriteMapNullValue); } } From 874a256a038aed2fdf7a52f6913767a05f39e60a Mon Sep 17 00:00:00 2001 From: dingxiaobo Date: Thu, 22 Sep 2022 16:11:34 +0800 Subject: [PATCH 196/251] DataX 2209, add plugin: datahubreader/datahubwriter/loghubreader/loghubwriter/starrocksreader, update plugin: odpsreader/oceanbasev10reader/oceanbasev10writer/elasticserachwriter/mysqlreader/mysqlwriter --- README.md | 5 +- .../src/main/resources/plugin.json | 2 +- .../datax/common/util/Configuration.java | 9 + .../alibaba/datax/common/util/StrUtil.java | 18 + datahubreader/pom.xml | 79 ++ datahubreader/src/main/assembly/package.xml | 34 + .../plugin/reader/datahubreader/Constant.java | 8 + .../datahubreader/DatahubClientHelper.java | 42 + .../reader/datahubreader/DatahubReader.java | 292 ++++ .../datahubreader/DatahubReaderErrorCode.java | 35 + .../datahubreader/DatahubReaderUtils.java | 200 +++ .../datahubreader/DatahubWriterErrorCode.java | 37 + .../plugin/reader/datahubreader/Key.java | 35 + .../datahubreader/LocalStrings.properties | 5 + .../LocalStrings_en_US.properties | 5 + .../LocalStrings_ja_JP.properties | 5 + .../LocalStrings_zh_CN.properties | 5 + .../LocalStrings_zh_HK.properties | 9 + .../LocalStrings_zh_TW.properties | 9 + .../main/resources/job_config_template.json | 14 + datahubreader/src/main/resources/plugin.json | 6 + datahubwriter/pom.xml | 79 ++ datahubwriter/src/main/assembly/package.xml | 34 + .../datahubwriter/DatahubClientHelper.java | 43 + .../writer/datahubwriter/DatahubWriter.java | 355 +++++ .../datahubwriter/DatahubWriterErrorCode.java | 37 + .../plugin/writer/datahubwriter/Key.java | 26 + .../datahubwriter/LocalStrings.properties | 5 + .../LocalStrings_en_US.properties | 5 + .../LocalStrings_ja_JP.properties | 5 + .../LocalStrings_zh_CN.properties | 5 + .../LocalStrings_zh_HK.properties | 9 + .../LocalStrings_zh_TW.properties | 9 + .../main/resources/job_config_template.json | 14 + datahubwriter/src/main/resources/plugin.json | 6 + elasticsearchwriter/pom.xml | 4 +- .../writer/elasticsearchwriter/ESClient.java | 236 ---- .../writer/elasticsearchwriter/ESColumn.java | 65 - .../writer/elasticsearchwriter/ESWriter.java | 460 ------ .../ESWriterErrorCode.java | 37 - .../ElasticSearchClient.java | 312 +++++ .../ElasticSearchColumn.java | 126 ++ ...dType.java => ElasticSearchFieldType.java} | 13 +- .../ElasticSearchWriter.java | 1119 +++++++++++++++ .../ElasticSearchWriterErrorCode.java | 41 + .../elasticsearchwriter/JsonPathUtil.java | 28 + .../writer/elasticsearchwriter/JsonUtil.java | 54 + .../writer/elasticsearchwriter/Key.java | 90 +- .../elasticsearchwriter/NoReRunException.java | 16 + .../elasticsearchwriter/PartitionColumn.java | 42 + .../elasticsearchwriter/PrimaryKeyInfo.java | 47 + .../elasticsearchwriter/jest/ClusterInfo.java | 35 + .../jest/ClusterInfoResult.java | 49 + .../elasticsearchwriter/jest/PutMapping7.java | 39 + .../src/main/resources/plugin.json | 2 +- .../src/main/resources/plugin.json | 2 +- .../src/main/resources/plugin.json | 2 +- loghubreader/pom.xml | 73 + loghubreader/src/main/assembly/package.xml | 34 + .../plugin/reader/loghubreader/Constant.java | 26 + .../datax/plugin/reader/loghubreader/Key.java | 38 + .../reader/loghubreader/LogHubReader.java | 482 +++++++ .../loghubreader/LogHubReaderErrorCode.java | 34 + loghubreader/src/main/resources/plugin.json | 6 + .../main/resources/plugin_job_template.json | 12 + loghubwriter/pom.xml | 73 + loghubwriter/src/main/assembly/package.xml | 34 + .../datax/plugin/writer/loghubwriter/Key.java | 35 + .../writer/loghubwriter/LogHubWriter.java | 315 +++++ .../loghubwriter/LogHubWriterErrorCode.java | 33 + loghubwriter/src/main/resources/plugin.json | 6 + .../main/resources/plugin_job_template.json | 13 + mysqlreader/doc/mysqlreader.md | 4 +- .../oceanbasev10reader/ext/ReaderJob.java | 8 +- .../util/ObReaderUtils.java | 73 +- .../oceanbasev10reader/util/ObVersion.java | 86 ++ .../oceanbasev10reader/util/PartType.java | 5 + .../util/PartitionSplitUtil.java | 143 +- .../oceanbasev10reader/util/TaskContext.java | 17 +- .../util/ObReaderUtilsTest.java | 2 + .../OceanBaseV10Writer.java | 4 +- .../util/ObWriterUtils.java | 8 +- .../plugin/reader/odpsreader/ColumnType.java | 14 - .../reader/odpsreader/InternalColumnInfo.java | 24 + .../plugin/reader/odpsreader/OdpsReader.java | 27 +- .../plugin/reader/odpsreader/ReaderProxy.java | 11 +- .../reader/odpsreader/util/OdpsUtil.java | 28 +- opentsdbreader/pom.xml | 4 - opentsdbreader/src/main/resources/plugin.json | 2 +- oraclereader/pom.xml | 4 +- oraclereader/src/main/assembly/package.xml | 7 - oraclereader/src/main/lib/ojdbc6-11.2.0.3.jar | Bin 2714189 -> 0 bytes oraclewriter/pom.xml | 4 +- oraclewriter/src/main/assembly/package.xml | 7 - oraclewriter/src/main/lib/ojdbc6-11.2.0.3.jar | Bin 2714189 -> 0 bytes oscarwriter/src/main/resources/plugin.json | 2 +- .../tools/tablestore_streamreader_console.py | 179 --- otsstreamreader/tools/tabulate.py | 1237 ----------------- package.xml | 56 +- .../datax/plugin/rdbms/util/DataBaseType.java | 3 +- pom.xml | 16 +- rdbmsreader/pom.xml | 27 +- rdbmsreader/src/main/libs/Dm7JdbcDriver16.jar | Bin 818729 -> 0 bytes rdbmsreader/src/main/libs/db2jcc4.jar | Bin 3528544 -> 0 bytes rdbmsreader/src/main/resources/plugin.json | 2 +- rdbmswriter/pom.xml | 39 +- rdbmswriter/src/main/libs/Dm7JdbcDriver16.jar | Bin 818729 -> 0 bytes rdbmswriter/src/main/libs/db2jcc4.jar | Bin 3528544 -> 0 bytes rdbmswriter/src/main/resources/plugin.json | 2 +- sqlserverreader/pom.xml | 3 - sqlserverreader/src/main/assembly/package.xml | 7 - sqlserverreader/src/main/lib/sqljdbc4-4.0.jar | Bin 584207 -> 0 bytes sqlserverwriter/pom.xml | 2 - sqlserverwriter/src/main/assembly/package.xml | 7 - sqlserverwriter/src/main/lib/sqljdbc4-4.0.jar | Bin 584207 -> 0 bytes starrocksreader/pom.xml | 95 ++ starrocksreader/src/main/assembly/package.xml | 35 + .../starrocksreader/StarRocksReader.java | 116 ++ .../src/main/resources/plugin.json | 6 + starrockswriter/doc/starrockswriter.md | 12 +- starrockswriter/pom.xml | 5 +- starrockswriter/src/main/assembly/package.xml | 2 +- .../starrockswriter/StarRocksWriter.java | 7 +- .../StarRocksWriterOptions.java | 60 +- .../manager/StarRocksStreamLoadVisitor.java | 79 +- .../manager/StarRocksWriterManager.java | 16 +- .../main/resources/plugin_job_template.json | 12 +- tdenginereader/pom.xml | 1 - tdenginewriter/pom.xml | 1 - tsdbreader/pom.xml | 4 - tsdbreader/src/main/resources/plugin.json | 2 +- tsdbwriter/pom.xml | 4 - tsdbwriter/src/main/resources/plugin.json | 2 +- 133 files changed, 5505 insertions(+), 2537 deletions(-) create mode 100644 datahubreader/pom.xml create mode 100644 datahubreader/src/main/assembly/package.xml create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Constant.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubClientHelper.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReader.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderErrorCode.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderUtils.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubWriterErrorCode.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Key.java create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings.properties create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_en_US.properties create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_ja_JP.properties create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_CN.properties create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_HK.properties create mode 100644 datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_TW.properties create mode 100644 datahubreader/src/main/resources/job_config_template.json create mode 100644 datahubreader/src/main/resources/plugin.json create mode 100644 datahubwriter/pom.xml create mode 100644 datahubwriter/src/main/assembly/package.xml create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubClientHelper.java create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriter.java create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriterErrorCode.java create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/Key.java create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings.properties create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_en_US.properties create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_ja_JP.properties create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_CN.properties create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_HK.properties create mode 100644 datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_TW.properties create mode 100644 datahubwriter/src/main/resources/job_config_template.json create mode 100644 datahubwriter/src/main/resources/plugin.json delete mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESClient.java delete mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESColumn.java delete mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriter.java delete mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriterErrorCode.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchClient.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchColumn.java rename elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/{ESFieldType.java => ElasticSearchFieldType.java} (73%) create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriter.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriterErrorCode.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonPathUtil.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonUtil.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/NoReRunException.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PartitionColumn.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PrimaryKeyInfo.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfo.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfoResult.java create mode 100644 elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/PutMapping7.java create mode 100644 loghubreader/pom.xml create mode 100644 loghubreader/src/main/assembly/package.xml create mode 100644 loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Constant.java create mode 100644 loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Key.java create mode 100644 loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReader.java create mode 100644 loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReaderErrorCode.java create mode 100644 loghubreader/src/main/resources/plugin.json create mode 100644 loghubreader/src/main/resources/plugin_job_template.json create mode 100644 loghubwriter/pom.xml create mode 100644 loghubwriter/src/main/assembly/package.xml create mode 100644 loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/Key.java create mode 100644 loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriter.java create mode 100644 loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriterErrorCode.java create mode 100644 loghubwriter/src/main/resources/plugin.json create mode 100644 loghubwriter/src/main/resources/plugin_job_template.json create mode 100644 oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObVersion.java create mode 100644 odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/InternalColumnInfo.java delete mode 100644 oraclereader/src/main/lib/ojdbc6-11.2.0.3.jar delete mode 100644 oraclewriter/src/main/lib/ojdbc6-11.2.0.3.jar delete mode 100644 otsstreamreader/tools/tablestore_streamreader_console.py delete mode 100644 otsstreamreader/tools/tabulate.py delete mode 100755 rdbmsreader/src/main/libs/Dm7JdbcDriver16.jar delete mode 100755 rdbmsreader/src/main/libs/db2jcc4.jar delete mode 100755 rdbmswriter/src/main/libs/Dm7JdbcDriver16.jar delete mode 100755 rdbmswriter/src/main/libs/db2jcc4.jar delete mode 100644 sqlserverreader/src/main/lib/sqljdbc4-4.0.jar delete mode 100644 sqlserverwriter/src/main/lib/sqljdbc4-4.0.jar create mode 100644 starrocksreader/pom.xml create mode 100644 starrocksreader/src/main/assembly/package.xml create mode 100644 starrocksreader/src/main/java/com/alibaba/datax/plugin/reader/starrocksreader/StarRocksReader.java create mode 100644 starrocksreader/src/main/resources/plugin.json diff --git a/README.md b/README.md index 59795e25..c1a33dab 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ DataX本身作为数据同步框架,将不同数据源的同步抽象为从源 # Quick Start -##### Download [DataX下载地址](https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/20220530/datax.tar.gz) +##### Download [DataX下载地址](https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202209/datax.tar.gz) ##### 请点击:[Quick Start](https://github.com/alibaba/DataX/blob/master/userGuid.md) @@ -95,6 +95,9 @@ DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、N DataX 后续计划月度迭代更新,也欢迎感兴趣的同学提交 Pull requests,月度更新内容会介绍介绍如下。 +- [datax_v202209](https://github.com/alibaba/DataX/releases/tag/datax_v202209) + - 涉及通道能力更新(MaxCompute、Datahub、SLS等)、安全漏洞更新、通用打包更新等 + - [datax_v202205](https://github.com/alibaba/DataX/releases/tag/datax_v202205) - 涉及通道能力更新(MaxCompute、Hologres、OSS、Tdengine等)、安全漏洞更新、通用打包更新等 diff --git a/clickhousewriter/src/main/resources/plugin.json b/clickhousewriter/src/main/resources/plugin.json index ff1acf01..d70e2b1d 100755 --- a/clickhousewriter/src/main/resources/plugin.json +++ b/clickhousewriter/src/main/resources/plugin.json @@ -2,5 +2,5 @@ "name": "clickhousewriter", "class": "com.alibaba.datax.plugin.writer.clickhousewriter.ClickhouseWriter", "description": "useScene: prod. mechanism: Jdbc connection using the database, execute insert sql.", - "developer": "jiye.tjy" + "developer": "alibaba" } \ No newline at end of file diff --git a/common/src/main/java/com/alibaba/datax/common/util/Configuration.java b/common/src/main/java/com/alibaba/datax/common/util/Configuration.java index f570dd00..cd88e84a 100755 --- a/common/src/main/java/com/alibaba/datax/common/util/Configuration.java +++ b/common/src/main/java/com/alibaba/datax/common/util/Configuration.java @@ -411,6 +411,15 @@ public class Configuration { return list; } + public List getListWithJson(final String path, Class t) { + Object object = this.get(path, List.class); + if (null == object) { + return null; + } + + return JSON.parseArray(JSON.toJSONString(object),t); + } + /** * 根据用户提供的json path,寻址List对象,如果对象不存在,返回null */ diff --git a/common/src/main/java/com/alibaba/datax/common/util/StrUtil.java b/common/src/main/java/com/alibaba/datax/common/util/StrUtil.java index 82222b0d..867a9516 100755 --- a/common/src/main/java/com/alibaba/datax/common/util/StrUtil.java +++ b/common/src/main/java/com/alibaba/datax/common/util/StrUtil.java @@ -3,6 +3,8 @@ package com.alibaba.datax.common.util; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; @@ -82,4 +84,20 @@ public class StrUtil { return s.substring(0, headLength) + "..." + s.substring(s.length() - tailLength); } + public static String getMd5(String plainText) { + try { + StringBuilder builder = new StringBuilder(); + for (byte b : MessageDigest.getInstance("MD5").digest(plainText.getBytes())) { + int i = b & 0xff; + if (i < 0x10) { + builder.append('0'); + } + builder.append(Integer.toHexString(i)); + } + return builder.toString(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + } + } diff --git a/datahubreader/pom.xml b/datahubreader/pom.xml new file mode 100644 index 00000000..c0022b44 --- /dev/null +++ b/datahubreader/pom.xml @@ -0,0 +1,79 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + datahubreader + + 0.0.1-SNAPSHOT + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + com.aliyun.datahub + aliyun-sdk-datahub + 2.21.6-public + + + junit + junit + 4.12 + test + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/datahubreader/src/main/assembly/package.xml b/datahubreader/src/main/assembly/package.xml new file mode 100644 index 00000000..d14ea981 --- /dev/null +++ b/datahubreader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + + plugin/reader/datahubreader + + + target/ + + datahubreader-0.0.1-SNAPSHOT.jar + + plugin/reader/datahubreader + + + + + + false + plugin/reader/datahubreader/libs + runtime + + + diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Constant.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Constant.java new file mode 100644 index 00000000..bee3ccd7 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Constant.java @@ -0,0 +1,8 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +public class Constant { + + public static String DATETIME_FORMAT = "yyyyMMddHHmmss"; + public static String DATE_FORMAT = "yyyyMMdd"; + +} diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubClientHelper.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubClientHelper.java new file mode 100644 index 00000000..6f601fb4 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubClientHelper.java @@ -0,0 +1,42 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.aliyun.datahub.client.DatahubClient; +import com.aliyun.datahub.client.DatahubClientBuilder; +import com.aliyun.datahub.client.auth.Account; +import com.aliyun.datahub.client.auth.AliyunAccount; +import com.aliyun.datahub.client.common.DatahubConfig; +import com.aliyun.datahub.client.http.HttpConfig; +import org.apache.commons.lang3.StringUtils; + +public class DatahubClientHelper { + public static DatahubClient getDatahubClient(Configuration jobConfig) { + String accessId = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_ID, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + String accessKey = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_KEY, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + String endpoint = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ENDPOINT, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + Account account = new AliyunAccount(accessId, accessKey); + // 是否开启二进制传输,服务端2.12版本开始支持 + boolean enableBinary = jobConfig.getBool("enableBinary", false); + DatahubConfig datahubConfig = new DatahubConfig(endpoint, account, enableBinary); + // HttpConfig可不设置,不设置时采用默认值 + // 读写数据推荐打开网络传输 LZ4压缩 + HttpConfig httpConfig = null; + String httpConfigStr = jobConfig.getString("httpConfig"); + if (StringUtils.isNotBlank(httpConfigStr)) { + httpConfig = JSON.parseObject(httpConfigStr, new TypeReference() { + }); + } + + DatahubClientBuilder builder = DatahubClientBuilder.newBuilder().setDatahubConfig(datahubConfig); + if (null != httpConfig) { + builder.setHttpConfig(httpConfig); + } + DatahubClient datahubClient = builder.build(); + return datahubClient; + } +} diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReader.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReader.java new file mode 100644 index 00000000..4792ac39 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReader.java @@ -0,0 +1,292 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import com.aliyun.datahub.client.model.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; + + +import com.aliyun.datahub.client.DatahubClient; + + +public class DatahubReader extends Reader { + public static class Job extends Reader.Job { + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + + private Configuration originalConfig; + + private Long beginTimestampMillis; + private Long endTimestampMillis; + + DatahubClient datahubClient; + + @Override + public void init() { + LOG.info("datahub reader job init begin ..."); + this.originalConfig = super.getPluginJobConf(); + validateParameter(originalConfig); + this.datahubClient = DatahubClientHelper.getDatahubClient(this.originalConfig); + LOG.info("datahub reader job init end."); + } + + private void validateParameter(Configuration conf){ + conf.getNecessaryValue(Key.ENDPOINT,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESSKEYID,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESSKEYSECRET,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.PROJECT,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.TOPIC,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.COLUMN,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.BEGINDATETIME,DatahubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ENDDATETIME,DatahubReaderErrorCode.REQUIRE_VALUE); + + int batchSize = this.originalConfig.getInt(Key.BATCHSIZE, 1024); + if (batchSize > 10000) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid batchSize[" + batchSize + "] value (0,10000]!"); + } + + String beginDateTime = this.originalConfig.getString(Key.BEGINDATETIME); + if (beginDateTime != null) { + try { + beginTimestampMillis = DatahubReaderUtils.getUnixTimeFromDateTime(beginDateTime); + } catch (ParseException e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginDateTime[" + beginDateTime + "], format [yyyyMMddHHmmss]!"); + } + } + + if (beginTimestampMillis != null && beginTimestampMillis <= 0) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginTimestampMillis[" + beginTimestampMillis + "]!"); + } + + String endDateTime = this.originalConfig.getString(Key.ENDDATETIME); + if (endDateTime != null) { + try { + endTimestampMillis = DatahubReaderUtils.getUnixTimeFromDateTime(endDateTime); + } catch (ParseException e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginDateTime[" + endDateTime + "], format [yyyyMMddHHmmss]!"); + } + } + + if (endTimestampMillis != null && endTimestampMillis <= 0) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid endTimestampMillis[" + endTimestampMillis + "]!"); + } + + if (beginTimestampMillis != null && endTimestampMillis != null + && endTimestampMillis <= beginTimestampMillis) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "endTimestampMillis[" + endTimestampMillis + "] must bigger than beginTimestampMillis[" + beginTimestampMillis + "]!"); + } + } + + @Override + public void prepare() { + // create datahub client + String project = originalConfig.getNecessaryValue(Key.PROJECT, DatahubReaderErrorCode.REQUIRE_VALUE); + String topic = originalConfig.getNecessaryValue(Key.TOPIC, DatahubReaderErrorCode.REQUIRE_VALUE); + RecordType recordType = null; + try { + DatahubClient client = DatahubClientHelper.getDatahubClient(this.originalConfig); + GetTopicResult getTopicResult = client.getTopic(project, topic); + recordType = getTopicResult.getRecordType(); + } catch (Exception e) { + LOG.warn("get topic type error: {}", e.getMessage()); + } + if (null != recordType) { + if (recordType == RecordType.BLOB) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "DatahubReader only support 'Tuple' RecordType now, but your RecordType is 'BLOB'"); + } + } + } + + @Override + public void destroy() { + } + + @Override + public List split(int adviceNumber) { + LOG.info("split() begin..."); + + List readerSplitConfigs = new ArrayList(); + + String project = this.originalConfig.getString(Key.PROJECT); + String topic = this.originalConfig.getString(Key.TOPIC); + + List shardEntrys = DatahubReaderUtils.getShardsWithRetry(this.datahubClient, project, topic); + if (shardEntrys == null || shardEntrys.isEmpty() || shardEntrys.size() == 0) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Project [" + project + "] Topic [" + topic + "] has no shards, please check !"); + } + + for (ShardEntry shardEntry : shardEntrys) { + Configuration splitedConfig = this.originalConfig.clone(); + splitedConfig.set(Key.SHARDID, shardEntry.getShardId()); + readerSplitConfigs.add(splitedConfig); + } + + LOG.info("split() ok and end..."); + return readerSplitConfigs; + } + + } + + public static class Task extends Reader.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private Configuration taskConfig; + + private String accessId; + private String accessKey; + private String endpoint; + private String project; + private String topic; + private String shardId; + private Long beginTimestampMillis; + private Long endTimestampMillis; + private int batchSize; + private List columns; + private RecordSchema schema; + private String timeStampUnit; + + DatahubClient datahubClient; + + @Override + public void init() { + this.taskConfig = super.getPluginJobConf(); + + this.accessId = this.taskConfig.getString(Key.ACCESSKEYID); + this.accessKey = this.taskConfig.getString(Key.ACCESSKEYSECRET); + this.endpoint = this.taskConfig.getString(Key.ENDPOINT); + this.project = this.taskConfig.getString(Key.PROJECT); + this.topic = this.taskConfig.getString(Key.TOPIC); + this.shardId = this.taskConfig.getString(Key.SHARDID); + this.batchSize = this.taskConfig.getInt(Key.BATCHSIZE, 1024); + this.timeStampUnit = this.taskConfig.getString(Key.TIMESTAMP_UNIT, "MICROSECOND"); + try { + this.beginTimestampMillis = DatahubReaderUtils.getUnixTimeFromDateTime(this.taskConfig.getString(Key.BEGINDATETIME)); + } catch (ParseException e) { + } + + try { + this.endTimestampMillis = DatahubReaderUtils.getUnixTimeFromDateTime(this.taskConfig.getString(Key.ENDDATETIME)); + } catch (ParseException e) { + } + + this.columns = this.taskConfig.getList(Key.COLUMN, String.class); + + this.datahubClient = DatahubClientHelper.getDatahubClient(this.taskConfig); + + + this.schema = DatahubReaderUtils.getDatahubSchemaWithRetry(this.datahubClient, this.project, topic); + + LOG.info("init datahub reader task finished.project:{} topic:{} batchSize:{}", project, topic, batchSize); + } + + @Override + public void destroy() { + } + + @Override + public void startRead(RecordSender recordSender) { + LOG.info("read start"); + + String beginCursor = DatahubReaderUtils.getCursorWithRetry(this.datahubClient, this.project, + this.topic, this.shardId, this.beginTimestampMillis); + String endCursor = DatahubReaderUtils.getCursorWithRetry(this.datahubClient, this.project, + this.topic, this.shardId, this.endTimestampMillis); + + if (beginCursor == null) { + LOG.info("Shard:{} has no data!", this.shardId); + return; + } else if (endCursor == null) { + endCursor = DatahubReaderUtils.getLatestCursorWithRetry(this.datahubClient, this.project, + this.topic, this.shardId); + } + + String curCursor = beginCursor; + + boolean exit = false; + + while (true) { + + GetRecordsResult result = DatahubReaderUtils.getRecordsResultWithRetry(this.datahubClient, this.project, this.topic, + this.shardId, this.batchSize, curCursor, this.schema); + + List records = result.getRecords(); + if (records.size() > 0) { + for (RecordEntry record : records) { + if (record.getSystemTime() >= this.endTimestampMillis) { + exit = true; + break; + } + + HashMap dataMap = new HashMap(); + List fields = ((TupleRecordData) record.getRecordData()).getRecordSchema().getFields(); + for (int i = 0; i < fields.size(); i++) { + Field field = fields.get(i); + Column column = DatahubReaderUtils.getColumnFromField(record, field, this.timeStampUnit); + dataMap.put(field.getName(), column); + } + + Record dataxRecord = recordSender.createRecord(); + + if (null != this.columns && 1 == this.columns.size()) { + String columnsInStr = columns.get(0).toString(); + if ("\"*\"".equals(columnsInStr) || "*".equals(columnsInStr)) { + for (int i = 0; i < fields.size(); i++) { + dataxRecord.addColumn(dataMap.get(fields.get(i).getName())); + } + + } else { + if (dataMap.containsKey(columnsInStr)) { + dataxRecord.addColumn(dataMap.get(columnsInStr)); + } else { + dataxRecord.addColumn(new StringColumn(null)); + } + } + } else { + for (String col : this.columns) { + if (dataMap.containsKey(col)) { + dataxRecord.addColumn(dataMap.get(col)); + } else { + dataxRecord.addColumn(new StringColumn(null)); + } + } + } + + recordSender.sendToWriter(dataxRecord); + } + } else { + break; + } + + if (exit) { + break; + } + + curCursor = result.getNextCursor(); + } + + + LOG.info("end read datahub shard..."); + } + + } + +} diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderErrorCode.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderErrorCode.java new file mode 100644 index 00000000..949a66f0 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderErrorCode.java @@ -0,0 +1,35 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum DatahubReaderErrorCode implements ErrorCode { + BAD_CONFIG_VALUE("DatahubReader-00", "The value you configured is invalid."), + LOG_HUB_ERROR("DatahubReader-01","Datahub exception"), + REQUIRE_VALUE("DatahubReader-02","Missing parameters"), + EMPTY_LOGSTORE_VALUE("DatahubReader-03","There is no shard under this LogStore"); + + + private final String code; + private final String description; + + private DatahubReaderErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderUtils.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderUtils.java new file mode 100644 index 00000000..6c3455df --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubReaderUtils.java @@ -0,0 +1,200 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.concurrent.Callable; + +import com.alibaba.datax.common.element.*; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.DataXCaseEnvUtil; +import com.alibaba.datax.common.util.RetryUtil; + +import com.aliyun.datahub.client.DatahubClient; +import com.aliyun.datahub.client.exception.InvalidParameterException; +import com.aliyun.datahub.client.model.*; + +public class DatahubReaderUtils { + + public static long getUnixTimeFromDateTime(String dateTime) throws ParseException { + try { + String format = Constant.DATETIME_FORMAT; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); + return simpleDateFormat.parse(dateTime).getTime(); + } catch (ParseException ignored) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid DateTime[" + dateTime + "]!"); + } + } + + public static List getShardsWithRetry(final DatahubClient datahubClient, final String project, final String topic) { + + List shards = null; + try { + shards = RetryUtil.executeWithRetry(new Callable>() { + @Override + public List call() throws Exception { + ListShardResult listShardResult = datahubClient.listShard(project, topic); + return listShardResult.getShards(); + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + + } catch (Exception e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "get Shards error, please check ! detail error messsage: " + e.toString()); + } + return shards; + } + + public static String getCursorWithRetry(final DatahubClient datahubClient, final String project, final String topic, + final String shardId, final long timestamp) { + + String cursor; + try { + cursor = RetryUtil.executeWithRetry(new Callable() { + @Override + public String call() throws Exception { + try { + return datahubClient.getCursor(project, topic, shardId, CursorType.SYSTEM_TIME, timestamp).getCursor(); + } catch (InvalidParameterException e) { + if (e.getErrorMessage().indexOf("Time in seek request is out of range") >= 0) { + return null; + } else { + throw e; + } + + } + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + + } catch (Exception e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "get Cursor error, please check ! detail error messsage: " + e.toString()); + } + return cursor; + } + + public static String getLatestCursorWithRetry(final DatahubClient datahubClient, final String project, final String topic, + final String shardId) { + + String cursor; + try { + cursor = RetryUtil.executeWithRetry(new Callable() { + @Override + public String call() throws Exception { + return datahubClient.getCursor(project, topic, shardId, CursorType.LATEST).getCursor(); + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + + } catch (Exception e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "get Cursor error, please check ! detail error messsage: " + e.toString()); + } + return cursor; + } + + public static RecordSchema getDatahubSchemaWithRetry(final DatahubClient datahubClient, final String project, final String topic) { + + RecordSchema schema; + try { + schema = RetryUtil.executeWithRetry(new Callable() { + @Override + public RecordSchema call() throws Exception { + return datahubClient.getTopic(project, topic).getRecordSchema(); + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + + } catch (Exception e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "get Topic Schema error, please check ! detail error messsage: " + e.toString()); + } + return schema; + } + + public static GetRecordsResult getRecordsResultWithRetry(final DatahubClient datahubClient, final String project, + final String topic, final String shardId, final int batchSize, final String cursor, final RecordSchema schema) { + + GetRecordsResult result; + try { + result = RetryUtil.executeWithRetry(new Callable() { + @Override + public GetRecordsResult call() throws Exception { + return datahubClient.getRecords(project, topic, shardId, schema, cursor, batchSize); + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + + } catch (Exception e) { + throw DataXException.asDataXException(DatahubReaderErrorCode.BAD_CONFIG_VALUE, + "get Record Result error, please check ! detail error messsage: " + e.toString()); + } + return result; + + } + + public static Column getColumnFromField(RecordEntry record, Field field, String timeStampUnit) { + Column col = null; + TupleRecordData o = (TupleRecordData) record.getRecordData(); + + switch (field.getType()) { + case SMALLINT: + Short shortValue = ((Short) o.getField(field.getName())); + col = new LongColumn(shortValue == null ? null: shortValue.longValue()); + break; + case INTEGER: + col = new LongColumn((Integer) o.getField(field.getName())); + break; + case BIGINT: { + col = new LongColumn((Long) o.getField(field.getName())); + break; + } + case TINYINT: { + Byte byteValue = ((Byte) o.getField(field.getName())); + col = new LongColumn(byteValue == null ? null : byteValue.longValue()); + break; + } + case BOOLEAN: { + col = new BoolColumn((Boolean) o.getField(field.getName())); + break; + } + case FLOAT: + col = new DoubleColumn((Float) o.getField(field.getName())); + break; + case DOUBLE: { + col = new DoubleColumn((Double) o.getField(field.getName())); + break; + } + case STRING: { + col = new StringColumn((String) o.getField(field.getName())); + break; + } + case DECIMAL: { + BigDecimal value = (BigDecimal) o.getField(field.getName()); + col = new DoubleColumn(value == null ? null : value.doubleValue()); + break; + } + case TIMESTAMP: { + Long value = (Long) o.getField(field.getName()); + + if ("MILLISECOND".equals(timeStampUnit)) { + // MILLISECOND, 13位精度,直接 new Date() + col = new DateColumn(value == null ? null : new Date(value)); + } + else if ("SECOND".equals(timeStampUnit)){ + col = new DateColumn(value == null ? null : new Date(value * 1000)); + } + else { + // 默认都是 MICROSECOND, 16位精度, 和之前的逻辑保持一致。 + col = new DateColumn(value == null ? null : new Date(value / 1000)); + } + break; + } + default: + throw new RuntimeException("Unknown column type: " + field.getType()); + } + + return col; + } + +} diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubWriterErrorCode.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubWriterErrorCode.java new file mode 100644 index 00000000..c8633ea8 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/DatahubWriterErrorCode.java @@ -0,0 +1,37 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +import com.alibaba.datax.common.spi.ErrorCode; +import com.alibaba.datax.common.util.MessageSource; + +public enum DatahubWriterErrorCode implements ErrorCode { + MISSING_REQUIRED_VALUE("DatahubWriter-01", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.missing_required_value")), + INVALID_CONFIG_VALUE("DatahubWriter-02", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.invalid_config_value")), + GET_TOPOIC_INFO_FAIL("DatahubWriter-03", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.get_topic_info_fail")), + WRITE_DATAHUB_FAIL("DatahubWriter-04", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.write_datahub_fail")), + SCHEMA_NOT_MATCH("DatahubWriter-05", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.schema_not_match")), + ; + + private final String code; + private final String description; + + private DatahubWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} \ No newline at end of file diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Key.java b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Key.java new file mode 100644 index 00000000..3cb84b4b --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/Key.java @@ -0,0 +1,35 @@ +package com.alibaba.datax.plugin.reader.datahubreader; + +public final class Key { + + /** + * 此处声明插件用到的需要插件使用者提供的配置项 + */ + public static final String ENDPOINT = "endpoint"; + + public static final String ACCESSKEYID = "accessId"; + + public static final String ACCESSKEYSECRET = "accessKey"; + + public static final String PROJECT = "project"; + + public static final String TOPIC = "topic"; + + public static final String BEGINDATETIME = "beginDateTime"; + + public static final String ENDDATETIME = "endDateTime"; + + public static final String BATCHSIZE = "batchSize"; + + public static final String COLUMN = "column"; + + public static final String SHARDID = "shardId"; + + public static final String CONFIG_KEY_ENDPOINT = "endpoint"; + public static final String CONFIG_KEY_ACCESS_ID = "accessId"; + public static final String CONFIG_KEY_ACCESS_KEY = "accessKey"; + + + public static final String TIMESTAMP_UNIT = "timeStampUnit"; + +} \ No newline at end of file diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings.properties new file mode 100644 index 00000000..e85c8ab3 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_en_US.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_en_US.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_en_US.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_ja_JP.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_ja_JP.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_CN.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_CN.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_HK.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..c6a3a0e0 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_HK.properties @@ -0,0 +1,9 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF.errorcode.missing_required_value=您缺失了必須填寫的參數值. +errorcode.invalid_config_value=您的參數配寘錯誤. +errorcode.get_topic_info_fail=獲取shard清單失敗. +errorcode.write_datahub_fail=寫數據失敗. +errorcode.schema_not_match=數據格式錯誤. diff --git a/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_TW.properties b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..c6a3a0e0 --- /dev/null +++ b/datahubreader/src/main/java/com/alibaba/datax/plugin/reader/datahubreader/LocalStrings_zh_TW.properties @@ -0,0 +1,9 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF.errorcode.missing_required_value=您缺失了必須填寫的參數值. +errorcode.invalid_config_value=您的參數配寘錯誤. +errorcode.get_topic_info_fail=獲取shard清單失敗. +errorcode.write_datahub_fail=寫數據失敗. +errorcode.schema_not_match=數據格式錯誤. diff --git a/datahubreader/src/main/resources/job_config_template.json b/datahubreader/src/main/resources/job_config_template.json new file mode 100644 index 00000000..eaf89804 --- /dev/null +++ b/datahubreader/src/main/resources/job_config_template.json @@ -0,0 +1,14 @@ +{ + "name": "datahubreader", + "parameter": { + "endpoint":"", + "accessId": "", + "accessKey": "", + "project": "", + "topic": "", + "beginDateTime": "20180913121019", + "endDateTime": "20180913121119", + "batchSize": 1024, + "column": [] + } +} \ No newline at end of file diff --git a/datahubreader/src/main/resources/plugin.json b/datahubreader/src/main/resources/plugin.json new file mode 100644 index 00000000..47b1c86b --- /dev/null +++ b/datahubreader/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "datahubreader", + "class": "com.alibaba.datax.plugin.reader.datahubreader.DatahubReader", + "description": "datahub reader", + "developer": "alibaba" +} \ No newline at end of file diff --git a/datahubwriter/pom.xml b/datahubwriter/pom.xml new file mode 100644 index 00000000..1ee1fe9b --- /dev/null +++ b/datahubwriter/pom.xml @@ -0,0 +1,79 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + datahubwriter + + 0.0.1-SNAPSHOT + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + com.aliyun.datahub + aliyun-sdk-datahub + 2.21.6-public + + + junit + junit + 4.12 + test + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/datahubwriter/src/main/assembly/package.xml b/datahubwriter/src/main/assembly/package.xml new file mode 100644 index 00000000..aaef9f99 --- /dev/null +++ b/datahubwriter/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + + plugin/writer/datahubwriter + + + target/ + + datahubwriter-0.0.1-SNAPSHOT.jar + + plugin/writer/datahubwriter + + + + + + false + plugin/writer/datahubwriter/libs + runtime + + + diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubClientHelper.java b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubClientHelper.java new file mode 100644 index 00000000..2d94212c --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubClientHelper.java @@ -0,0 +1,43 @@ +package com.alibaba.datax.plugin.writer.datahubwriter; + +import org.apache.commons.lang3.StringUtils; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.aliyun.datahub.client.DatahubClient; +import com.aliyun.datahub.client.DatahubClientBuilder; +import com.aliyun.datahub.client.auth.Account; +import com.aliyun.datahub.client.auth.AliyunAccount; +import com.aliyun.datahub.client.common.DatahubConfig; +import com.aliyun.datahub.client.http.HttpConfig; + +public class DatahubClientHelper { + public static DatahubClient getDatahubClient(Configuration jobConfig) { + String accessId = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_ID, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + String accessKey = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_KEY, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + String endpoint = jobConfig.getNecessaryValue(Key.CONFIG_KEY_ENDPOINT, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + Account account = new AliyunAccount(accessId, accessKey); + // 是否开启二进制传输,服务端2.12版本开始支持 + boolean enableBinary = jobConfig.getBool("enableBinary", false); + DatahubConfig datahubConfig = new DatahubConfig(endpoint, account, enableBinary); + // HttpConfig可不设置,不设置时采用默认值 + // 读写数据推荐打开网络传输 LZ4压缩 + HttpConfig httpConfig = null; + String httpConfigStr = jobConfig.getString("httpConfig"); + if (StringUtils.isNotBlank(httpConfigStr)) { + httpConfig = JSON.parseObject(httpConfigStr, new TypeReference() { + }); + } + + DatahubClientBuilder builder = DatahubClientBuilder.newBuilder().setDatahubConfig(datahubConfig); + if (null != httpConfig) { + builder.setHttpConfig(httpConfig); + } + DatahubClient datahubClient = builder.build(); + return datahubClient; + } +} diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriter.java b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriter.java new file mode 100644 index 00000000..f6dc1105 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriter.java @@ -0,0 +1,355 @@ +package com.alibaba.datax.plugin.writer.datahubwriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.DataXCaseEnvUtil; +import com.alibaba.datax.common.util.RetryUtil; +import com.alibaba.fastjson.JSON; +import com.aliyun.datahub.client.DatahubClient; +import com.aliyun.datahub.client.model.FieldType; +import com.aliyun.datahub.client.model.GetTopicResult; +import com.aliyun.datahub.client.model.ListShardResult; +import com.aliyun.datahub.client.model.PutErrorEntry; +import com.aliyun.datahub.client.model.PutRecordsResult; +import com.aliyun.datahub.client.model.RecordEntry; +import com.aliyun.datahub.client.model.RecordSchema; +import com.aliyun.datahub.client.model.RecordType; +import com.aliyun.datahub.client.model.ShardEntry; +import com.aliyun.datahub.client.model.ShardState; +import com.aliyun.datahub.client.model.TupleRecordData; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import java.util.concurrent.Callable; + +public class DatahubWriter extends Writer { + + /** + * Job 中的方法仅执行一次,Task 中方法会由框架启动多个 Task 线程并行执行。 + *

+ * 整个 Writer 执行流程是: + *

+     * Job类init-->prepare-->split
+     *
+     *                          Task类init-->prepare-->startWrite-->post-->destroy
+     *                          Task类init-->prepare-->startWrite-->post-->destroy
+     *
+     *                                                                            Job类post-->destroy
+     * 
+ */ + public static class Job extends Writer.Job { + private static final Logger LOG = LoggerFactory + .getLogger(Job.class); + + private Configuration jobConfig = null; + + @Override + public void init() { + this.jobConfig = super.getPluginJobConf(); + jobConfig.getNecessaryValue(Key.CONFIG_KEY_ENDPOINT, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_ID, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + jobConfig.getNecessaryValue(Key.CONFIG_KEY_ACCESS_KEY, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + jobConfig.getNecessaryValue(Key.CONFIG_KEY_PROJECT, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + jobConfig.getNecessaryValue(Key.CONFIG_KEY_TOPIC, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + } + + @Override + public void prepare() { + String project = jobConfig.getNecessaryValue(Key.CONFIG_KEY_PROJECT, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + String topic = jobConfig.getNecessaryValue(Key.CONFIG_KEY_TOPIC, + DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + RecordType recordType = null; + DatahubClient client = DatahubClientHelper.getDatahubClient(this.jobConfig); + try { + GetTopicResult getTopicResult = client.getTopic(project, topic); + recordType = getTopicResult.getRecordType(); + } catch (Exception e) { + LOG.warn("get topic type error: {}", e.getMessage()); + } + if (null != recordType) { + if (recordType == RecordType.BLOB) { + throw DataXException.asDataXException(DatahubWriterErrorCode.WRITE_DATAHUB_FAIL, + "DatahubWriter only support 'Tuple' RecordType now, but your RecordType is 'BLOB'"); + } + } + } + + @Override + public List split(int mandatoryNumber) { + List configs = new ArrayList(); + for (int i = 0; i < mandatoryNumber; ++i) { + configs.add(jobConfig.clone()); + } + return configs; + } + + @Override + public void post() {} + + @Override + public void destroy() {} + + } + + public static class Task extends Writer.Task { + private static final Logger LOG = LoggerFactory + .getLogger(Task.class); + private static final List FATAL_ERRORS_DEFAULT = Arrays.asList( + "InvalidParameterM", + "MalformedRecord", + "INVALID_SHARDID", + "NoSuchTopic", + "NoSuchShard" + ); + + private Configuration taskConfig; + private DatahubClient client; + private String project; + private String topic; + private List shards; + private int maxCommitSize; + private int maxRetryCount; + private RecordSchema schema; + private long retryInterval; + private Random random; + private List column; + private List columnIndex; + private boolean enableColumnConfig; + private List fatalErrors; + + @Override + public void init() { + this.taskConfig = super.getPluginJobConf(); + project = taskConfig.getNecessaryValue(Key.CONFIG_KEY_PROJECT, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + topic = taskConfig.getNecessaryValue(Key.CONFIG_KEY_TOPIC, DatahubWriterErrorCode.MISSING_REQUIRED_VALUE); + maxCommitSize = taskConfig.getInt(Key.CONFIG_KEY_MAX_COMMIT_SIZE, 1024*1024); + maxRetryCount = taskConfig.getInt(Key.CONFIG_KEY_MAX_RETRY_COUNT, 500); + this.retryInterval = taskConfig.getInt(Key.RETRY_INTERVAL, 650); + this.random = new Random(); + this.column = this.taskConfig.getList(Key.CONFIG_KEY_COLUMN, String.class); + // ["*"] + if (null != this.column && 1 == this.column.size()) { + if (StringUtils.equals("*", this.column.get(0))) { + this.column = null; + } + } + this.columnIndex = new ArrayList(); + // 留个开关保平安 + this.enableColumnConfig = this.taskConfig.getBool("enableColumnConfig", true); + this.fatalErrors = this.taskConfig.getList("fatalErrors", Task.FATAL_ERRORS_DEFAULT, String.class); + this.client = DatahubClientHelper.getDatahubClient(this.taskConfig); + } + + @Override + public void prepare() { + final String shardIdConfig = this.taskConfig.getString(Key.CONFIG_KEY_SHARD_ID); + this.shards = new ArrayList(); + try { + RetryUtil.executeWithRetry(new Callable() { + @Override + public Void call() throws Exception { + ListShardResult result = client.listShard(project, topic); + if (StringUtils.isNotBlank(shardIdConfig)) { + shards.add(shardIdConfig); + } else { + for (ShardEntry shard : result.getShards()) { + if (shard.getState() == ShardState.ACTIVE || shard.getState() == ShardState.OPENING) { + shards.add(shard.getShardId()); + } + } + } + schema = client.getTopic(project, topic).getRecordSchema(); + return null; + } + }, DataXCaseEnvUtil.getRetryTimes(5), DataXCaseEnvUtil.getRetryInterval(10000L), DataXCaseEnvUtil.getRetryExponential(false)); + } catch (Exception e) { + throw DataXException.asDataXException(DatahubWriterErrorCode.GET_TOPOIC_INFO_FAIL, + "get topic info failed", e); + } + LOG.info("datahub topic {} shard to write: {}", this.topic, JSON.toJSONString(this.shards)); + LOG.info("datahub topic {} has schema: {}", this.topic, JSON.toJSONString(this.schema)); + + // 根据 schmea 顺序 和用户配置的 column,计算写datahub的顺序关系,以支持列换序 + // 后续统一使用 columnIndex 的顺位关系写 datahub + int totalSize = this.schema.getFields().size(); + if (null != this.column && !this.column.isEmpty() && this.enableColumnConfig) { + for (String eachCol : this.column) { + int indexFound = -1; + for (int i = 0; i < totalSize; i++) { + // warn: 大小写ignore + if (StringUtils.equalsIgnoreCase(eachCol, this.schema.getField(i).getName())) { + indexFound = i; + break; + } + } + if (indexFound >= 0) { + this.columnIndex.add(indexFound); + } else { + throw DataXException.asDataXException(DatahubWriterErrorCode.SCHEMA_NOT_MATCH, + String.format("can not find column %s in datahub topic %s", eachCol, this.topic)); + } + } + } else { + for (int i = 0; i < totalSize; i++) { + this.columnIndex.add(i); + } + } + } + + @Override + public void startWrite(RecordReceiver recordReceiver) { + Record record; + List records = new ArrayList(); + String shardId = null; + if (1 == this.shards.size()) { + shardId = shards.get(0); + } else { + shardId = shards.get(this.random.nextInt(shards.size())); + } + int commitSize = 0; + try { + while ((record = recordReceiver.getFromReader()) != null) { + RecordEntry dhRecord = convertRecord(record, shardId); + if (dhRecord != null) { + records.add(dhRecord); + } + commitSize += record.getByteSize(); + if (commitSize >= maxCommitSize) { + commit(records); + records.clear(); + commitSize = 0; + if (1 == this.shards.size()) { + shardId = shards.get(0); + } else { + shardId = shards.get(this.random.nextInt(shards.size())); + } + } + } + if (commitSize > 0) { + commit(records); + } + } catch (Exception e) { + throw DataXException.asDataXException( + DatahubWriterErrorCode.WRITE_DATAHUB_FAIL, e); + } + } + + @Override + public void post() {} + + @Override + public void destroy() {} + + private void commit(List records) throws InterruptedException { + PutRecordsResult result = client.putRecords(project, topic, records); + if (result.getFailedRecordCount() > 0) { + for (int i = 0; i < maxRetryCount; ++i) { + boolean limitExceededMessagePrinted = false; + for (PutErrorEntry error : result.getPutErrorEntries()) { + // 如果是 LimitExceeded 这样打印日志,不能每行记录打印一次了 + if (StringUtils.equalsIgnoreCase("LimitExceeded", error.getErrorcode())) { + if (!limitExceededMessagePrinted) { + LOG.warn("write record error, request id: {}, error code: {}, error message: {}", + result.getRequestId(), error.getErrorcode(), error.getMessage()); + limitExceededMessagePrinted = true; + } + } else { + LOG.error("write record error, request id: {}, error code: {}, error message: {}", + result.getRequestId(), error.getErrorcode(), error.getMessage()); + } + if (this.fatalErrors.contains(error.getErrorcode())) { + throw DataXException.asDataXException( + DatahubWriterErrorCode.WRITE_DATAHUB_FAIL, + error.getMessage()); + } + } + + if (this.retryInterval >= 0) { + Thread.sleep(this.retryInterval); + } else { + Thread.sleep(new Random().nextInt(700) + 300); + } + + result = client.putRecords(project, topic, result.getFailedRecords()); + if (result.getFailedRecordCount() == 0) { + return; + } + } + throw DataXException.asDataXException( + DatahubWriterErrorCode.WRITE_DATAHUB_FAIL, + "write datahub failed"); + } + } + + private RecordEntry convertRecord(Record dxRecord, String shardId) { + try { + RecordEntry dhRecord = new RecordEntry(); + dhRecord.setShardId(shardId); + TupleRecordData data = new TupleRecordData(this.schema); + for (int i = 0; i < this.columnIndex.size(); ++i) { + int orderInSchema = this.columnIndex.get(i); + FieldType type = this.schema.getField(orderInSchema).getType(); + Column column = dxRecord.getColumn(i); + switch (type) { + case BIGINT: + data.setField(orderInSchema, column.asLong()); + break; + case DOUBLE: + data.setField(orderInSchema, column.asDouble()); + break; + case STRING: + data.setField(orderInSchema, column.asString()); + break; + case BOOLEAN: + data.setField(orderInSchema, column.asBoolean()); + break; + case TIMESTAMP: + if (null == column.asDate()) { + data.setField(orderInSchema, null); + } else { + data.setField(orderInSchema, column.asDate().getTime() * 1000); + } + break; + case DECIMAL: + // warn + data.setField(orderInSchema, column.asBigDecimal()); + break; + case INTEGER: + data.setField(orderInSchema, column.asLong()); + break; + case FLOAT: + data.setField(orderInSchema, column.asDouble()); + break; + case TINYINT: + data.setField(orderInSchema, column.asLong()); + break; + case SMALLINT: + data.setField(orderInSchema, column.asLong()); + break; + default: + throw DataXException.asDataXException( + DatahubWriterErrorCode.SCHEMA_NOT_MATCH, + String.format("does not support type: %s", type)); + } + } + dhRecord.setRecordData(data); + return dhRecord; + } catch (Exception e) { + super.getTaskPluginCollector().collectDirtyRecord(dxRecord, e, "convert recor failed"); + } + return null; + } + } + +} \ No newline at end of file diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriterErrorCode.java b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriterErrorCode.java new file mode 100644 index 00000000..ad03abd1 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/DatahubWriterErrorCode.java @@ -0,0 +1,37 @@ +package com.alibaba.datax.plugin.writer.datahubwriter; + +import com.alibaba.datax.common.spi.ErrorCode; +import com.alibaba.datax.common.util.MessageSource; + +public enum DatahubWriterErrorCode implements ErrorCode { + MISSING_REQUIRED_VALUE("DatahubWriter-01", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.missing_required_value")), + INVALID_CONFIG_VALUE("DatahubWriter-02", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.invalid_config_value")), + GET_TOPOIC_INFO_FAIL("DatahubWriter-03", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.get_topic_info_fail")), + WRITE_DATAHUB_FAIL("DatahubWriter-04", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.write_datahub_fail")), + SCHEMA_NOT_MATCH("DatahubWriter-05", MessageSource.loadResourceBundle(DatahubWriterErrorCode.class).message("errorcode.schema_not_match")), + ; + + private final String code; + private final String description; + + private DatahubWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} \ No newline at end of file diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/Key.java b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/Key.java new file mode 100644 index 00000000..5f179234 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/Key.java @@ -0,0 +1,26 @@ +package com.alibaba.datax.plugin.writer.datahubwriter; + +public final class Key { + + /** + * 此处声明插件用到的需要插件使用者提供的配置项 + */ + public static final String CONFIG_KEY_ENDPOINT = "endpoint"; + public static final String CONFIG_KEY_ACCESS_ID = "accessId"; + public static final String CONFIG_KEY_ACCESS_KEY = "accessKey"; + public static final String CONFIG_KEY_PROJECT = "project"; + public static final String CONFIG_KEY_TOPIC = "topic"; + public static final String CONFIG_KEY_WRITE_MODE = "mode"; + public static final String CONFIG_KEY_SHARD_ID = "shardId"; + public static final String CONFIG_KEY_MAX_COMMIT_SIZE = "maxCommitSize"; + public static final String CONFIG_KEY_MAX_RETRY_COUNT = "maxRetryCount"; + + public static final String CONFIG_VALUE_SEQUENCE_MODE = "sequence"; + public static final String CONFIG_VALUE_RANDOM_MODE = "random"; + + public final static String MAX_RETRY_TIME = "maxRetryTime"; + + public final static String RETRY_INTERVAL = "retryInterval"; + + public final static String CONFIG_KEY_COLUMN = "column"; +} diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings.properties new file mode 100644 index 00000000..e85c8ab3 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_en_US.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_en_US.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_en_US.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_ja_JP.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_ja_JP.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_ja_JP.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_CN.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_CN.properties new file mode 100644 index 00000000..31a291e6 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_CN.properties @@ -0,0 +1,5 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF. \ No newline at end of file diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_HK.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_HK.properties new file mode 100644 index 00000000..c6a3a0e0 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_HK.properties @@ -0,0 +1,9 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF.errorcode.missing_required_value=您缺失了必須填寫的參數值. +errorcode.invalid_config_value=您的參數配寘錯誤. +errorcode.get_topic_info_fail=獲取shard清單失敗. +errorcode.write_datahub_fail=寫數據失敗. +errorcode.schema_not_match=數據格式錯誤. diff --git a/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_TW.properties b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_TW.properties new file mode 100644 index 00000000..c6a3a0e0 --- /dev/null +++ b/datahubwriter/src/main/java/com/alibaba/datax/plugin/writer/datahubwriter/LocalStrings_zh_TW.properties @@ -0,0 +1,9 @@ +errorcode.missing_required_value=\u60A8\u7F3A\u5931\u4E86\u5FC5\u987B\u586B\u5199\u7684\u53C2\u6570\u503C. +errorcode.invalid_config_value=\u60A8\u7684\u53C2\u6570\u914D\u7F6E\u9519\u8BEF. +errorcode.get_topic_info_fail=\u83B7\u53D6shard\u5217\u8868\u5931\u8D25. +errorcode.write_datahub_fail=\u5199\u6570\u636E\u5931\u8D25. +errorcode.schema_not_match=\u6570\u636E\u683C\u5F0F\u9519\u8BEF.errorcode.missing_required_value=您缺失了必須填寫的參數值. +errorcode.invalid_config_value=您的參數配寘錯誤. +errorcode.get_topic_info_fail=獲取shard清單失敗. +errorcode.write_datahub_fail=寫數據失敗. +errorcode.schema_not_match=數據格式錯誤. diff --git a/datahubwriter/src/main/resources/job_config_template.json b/datahubwriter/src/main/resources/job_config_template.json new file mode 100644 index 00000000..8b0b41ae --- /dev/null +++ b/datahubwriter/src/main/resources/job_config_template.json @@ -0,0 +1,14 @@ +{ + "name": "datahubwriter", + "parameter": { + "endpoint":"", + "accessId": "", + "accessKey": "", + "project": "", + "topic": "", + "mode": "random", + "shardId": "", + "maxCommitSize": 524288, + "maxRetryCount": 500 + } +} \ No newline at end of file diff --git a/datahubwriter/src/main/resources/plugin.json b/datahubwriter/src/main/resources/plugin.json new file mode 100644 index 00000000..91c17292 --- /dev/null +++ b/datahubwriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "datahubwriter", + "class": "com.alibaba.datax.plugin.writer.datahubwriter.DatahubWriter", + "description": "datahub writer", + "developer": "alibaba" +} \ No newline at end of file diff --git a/elasticsearchwriter/pom.xml b/elasticsearchwriter/pom.xml index a60dbd88..8699c6e5 100644 --- a/elasticsearchwriter/pom.xml +++ b/elasticsearchwriter/pom.xml @@ -35,12 +35,12 @@ io.searchbox jest-common - 2.4.0 + 6.3.1 io.searchbox jest - 2.4.0 + 6.3.1 joda-time diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESClient.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESClient.java deleted file mode 100644 index 34bb7e54..00000000 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESClient.java +++ /dev/null @@ -1,236 +0,0 @@ -package com.alibaba.datax.plugin.writer.elasticsearchwriter; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import io.searchbox.action.Action; -import io.searchbox.client.JestClient; -import io.searchbox.client.JestClientFactory; -import io.searchbox.client.JestResult; -import io.searchbox.client.config.HttpClientConfig; -import io.searchbox.client.config.HttpClientConfig.Builder; -import io.searchbox.core.Bulk; -import io.searchbox.indices.CreateIndex; -import io.searchbox.indices.DeleteIndex; -import io.searchbox.indices.IndicesExists; -import io.searchbox.indices.aliases.*; -import io.searchbox.indices.mapping.PutMapping; -import org.apache.http.HttpHost; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -/** - * Created by xiongfeng.bxf on 17/2/8. - */ -public class ESClient { - private static final Logger log = LoggerFactory.getLogger(ESClient.class); - - private JestClient jestClient; - - public JestClient getClient() { - return jestClient; - } - - public void createClient(String endpoint, - String user, - String passwd, - boolean multiThread, - int readTimeout, - boolean compression, - boolean discovery) { - - JestClientFactory factory = new JestClientFactory(); - Builder httpClientConfig = new HttpClientConfig - .Builder(endpoint) - .setPreemptiveAuth(new HttpHost(endpoint)) - .multiThreaded(multiThread) - .connTimeout(30000) - .readTimeout(readTimeout) - .maxTotalConnection(200) - .requestCompressionEnabled(compression) - .discoveryEnabled(discovery) - .discoveryFrequency(5l, TimeUnit.MINUTES); - - if (!("".equals(user) || "".equals(passwd))) { - httpClientConfig.defaultCredentials(user, passwd); - } - - factory.setHttpClientConfig(httpClientConfig.build()); - - jestClient = factory.getObject(); - } - - public boolean indicesExists(String indexName) throws Exception { - boolean isIndicesExists = false; - JestResult rst = jestClient.execute(new IndicesExists.Builder(indexName).build()); - if (rst.isSucceeded()) { - isIndicesExists = true; - } else { - switch (rst.getResponseCode()) { - case 404: - isIndicesExists = false; - break; - case 401: - // 无权访问 - default: - log.warn(rst.getErrorMessage()); - break; - } - } - return isIndicesExists; - } - - public boolean deleteIndex(String indexName) throws Exception { - log.info("delete index " + indexName); - if (indicesExists(indexName)) { - JestResult rst = execute(new DeleteIndex.Builder(indexName).build()); - if (!rst.isSucceeded()) { - return false; - } - } else { - log.info("index cannot found, skip delete " + indexName); - } - return true; - } - - public boolean createIndex(String indexName, String typeName, - Object mappings, String settings, boolean dynamic) throws Exception { - JestResult rst = null; - if (!indicesExists(indexName)) { - log.info("create index " + indexName); - rst = jestClient.execute( - new CreateIndex.Builder(indexName) - .settings(settings) - .setParameter("master_timeout", "5m") - .build() - ); - //index_already_exists_exception - if (!rst.isSucceeded()) { - if (getStatus(rst) == 400) { - log.info(String.format("index [%s] already exists", indexName)); - return true; - } else { - log.error(rst.getErrorMessage()); - return false; - } - } else { - log.info(String.format("create [%s] index success", indexName)); - } - } - - int idx = 0; - while (idx < 5) { - if (indicesExists(indexName)) { - break; - } - Thread.sleep(2000); - idx ++; - } - if (idx >= 5) { - return false; - } - - if (dynamic) { - log.info("ignore mappings"); - return true; - } - log.info("create mappings for " + indexName + " " + mappings); - rst = jestClient.execute(new PutMapping.Builder(indexName, typeName, mappings) - .setParameter("master_timeout", "5m").build()); - if (!rst.isSucceeded()) { - if (getStatus(rst) == 400) { - log.info(String.format("index [%s] mappings already exists", indexName)); - } else { - log.error(rst.getErrorMessage()); - return false; - } - } else { - log.info(String.format("index [%s] put mappings success", indexName)); - } - return true; - } - - public JestResult execute(Action clientRequest) throws Exception { - JestResult rst = null; - rst = jestClient.execute(clientRequest); - if (!rst.isSucceeded()) { - //log.warn(rst.getErrorMessage()); - } - return rst; - } - - public Integer getStatus(JestResult rst) { - JsonObject jsonObject = rst.getJsonObject(); - if (jsonObject.has("status")) { - return jsonObject.get("status").getAsInt(); - } - return 600; - } - - public boolean isBulkResult(JestResult rst) { - JsonObject jsonObject = rst.getJsonObject(); - return jsonObject.has("items"); - } - - - public boolean alias(String indexname, String aliasname, boolean needClean) throws IOException { - GetAliases getAliases = new GetAliases.Builder().addIndex(aliasname).build(); - AliasMapping addAliasMapping = new AddAliasMapping.Builder(indexname, aliasname).build(); - JestResult rst = jestClient.execute(getAliases); - log.info(rst.getJsonString()); - List list = new ArrayList(); - if (rst.isSucceeded()) { - JsonParser jp = new JsonParser(); - JsonObject jo = (JsonObject)jp.parse(rst.getJsonString()); - for(Map.Entry entry : jo.entrySet()){ - String tindex = entry.getKey(); - if (indexname.equals(tindex)) { - continue; - } - AliasMapping m = new RemoveAliasMapping.Builder(tindex, aliasname).build(); - String s = new Gson().toJson(m.getData()); - log.info(s); - if (needClean) { - list.add(m); - } - } - } - - ModifyAliases modifyAliases = new ModifyAliases.Builder(addAliasMapping).addAlias(list).setParameter("master_timeout", "5m").build(); - rst = jestClient.execute(modifyAliases); - if (!rst.isSucceeded()) { - log.error(rst.getErrorMessage()); - return false; - } - return true; - } - - public JestResult bulkInsert(Bulk.Builder bulk, int trySize) throws Exception { - // es_rejected_execution_exception - // illegal_argument_exception - // cluster_block_exception - JestResult rst = null; - rst = jestClient.execute(bulk.build()); - if (!rst.isSucceeded()) { - log.warn(rst.getErrorMessage()); - } - return rst; - } - - /** - * 关闭JestClient客户端 - * - */ - public void closeJestClient() { - if (jestClient != null) { - jestClient.shutdownClient(); - } - } -} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESColumn.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESColumn.java deleted file mode 100644 index 8990d77c..00000000 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESColumn.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.alibaba.datax.plugin.writer.elasticsearchwriter; - -/** - * Created by xiongfeng.bxf on 17/3/2. - */ -public class ESColumn { - - private String name;//: "appkey", - - private String type;//": "TEXT", - - private String timezone; - - private String format; - - private Boolean array; - - public void setName(String name) { - this.name = name; - } - - public void setType(String type) { - this.type = type; - } - - public void setTimeZone(String timezone) { - this.timezone = timezone; - } - - public void setFormat(String format) { - this.format = format; - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } - - public String getTimezone() { - return timezone; - } - - public String getFormat() { - return format; - } - - public void setTimezone(String timezone) { - this.timezone = timezone; - } - - public Boolean isArray() { - return array; - } - - public void setArray(Boolean array) { - this.array = array; - } - - public Boolean getArray() { - return array; - } -} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriter.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriter.java deleted file mode 100644 index eb0e9a81..00000000 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriter.java +++ /dev/null @@ -1,460 +0,0 @@ -package com.alibaba.datax.plugin.writer.elasticsearchwriter; - -import com.alibaba.datax.common.element.Column; -import com.alibaba.datax.common.element.Record; -import com.alibaba.datax.common.exception.DataXException; -import com.alibaba.datax.common.plugin.RecordReceiver; -import com.alibaba.datax.common.spi.Writer; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.common.util.RetryUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; -import io.searchbox.client.JestResult; -import io.searchbox.core.Bulk; -import io.searchbox.core.BulkResult; -import io.searchbox.core.Index; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.URLEncoder; -import java.util.*; -import java.util.concurrent.Callable; - -public class ESWriter extends Writer { - private final static String WRITE_COLUMNS = "write_columns"; - - public static class Job extends Writer.Job { - private static final Logger log = LoggerFactory.getLogger(Job.class); - - private Configuration conf = null; - - @Override - public void init() { - this.conf = super.getPluginJobConf(); - } - - @Override - public void prepare() { - /** - * 注意:此方法仅执行一次。 - * 最佳实践:如果 Job 中有需要进行数据同步之前的处理,可以在此处完成,如果没有必要则可以直接去掉。 - */ - ESClient esClient = new ESClient(); - esClient.createClient(Key.getEndpoint(conf), - Key.getAccessID(conf), - Key.getAccessKey(conf), - false, - 300000, - false, - false); - - String indexName = Key.getIndexName(conf); - String typeName = Key.getTypeName(conf); - boolean dynamic = Key.getDynamic(conf); - String mappings = genMappings(typeName); - String settings = JSONObject.toJSONString( - Key.getSettings(conf) - ); - log.info(String.format("index:[%s], type:[%s], mappings:[%s]", indexName, typeName, mappings)); - - try { - boolean isIndicesExists = esClient.indicesExists(indexName); - if (Key.isCleanup(this.conf) && isIndicesExists) { - esClient.deleteIndex(indexName); - } - // 强制创建,内部自动忽略已存在的情况 - if (!esClient.createIndex(indexName, typeName, mappings, settings, dynamic)) { - throw new IOException("create index or mapping failed"); - } - } catch (Exception ex) { - throw DataXException.asDataXException(ESWriterErrorCode.ES_MAPPINGS, ex.toString()); - } - esClient.closeJestClient(); - } - - private String genMappings(String typeName) { - String mappings = null; - Map propMap = new HashMap(); - List columnList = new ArrayList(); - - List column = conf.getList("column"); - if (column != null) { - for (Object col : column) { - JSONObject jo = JSONObject.parseObject(col.toString()); - String colName = jo.getString("name"); - String colTypeStr = jo.getString("type"); - if (colTypeStr == null) { - throw DataXException.asDataXException(ESWriterErrorCode.BAD_CONFIG_VALUE, col.toString() + " column must have type"); - } - ESFieldType colType = ESFieldType.getESFieldType(colTypeStr); - if (colType == null) { - throw DataXException.asDataXException(ESWriterErrorCode.BAD_CONFIG_VALUE, col.toString() + " unsupported type"); - } - - ESColumn columnItem = new ESColumn(); - - if (colName.equals(Key.PRIMARY_KEY_COLUMN_NAME)) { - // 兼容已有版本 - colType = ESFieldType.ID; - colTypeStr = "id"; - } - - columnItem.setName(colName); - columnItem.setType(colTypeStr); - - if (colType == ESFieldType.ID) { - columnList.add(columnItem); - // 如果是id,则properties为空 - continue; - } - - Boolean array = jo.getBoolean("array"); - if (array != null) { - columnItem.setArray(array); - } - Map field = new HashMap(); - field.put("type", colTypeStr); - //https://www.elastic.co/guide/en/elasticsearch/reference/5.2/breaking_50_mapping_changes.html#_literal_index_literal_property - // https://www.elastic.co/guide/en/elasticsearch/guide/2.x/_deep_dive_on_doc_values.html#_disabling_doc_values - field.put("doc_values", jo.getBoolean("doc_values")); - field.put("ignore_above", jo.getInteger("ignore_above")); - field.put("index", jo.getBoolean("index")); - - switch (colType) { - case STRING: - // 兼容string类型,ES5之前版本 - break; - case KEYWORD: - // https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-search-speed.html#_warm_up_global_ordinals - field.put("eager_global_ordinals", jo.getBoolean("eager_global_ordinals")); - case TEXT: - field.put("analyzer", jo.getString("analyzer")); - // 优化disk使用,也同步会提高index性能 - // https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-disk-usage.html - field.put("norms", jo.getBoolean("norms")); - field.put("index_options", jo.getBoolean("index_options")); - break; - case DATE: - columnItem.setTimeZone(jo.getString("timezone")); - columnItem.setFormat(jo.getString("format")); - // 后面时间会处理为带时区的标准时间,所以不需要给ES指定格式 - /* - if (jo.getString("format") != null) { - field.put("format", jo.getString("format")); - } else { - //field.put("format", "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"); - } - */ - break; - case GEO_SHAPE: - field.put("tree", jo.getString("tree")); - field.put("precision", jo.getString("precision")); - default: - break; - } - propMap.put(colName, field); - columnList.add(columnItem); - } - } - - conf.set(WRITE_COLUMNS, JSON.toJSONString(columnList)); - - log.info(JSON.toJSONString(columnList)); - - Map rootMappings = new HashMap(); - Map typeMappings = new HashMap(); - typeMappings.put("properties", propMap); - rootMappings.put(typeName, typeMappings); - - mappings = JSON.toJSONString(rootMappings); - - if (mappings == null || "".equals(mappings)) { - throw DataXException.asDataXException(ESWriterErrorCode.BAD_CONFIG_VALUE, "must have mappings"); - } - - return mappings; - } - - @Override - public List split(int mandatoryNumber) { - List configurations = new ArrayList(mandatoryNumber); - for (int i = 0; i < mandatoryNumber; i++) { - configurations.add(conf); - } - return configurations; - } - - @Override - public void post() { - ESClient esClient = new ESClient(); - esClient.createClient(Key.getEndpoint(conf), - Key.getAccessID(conf), - Key.getAccessKey(conf), - false, - 300000, - false, - false); - String alias = Key.getAlias(conf); - if (!"".equals(alias)) { - log.info(String.format("alias [%s] to [%s]", alias, Key.getIndexName(conf))); - try { - esClient.alias(Key.getIndexName(conf), alias, Key.isNeedCleanAlias(conf)); - } catch (IOException e) { - throw DataXException.asDataXException(ESWriterErrorCode.ES_ALIAS_MODIFY, e); - } - } - } - - @Override - public void destroy() { - - } - } - - public static class Task extends Writer.Task { - - private static final Logger log = LoggerFactory.getLogger(Job.class); - - private Configuration conf; - - - ESClient esClient = null; - private List typeList; - private List columnList; - - private int trySize; - private int batchSize; - private String index; - private String type; - private String splitter; - - @Override - public void init() { - this.conf = super.getPluginJobConf(); - index = Key.getIndexName(conf); - type = Key.getTypeName(conf); - - trySize = Key.getTrySize(conf); - batchSize = Key.getBatchSize(conf); - splitter = Key.getSplitter(conf); - columnList = JSON.parseObject(this.conf.getString(WRITE_COLUMNS), new TypeReference>() { - }); - - typeList = new ArrayList(); - - for (ESColumn col : columnList) { - typeList.add(ESFieldType.getESFieldType(col.getType())); - } - - esClient = new ESClient(); - } - - @Override - public void prepare() { - esClient.createClient(Key.getEndpoint(conf), - Key.getAccessID(conf), - Key.getAccessKey(conf), - Key.isMultiThread(conf), - Key.getTimeout(conf), - Key.isCompression(conf), - Key.isDiscovery(conf)); - } - - @Override - public void startWrite(RecordReceiver recordReceiver) { - List writerBuffer = new ArrayList(this.batchSize); - Record record = null; - long total = 0; - while ((record = recordReceiver.getFromReader()) != null) { - writerBuffer.add(record); - if (writerBuffer.size() >= this.batchSize) { - total += doBatchInsert(writerBuffer); - writerBuffer.clear(); - } - } - - if (!writerBuffer.isEmpty()) { - total += doBatchInsert(writerBuffer); - writerBuffer.clear(); - } - - String msg = String.format("task end, write size :%d", total); - getTaskPluginCollector().collectMessage("writesize", String.valueOf(total)); - log.info(msg); - esClient.closeJestClient(); - } - - private String getDateStr(ESColumn esColumn, Column column) { - DateTime date = null; - DateTimeZone dtz = DateTimeZone.getDefault(); - if (esColumn.getTimezone() != null) { - // 所有时区参考 http://www.joda.org/joda-time/timezones.html - dtz = DateTimeZone.forID(esColumn.getTimezone()); - } - if (column.getType() != Column.Type.DATE && esColumn.getFormat() != null) { - DateTimeFormatter formatter = DateTimeFormat.forPattern(esColumn.getFormat()); - date = formatter.withZone(dtz).parseDateTime(column.asString()); - return date.toString(); - } else if (column.getType() == Column.Type.DATE) { - date = new DateTime(column.asLong(), dtz); - return date.toString(); - } else { - return column.asString(); - } - } - - private long doBatchInsert(final List writerBuffer) { - Map data = null; - final Bulk.Builder bulkaction = new Bulk.Builder().defaultIndex(this.index).defaultType(this.type); - for (Record record : writerBuffer) { - data = new HashMap(); - String id = null; - for (int i = 0; i < record.getColumnNumber(); i++) { - Column column = record.getColumn(i); - String columnName = columnList.get(i).getName(); - ESFieldType columnType = typeList.get(i); - //如果是数组类型,那它传入的必是字符串类型 - if (columnList.get(i).isArray() != null && columnList.get(i).isArray()) { - String[] dataList = column.asString().split(splitter); - if (!columnType.equals(ESFieldType.DATE)) { - data.put(columnName, dataList); - } else { - for (int pos = 0; pos < dataList.length; pos++) { - dataList[pos] = getDateStr(columnList.get(i), column); - } - data.put(columnName, dataList); - } - } else { - switch (columnType) { - case ID: - if (id != null) { - id += record.getColumn(i).asString(); - } else { - id = record.getColumn(i).asString(); - } - break; - case DATE: - try { - String dateStr = getDateStr(columnList.get(i), column); - data.put(columnName, dateStr); - } catch (Exception e) { - getTaskPluginCollector().collectDirtyRecord(record, String.format("时间类型解析失败 [%s:%s] exception: %s", columnName, column.toString(), e.toString())); - } - break; - case KEYWORD: - case STRING: - case TEXT: - case IP: - case GEO_POINT: - data.put(columnName, column.asString()); - break; - case BOOLEAN: - data.put(columnName, column.asBoolean()); - break; - case BYTE: - case BINARY: - data.put(columnName, column.asBytes()); - break; - case LONG: - data.put(columnName, column.asLong()); - break; - case INTEGER: - data.put(columnName, column.asBigInteger()); - break; - case SHORT: - data.put(columnName, column.asBigInteger()); - break; - case FLOAT: - case DOUBLE: - data.put(columnName, column.asDouble()); - break; - case NESTED: - case OBJECT: - case GEO_SHAPE: - data.put(columnName, JSON.parse(column.asString())); - break; - default: - getTaskPluginCollector().collectDirtyRecord(record, "类型错误:不支持的类型:" + columnType + " " + columnName); - } - } - } - - if (id == null) { - //id = UUID.randomUUID().toString(); - bulkaction.addAction(new Index.Builder(data).build()); - } else { - bulkaction.addAction(new Index.Builder(data).id(id).build()); - } - } - - try { - return RetryUtil.executeWithRetry(new Callable() { - @Override - public Integer call() throws Exception { - JestResult jestResult = esClient.bulkInsert(bulkaction, 1); - if (jestResult.isSucceeded()) { - return writerBuffer.size(); - } - - String msg = String.format("response code: [%d] error :[%s]", jestResult.getResponseCode(), jestResult.getErrorMessage()); - log.warn(msg); - if (esClient.isBulkResult(jestResult)) { - BulkResult brst = (BulkResult) jestResult; - List failedItems = brst.getFailedItems(); - for (BulkResult.BulkResultItem item : failedItems) { - if (item.status != 400) { - // 400 BAD_REQUEST 如果非数据异常,请求异常,则不允许忽略 - throw DataXException.asDataXException(ESWriterErrorCode.ES_INDEX_INSERT, String.format("status:[%d], error: %s", item.status, item.error)); - } else { - // 如果用户选择不忽略解析错误,则抛异常,默认为忽略 - if (!Key.isIgnoreParseError(conf)) { - throw DataXException.asDataXException(ESWriterErrorCode.ES_INDEX_INSERT, String.format("status:[%d], error: %s, config not ignoreParseError so throw this error", item.status, item.error)); - } - } - } - - List items = brst.getItems(); - for (int idx = 0; idx < items.size(); ++idx) { - BulkResult.BulkResultItem item = items.get(idx); - if (item.error != null && !"".equals(item.error)) { - getTaskPluginCollector().collectDirtyRecord(writerBuffer.get(idx), String.format("status:[%d], error: %s", item.status, item.error)); - } - } - return writerBuffer.size() - brst.getFailedItems().size(); - } else { - Integer status = esClient.getStatus(jestResult); - switch (status) { - case 429: //TOO_MANY_REQUESTS - log.warn("server response too many requests, so auto reduce speed"); - break; - } - throw DataXException.asDataXException(ESWriterErrorCode.ES_INDEX_INSERT, jestResult.getErrorMessage()); - } - } - }, trySize, 60000L, true); - } catch (Exception e) { - if (Key.isIgnoreWriteError(this.conf)) { - log.warn(String.format("重试[%d]次写入失败,忽略该错误,继续写入!", trySize)); - } else { - throw DataXException.asDataXException(ESWriterErrorCode.ES_INDEX_INSERT, e); - } - } - return 0; - } - - @Override - public void post() { - } - - @Override - public void destroy() { - esClient.closeJestClient(); - } - } -} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriterErrorCode.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriterErrorCode.java deleted file mode 100644 index 59dcbd0a..00000000 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESWriterErrorCode.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.alibaba.datax.plugin.writer.elasticsearchwriter; - -import com.alibaba.datax.common.spi.ErrorCode; - -public enum ESWriterErrorCode implements ErrorCode { - BAD_CONFIG_VALUE("ESWriter-00", "您配置的值不合法."), - ES_INDEX_DELETE("ESWriter-01", "删除index错误."), - ES_INDEX_CREATE("ESWriter-02", "创建index错误."), - ES_MAPPINGS("ESWriter-03", "mappings错误."), - ES_INDEX_INSERT("ESWriter-04", "插入数据错误."), - ES_ALIAS_MODIFY("ESWriter-05", "别名修改错误."), - ; - - private final String code; - private final String description; - - ESWriterErrorCode(String code, String description) { - this.code = code; - this.description = description; - } - - @Override - public String getCode() { - return this.code; - } - - @Override - public String getDescription() { - return this.description; - } - - @Override - public String toString() { - return String.format("Code:[%s], Description:[%s]. ", this.code, - this.description); - } -} \ No newline at end of file diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchClient.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchClient.java new file mode 100644 index 00000000..12ac3dd9 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchClient.java @@ -0,0 +1,312 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.plugin.writer.elasticsearchwriter.jest.ClusterInfo; +import com.alibaba.datax.plugin.writer.elasticsearchwriter.jest.ClusterInfoResult; +import com.alibaba.datax.plugin.writer.elasticsearchwriter.jest.PutMapping7; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import io.searchbox.action.Action; +import io.searchbox.client.JestClient; +import io.searchbox.client.JestClientFactory; +import io.searchbox.client.JestResult; +import io.searchbox.client.config.HttpClientConfig; +import io.searchbox.client.config.HttpClientConfig.Builder; +import io.searchbox.core.Bulk; +import io.searchbox.indices.CreateIndex; +import io.searchbox.indices.DeleteIndex; +import io.searchbox.indices.IndicesExists; +import io.searchbox.indices.aliases.*; +import io.searchbox.indices.mapping.GetMapping; +import io.searchbox.indices.mapping.PutMapping; + +import io.searchbox.indices.settings.GetSettings; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * Created by xiongfeng.bxf on 17/2/8. + */ +public class ElasticSearchClient { + private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchClient.class); + + private JestClient jestClient; + private Configuration conf; + + public JestClient getClient() { + return jestClient; + } + + public ElasticSearchClient(Configuration conf) { + this.conf = conf; + String endpoint = Key.getEndpoint(conf); + String user = Key.getUsername(conf); + String passwd = Key.getPassword(conf); + boolean multiThread = Key.isMultiThread(conf); + int readTimeout = Key.getTimeout(conf); + boolean compression = Key.isCompression(conf); + boolean discovery = Key.isDiscovery(conf); + String discoveryFilter = Key.getDiscoveryFilter(conf); + int totalConnection = this.conf.getInt("maxTotalConnection", 200); + JestClientFactory factory = new JestClientFactory(); + Builder httpClientConfig = new HttpClientConfig + .Builder(endpoint) +// .setPreemptiveAuth(new HttpHost(endpoint)) + .multiThreaded(multiThread) + .connTimeout(readTimeout) + .readTimeout(readTimeout) + .maxTotalConnection(totalConnection) + .requestCompressionEnabled(compression) + .discoveryEnabled(discovery) + .discoveryFrequency(5L, TimeUnit.MINUTES) + .discoveryFilter(discoveryFilter); + if (!(StringUtils.isBlank(user) || StringUtils.isBlank(passwd))) { + // 匿名登录 + httpClientConfig.defaultCredentials(user, passwd); + } + factory.setHttpClientConfig(httpClientConfig.build()); + this.jestClient = factory.getObject(); + } + + public boolean indicesExists(String indexName) throws Exception { + boolean isIndicesExists = false; + JestResult rst = execute(new IndicesExists.Builder(indexName).build()); + if (rst.isSucceeded()) { + isIndicesExists = true; + } else { + LOGGER.warn("IndicesExists got ResponseCode: {} ErrorMessage: {}", rst.getResponseCode(), rst.getErrorMessage()); + switch (rst.getResponseCode()) { + case 404: + isIndicesExists = false; + break; + case 401: + // 无权访问 + default: + LOGGER.warn(rst.getErrorMessage()); + break; + } + } + return isIndicesExists; + } + + public boolean deleteIndex(String indexName) throws Exception { + LOGGER.info("delete index {}", indexName); + if (indicesExists(indexName)) { + JestResult rst = execute(new DeleteIndex.Builder(indexName).build()); + if (!rst.isSucceeded()) { + LOGGER.warn("DeleteIndex got ResponseCode: {}, ErrorMessage: {}", rst.getResponseCode(), rst.getErrorMessage()); + return false; + } else { + LOGGER.info("delete index {} success", indexName); + } + } else { + LOGGER.info("index cannot found, skip delete index {}", indexName); + } + return true; + } + + public boolean isGreaterOrEqualThan7() throws Exception { + try { + ClusterInfoResult result = execute(new ClusterInfo.Builder().build()); + LOGGER.info("ClusterInfoResult: {}", result.getJsonString()); + return result.isGreaterOrEqualThan7(); + }catch(Exception e) { + LOGGER.warn(e.getMessage()); + return false; + } + } + + /** + * 获取索引的settings + * @param indexName 索引名 + * @return 设置 + */ + public String getIndexSettings(String indexName) { + GetSettings.Builder builder = new GetSettings.Builder(); + builder.addIndex(indexName); + GetSettings getSettings = builder.build(); + try { + LOGGER.info("begin GetSettings for index: {}", indexName); + JestResult result = this.execute(getSettings); + return result.getJsonString(); + } catch (Exception e) { + String message = "GetSettings for index error: " + e.getMessage(); + LOGGER.warn(message, e); + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_GET_SETTINGS, e.getMessage(), e); + } + } + + public boolean createIndexIfNotExists(String indexName, String typeName, + Object mappings, String settings, + boolean dynamic, boolean isGreaterOrEqualThan7) throws Exception { + JestResult rst; + if (!indicesExists(indexName)) { + LOGGER.info("create index {}", indexName); + rst = execute( + new CreateIndex.Builder(indexName) + .settings(settings) + .setParameter("master_timeout", Key.getMasterTimeout(this.conf)) + .build() + ); + //index_already_exists_exception + if (!rst.isSucceeded()) { + LOGGER.warn("CreateIndex got ResponseCode: {}, ErrorMessage: {}", rst.getResponseCode(), rst.getErrorMessage()); + if (getStatus(rst) == 400) { + LOGGER.info(String.format("index {} already exists", indexName)); + return true; + } else { + return false; + } + } else { + LOGGER.info("create {} index success", indexName); + } + } + + if (dynamic) { + LOGGER.info("dynamic is true, ignore mappings"); + return true; + } + LOGGER.info("create mappings for {} {}", indexName, mappings); + //如果大于7.x,mapping的PUT请求URI中不能带type,并且mapping设置中不能带有嵌套结构 + if (isGreaterOrEqualThan7) { + rst = execute(new PutMapping7.Builder(indexName, mappings). + setParameter("master_timeout", Key.getMasterTimeout(this.conf)).build()); + } else { + rst = execute(new PutMapping.Builder(indexName, typeName, mappings) + .setParameter("master_timeout", Key.getMasterTimeout(this.conf)).build()); + } + if (!rst.isSucceeded()) { + LOGGER.error("PutMapping got ResponseCode: {}, ErrorMessage: {}", rst.getResponseCode(), rst.getErrorMessage()); + return false; + } else { + LOGGER.info("index {} put mappings success", indexName); + } + return true; + } + + public T execute(Action clientRequest) throws IOException { + T rst = jestClient.execute(clientRequest); + if (!rst.isSucceeded()) { + LOGGER.warn(rst.getJsonString()); + } + return rst; + } + + public Integer getStatus(JestResult rst) { + JsonObject jsonObject = rst.getJsonObject(); + if (jsonObject.has("status")) { + return jsonObject.get("status").getAsInt(); + } + return 600; + } + + public boolean isBulkResult(JestResult rst) { + JsonObject jsonObject = rst.getJsonObject(); + return jsonObject.has("items"); + } + + + public boolean alias(String indexname, String aliasname, boolean needClean) throws IOException { + GetAliases getAliases = new GetAliases.Builder().addIndex(aliasname).build(); + AliasMapping addAliasMapping = new AddAliasMapping.Builder(indexname, aliasname).build(); + JestResult rst = null; + List list = new ArrayList(); + if (needClean) { + rst = execute(getAliases); + if (rst.isSucceeded()) { + JsonParser jp = new JsonParser(); + JsonObject jo = (JsonObject) jp.parse(rst.getJsonString()); + for (Map.Entry entry : jo.entrySet()) { + String tindex = entry.getKey(); + if (indexname.equals(tindex)) { + continue; + } + AliasMapping m = new RemoveAliasMapping.Builder(tindex, aliasname).build(); + String s = new Gson().toJson(m.getData()); + LOGGER.info(s); + list.add(m); + } + } + } + + ModifyAliases modifyAliases = new ModifyAliases.Builder(addAliasMapping).addAlias(list).setParameter("master_timeout", Key.getMasterTimeout(this.conf)).build(); + rst = execute(modifyAliases); + if (!rst.isSucceeded()) { + LOGGER.error(rst.getErrorMessage()); + throw new IOException(rst.getErrorMessage()); + } + return true; + } + + /** + * 获取index的mapping + */ + public String getIndexMapping(String indexName) { + GetMapping.Builder builder = new GetMapping.Builder(); + builder.addIndex(indexName); + GetMapping getMapping = builder.build(); + try { + LOGGER.info("begin GetMapping for index: {}", indexName); + JestResult result = this.execute(getMapping); + return result.getJsonString(); + } catch (Exception e) { + String message = "GetMapping for index error: " + e.getMessage(); + LOGGER.warn(message, e); + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_MAPPINGS, e.getMessage(), e); + } + } + + public String getMappingForIndexType(String indexName, String typeName) { + String indexMapping = this.getIndexMapping(indexName); + JSONObject indexMappingInJson = JSON.parseObject(indexMapping); + List paths = Arrays.asList(indexName, "mappings"); + JSONObject properties = JsonPathUtil.getJsonObject(paths, indexMappingInJson); + JSONObject propertiesParent = properties; + if (StringUtils.isNotBlank(typeName) && properties.containsKey(typeName)) { + propertiesParent = (JSONObject) properties.get(typeName); + } + JSONObject mapping = (JSONObject) propertiesParent.get("properties"); + return JSON.toJSONString(mapping); + } + + public JestResult bulkInsert(Bulk.Builder bulk) throws Exception { + // es_rejected_execution_exception + // illegal_argument_exception + // cluster_block_exception + JestResult rst = null; + rst = execute(bulk.build()); + if (!rst.isSucceeded()) { + LOGGER.warn(rst.getErrorMessage()); + } + return rst; + } + + /** + * 关闭JestClient客户端 + * + */ + public void closeJestClient() { + if (jestClient != null) { + try { + // jestClient.shutdownClient(); + jestClient.close(); + } catch (IOException e) { + LOGGER.warn("ignore error: ", e.getMessage()); + } + + } + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchColumn.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchColumn.java new file mode 100644 index 00000000..a27b15b2 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchColumn.java @@ -0,0 +1,126 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import java.util.List; + +/** + * Created by xiongfeng.bxf on 17/3/2. + */ +public class ElasticSearchColumn { + + private String name;//: "appkey", + + private String type;//": "TEXT", + + private String timezone; + + /** + * 源头数据格式化处理,datax做的事情 + */ + private String format; + + /** + * 目标端格式化,es原生支持的格式 + */ + private String dstFormat; + + private boolean array; + + /** + * 是否使用目标端(ES原生)数组类型 + * + * 默认是false + */ + private boolean dstArray = false; + + private boolean jsonArray; + + private boolean origin; + + private List combineFields; + + private String combineFieldsValueSeparator = "-"; + + public String getCombineFieldsValueSeparator() { + return combineFieldsValueSeparator; + } + + public void setCombineFieldsValueSeparator(String combineFieldsValueSeparator) { + this.combineFieldsValueSeparator = combineFieldsValueSeparator; + } + + public List getCombineFields() { + return combineFields; + } + + public void setCombineFields(List combineFields) { + this.combineFields = combineFields; + } + + public void setName(String name) { + this.name = name; + } + + public void setType(String type) { + this.type = type; + } + + public void setTimeZone(String timezone) { + this.timezone = timezone; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public boolean isOrigin() { return origin; } + + public void setOrigin(boolean origin) { this.origin = origin; } + + public String getTimezone() { + return timezone; + } + + public String getFormat() { + return format; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public boolean isArray() { + return array; + } + + public void setArray(boolean array) { + this.array = array; + } + + public boolean isJsonArray() {return jsonArray;} + + public void setJsonArray(boolean jsonArray) {this.jsonArray = jsonArray;} + + public String getDstFormat() { + return dstFormat; + } + + public void setDstFormat(String dstFormat) { + this.dstFormat = dstFormat; + } + + public boolean isDstArray() { + return dstArray; + } + + public void setDstArray(boolean dstArray) { + this.dstArray = dstArray; + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESFieldType.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchFieldType.java similarity index 73% rename from elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESFieldType.java rename to elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchFieldType.java index 14b09689..22c3ee6b 100644 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ESFieldType.java +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchFieldType.java @@ -3,8 +3,11 @@ package com.alibaba.datax.plugin.writer.elasticsearchwriter; /** * Created by xiongfeng.bxf on 17/3/1. */ -public enum ESFieldType { +public enum ElasticSearchFieldType { ID, + PARENT, + ROUTING, + VERSION, STRING, TEXT, KEYWORD, @@ -24,20 +27,18 @@ public enum ESFieldType { DATE_RANGE, GEO_POINT, GEO_SHAPE, - IP, + IP_RANGE, COMPLETION, TOKEN_COUNT, - - ARRAY, OBJECT, NESTED; - public static ESFieldType getESFieldType(String type) { + public static ElasticSearchFieldType getESFieldType(String type) { if (type == null) { return null; } - for (ESFieldType f : ESFieldType.values()) { + for (ElasticSearchFieldType f : ElasticSearchFieldType.values()) { if (f.name().compareTo(type.toUpperCase()) == 0) { return f; } diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriter.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriter.java new file mode 100644 index 00000000..6236e333 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriter.java @@ -0,0 +1,1119 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import com.alibaba.datax.common.element.Column; +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.DataXCaseEnvUtil; +import com.alibaba.datax.common.util.RetryUtil; +import com.alibaba.datax.plugin.writer.elasticsearchwriter.Key.ActionType; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.google.common.base.Joiner; +import io.searchbox.client.JestResult; +import io.searchbox.core.*; +import io.searchbox.params.Parameters; +import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.Callable; + +public class ElasticSearchWriter extends Writer { + private final static String WRITE_COLUMNS = "write_columns"; + + public static class Job extends Writer.Job { + private static final Logger LOGGER = LoggerFactory.getLogger(Job.class); + + private Configuration conf = null; + int retryTimes = 3; + long sleepTimeInMilliSecond = 10000L; + + private String settingsCache; + + private void setSettings(String settings) { + this.settingsCache = JsonUtil.mergeJsonStr(settings, this.settingsCache); + } + + @Override + public void init() { + this.conf = super.getPluginJobConf(); + //LOGGER.info("conf:{}", conf); + this.retryTimes = this.conf.getInt("retryTimes", 3); + this.sleepTimeInMilliSecond = this.conf.getLong("sleepTimeInMilliSecond", 10000L); + } + + public List getIncludeSettings() { + return this.conf.getList("includeSettingKeys", Arrays.asList("number_of_shards", "number_of_replicas"), String.class); + } + + /** + * 从es中获取的原始settings转为需要的settings + * @param originSettings 原始settings + * @return settings + */ + private String convertSettings(String originSettings) { + if(StringUtils.isBlank(originSettings)) { + return null; + } + JSONObject jsonObject = JSON.parseObject(originSettings); + for(String key : jsonObject.keySet()) { + JSONObject settingsObj = jsonObject.getJSONObject(key); + if(settingsObj != null) { + JSONObject indexObj = settingsObj.getJSONObject("settings"); + JSONObject settings = indexObj.getJSONObject("index"); + JSONObject filterSettings = new JSONObject(); + if(settings != null) { + List includeSettings = getIncludeSettings(); + if(includeSettings != null && includeSettings.size() > 0) { + for(String includeSetting : includeSettings) { + Object fieldValue = settings.get(includeSetting); + if(fieldValue != null) { + filterSettings.put(includeSetting, fieldValue); + } + } + return filterSettings.toJSONString(); + } + } + } + } + return null; + } + + @Override + public void prepare() { + /** + * 注意:此方法仅执行一次。 + * 最佳实践:如果 Job 中有需要进行数据同步之前的处理,可以在此处完成,如果没有必要则可以直接去掉。 + * 对于7.x之后的es版本,取消了index设置type的逻辑,因此在prepare阶段,加入了判断是否为7.x及以上版本 + * 如果是7.x及以上版本,需要对于index的type做不同的处理 + * 详见 : https://www.elastic.co/guide/en/elasticsearch/reference/6.8/removal-of-types.html + */ + final ElasticSearchClient esClient = new ElasticSearchClient(this.conf); + final String indexName = Key.getIndexName(conf); + ActionType actionType = Key.getActionType(conf); + final String typeName = Key.getTypeName(conf); + final boolean dynamic = Key.getDynamic(conf); + final String dstDynamic = Key.getDstDynamic(conf); + final String newSettings = JSONObject.toJSONString(Key.getSettings(conf)); + LOGGER.info("conf settings:{}, settingsCache:{}", newSettings, this.settingsCache); + final Integer esVersion = Key.getESVersion(conf); + boolean hasId = this.hasID(); + this.conf.set("hasId", hasId); + if (ActionType.UPDATE.equals(actionType) && !hasId && !hasPrimaryKeyInfo()) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.UPDATE_WITH_ID, "Update mode must specify column type with id or primaryKeyInfo config"); + } + + try { + RetryUtil.executeWithRetry(() -> { + boolean isGreaterOrEqualThan7 = esClient.isGreaterOrEqualThan7(); + if (esVersion != null && esVersion >= 7) { + isGreaterOrEqualThan7 = true; + } + String mappings = genMappings(dstDynamic, typeName, isGreaterOrEqualThan7); + conf.set("isGreaterOrEqualThan7", isGreaterOrEqualThan7); + + + LOGGER.info(String.format("index:[%s], type:[%s], mappings:[%s]", indexName, typeName, mappings)); + boolean isIndicesExists = esClient.indicesExists(indexName); + if (isIndicesExists) { + try { + // 将原有的mapping打印出来,便于排查问题 + String oldMappings = esClient.getMappingForIndexType(indexName, typeName); + LOGGER.info("the mappings for old index is: {}", oldMappings); + } catch (Exception e) { + LOGGER.warn("warn message: {}", e.getMessage()); + } + } + + if (Key.isTruncate(conf) && isIndicesExists) { + // 备份老的索引中的settings到缓存 + try { + String oldOriginSettings = esClient.getIndexSettings(indexName); + if (StringUtils.isNotBlank(oldOriginSettings)) { + String includeSettings = convertSettings(oldOriginSettings); + LOGGER.info("merge1 settings:{}, settingsCache:{}, includeSettings:{}", + oldOriginSettings, + this.settingsCache, includeSettings); + this.setSettings(includeSettings); + } + } catch (Exception e) { + LOGGER.warn("get old settings fail, indexName:{}", indexName); + } + esClient.deleteIndex(indexName); + } + + // 更新缓存中的settings + this.setSettings(newSettings); + LOGGER.info("merge2 settings:{}, settingsCache:{}", newSettings, this.settingsCache); + // 强制创建,内部自动忽略已存在的情况 + if (!esClient.createIndexIfNotExists(indexName, typeName, mappings, this.settingsCache, dynamic, + isGreaterOrEqualThan7)) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_MAPPINGS, ""); + } + + return true; + }, DataXCaseEnvUtil.getRetryTimes(this.retryTimes), DataXCaseEnvUtil.getRetryInterval(this.sleepTimeInMilliSecond), DataXCaseEnvUtil.getRetryExponential(false)); + } catch (Exception ex) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_MAPPINGS, ex.getMessage(), ex); + } finally { + try { + esClient.closeJestClient(); + } catch (Exception e) { + LOGGER.warn("ignore close jest client error: {}", e.getMessage()); + } + } + } + + private boolean hasID() { + List column = conf.getList("column"); + if (column != null) { + for (Object col : column) { + JSONObject jo = JSONObject.parseObject(col.toString()); + String colTypeStr = jo.getString("type"); + ElasticSearchFieldType colType = ElasticSearchFieldType.getESFieldType(colTypeStr); + if (ElasticSearchFieldType.ID.equals(colType)) { + return true; + } + } + } + return false; + } + + private boolean hasPrimaryKeyInfo() { + PrimaryKeyInfo primaryKeyInfo = Key.getPrimaryKeyInfo(this.conf); + if (null != primaryKeyInfo && null != primaryKeyInfo.getColumn() && !primaryKeyInfo.getColumn().isEmpty()) { + return true; + } else { + return false; + } + } + + + private String genMappings(String dstDynamic, String typeName, boolean isGreaterOrEqualThan7) { + String mappings; + Map propMap = new HashMap(); + List columnList = new ArrayList(); + ElasticSearchColumn combineItem = null; + + List column = conf.getList("column"); + if (column != null) { + for (Object col : column) { + JSONObject jo = JSONObject.parseObject(col.toString()); + String colName = jo.getString("name"); + String colTypeStr = jo.getString("type"); + if (colTypeStr == null) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE, col.toString() + " column must have type"); + } + ElasticSearchFieldType colType = ElasticSearchFieldType.getESFieldType(colTypeStr); + if (colType == null) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE, col.toString() + " unsupported type"); + } + + ElasticSearchColumn columnItem = new ElasticSearchColumn(); + + if (Key.PRIMARY_KEY_COLUMN_NAME.equals(colName)) { + // 兼容已有版本 + colType = ElasticSearchFieldType.ID; + colTypeStr = "id"; + } + + columnItem.setName(colName); + columnItem.setType(colTypeStr); + + JSONArray combineFields = jo.getJSONArray("combineFields"); + if (combineFields != null && !combineFields.isEmpty() && ElasticSearchFieldType.ID.equals(ElasticSearchFieldType.getESFieldType(colTypeStr))) { + List fields = new ArrayList(); + for (Object item : combineFields) { + fields.add((String) item); + } + columnItem.setCombineFields(fields); + combineItem = columnItem; + } + + String combineFieldsValueSeparator = jo.getString("combineFieldsValueSeparator"); + if (StringUtils.isNotBlank(combineFieldsValueSeparator)) { + columnItem.setCombineFieldsValueSeparator(combineFieldsValueSeparator); + } + + // 如果是id,version,routing,不需要创建mapping + if (colType == ElasticSearchFieldType.ID || colType == ElasticSearchFieldType.VERSION || colType == ElasticSearchFieldType.ROUTING) { + columnList.add(columnItem); + continue; + } + + // 如果是组合id中的字段,不需要创建mapping + // 所以组合id的定义必须要在columns最前面 + if (combineItem != null && combineItem.getCombineFields().contains(colName)) { + columnList.add(columnItem); + continue; + } + columnItem.setDstArray(false); + Boolean array = jo.getBoolean("array"); + if (array != null) { + columnItem.setArray(array); + Boolean dstArray = jo.getBoolean("dstArray"); + if(dstArray!=null) { + columnItem.setDstArray(dstArray); + } + } else { + columnItem.setArray(false); + } + Boolean jsonArray = jo.getBoolean("json_array"); + if (jsonArray != null) { + columnItem.setJsonArray(jsonArray); + } else { + columnItem.setJsonArray(false); + } + Map field = new HashMap(); + field.put("type", colTypeStr); + //https://www.elastic.co/guide/en/elasticsearch/reference/5.2/breaking_50_mapping_changes.html#_literal_index_literal_property + // https://www.elastic.co/guide/en/elasticsearch/guide/2.x/_deep_dive_on_doc_values.html#_disabling_doc_values + field.put("doc_values", jo.getBoolean("doc_values")); + field.put("ignore_above", jo.getInteger("ignore_above")); + field.put("index", jo.getBoolean("index")); + switch (colType) { + case STRING: + // 兼容string类型,ES5之前版本 + break; + case KEYWORD: + // https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-search-speed.html#_warm_up_global_ordinals + field.put("eager_global_ordinals", jo.getBoolean("eager_global_ordinals")); + break; + case TEXT: + field.put("analyzer", jo.getString("analyzer")); + // 优化disk使用,也同步会提高index性能 + // https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-disk-usage.html + field.put("norms", jo.getBoolean("norms")); + field.put("index_options", jo.getBoolean("index_options")); + if(jo.getString("fields") != null) { + field.put("fields", jo.getJSONObject("fields")); + } + break; + case DATE: + if (Boolean.TRUE.equals(jo.getBoolean("origin"))) { + if (jo.getString("format") != null) { + field.put("format", jo.getString("format")); + } + // es原生format覆盖原先来的format + if (jo.getString("dstFormat") != null) { + field.put("format", jo.getString("dstFormat")); + } + if(jo.getBoolean("origin") != null) { + columnItem.setOrigin(jo.getBoolean("origin")); + } + } else { + columnItem.setTimeZone(jo.getString("timezone")); + columnItem.setFormat(jo.getString("format")); + } + break; + case GEO_SHAPE: + field.put("tree", jo.getString("tree")); + field.put("precision", jo.getString("precision")); + break; + case OBJECT: + case NESTED: + if (jo.getString("dynamic") != null) { + field.put("dynamic", jo.getString("dynamic")); + } + break; + default: + break; + } + if (jo.containsKey("other_params")) { + field.putAll(jo.getJSONObject("other_params")); + } + propMap.put(colName, field); + columnList.add(columnItem); + } + } + + long version = System.currentTimeMillis(); + LOGGER.info("unified version: {}", version); + conf.set("version", version); + conf.set(WRITE_COLUMNS, JSON.toJSONString(columnList)); + + LOGGER.info(JSON.toJSONString(columnList)); + + Map rootMappings = new HashMap(); + Map typeMappings = new HashMap(); + typeMappings.put("properties", propMap); + rootMappings.put(typeName, typeMappings); + + // 7.x以后版本取消了index中关于type的指定,所以mapping的格式只能支持 + // { + // "properties" : { + // "abc" : { + // "type" : "text" + // } + // } + // } + // properties 外不能再嵌套typeName + + if(StringUtils.isNotBlank(dstDynamic)) { + typeMappings.put("dynamic", dstDynamic); + } + if (isGreaterOrEqualThan7) { + mappings = JSON.toJSONString(typeMappings); + } else { + mappings = JSON.toJSONString(rootMappings); + } + if (StringUtils.isBlank(mappings)) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE, "must have mappings"); + } + + return mappings; + } + + @Override + public List split(int mandatoryNumber) { + List configurations = new ArrayList(mandatoryNumber); + for (int i = 0; i < mandatoryNumber; i++) { + configurations.add(this.conf.clone()); + } + return configurations; + } + + @Override + public void post() { + ElasticSearchClient esClient = new ElasticSearchClient(this.conf); + String alias = Key.getAlias(conf); + if (!"".equals(alias)) { + LOGGER.info(String.format("alias [%s] to [%s]", alias, Key.getIndexName(conf))); + try { + esClient.alias(Key.getIndexName(conf), alias, Key.isNeedCleanAlias(conf)); + } catch (IOException e) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_ALIAS_MODIFY, e); + } + } + } + + @Override + public void destroy() { + + } + } + + public static class Task extends Writer.Task { + + private static final Logger LOGGER = LoggerFactory.getLogger(Job.class); + + private Configuration conf; + + + ElasticSearchClient esClient = null; + private List typeList; + private List columnList; + private List> deleteByConditions; + + private int trySize; + private long tryInterval; + private int batchSize; + private String index; + private String type; + private String splitter; + private ActionType actionType; + private ElasticSearchColumn combinedIdColumn; + private Map colNameToIndexMap; + private Map urlParams; + private boolean columnSizeChecked = false; + private boolean enableRedundantColumn = false; + private boolean enableWriteNull = true; + int retryTimes = 3; + long sleepTimeInMilliSecond = 10000L; + boolean isGreaterOrEqualThan7 = false; + private String fieldDelimiter; + private boolean hasId; + private PrimaryKeyInfo primaryKeyInfo; + private boolean hasPrimaryKeyInfo = false; + private List esPartitionColumn; + private boolean hasEsPartitionColumn = false; + + @Override + public void init() { + this.conf = super.getPluginJobConf(); + this.index = Key.getIndexName(conf); + this.type = Key.getTypeName(conf); + this.trySize = Key.getTrySize(conf); + this.tryInterval = Key.getTryInterval(conf); + this.batchSize = Key.getBatchSize(conf); + this.splitter = Key.getSplitter(conf); + this.actionType = Key.getActionType(conf); + this.urlParams = Key.getUrlParams(conf); + this.enableWriteNull = Key.isEnableNullUpdate(conf); + this.retryTimes = this.conf.getInt("retryTimes", 3); + this.sleepTimeInMilliSecond = this.conf.getLong("sleepTimeInMilliSecond", 10000L); + this.isGreaterOrEqualThan7 = this.conf.getBool("isGreaterOrEqualThan7", false); + this.parseDeleteCondition(conf); + this.columnList = JSON.parseObject(this.conf.getString(WRITE_COLUMNS), new TypeReference>() { + }); + LOGGER.info("columnList: {}", JSON.toJSONString(columnList)); + this.hasId = this.conf.getBool("hasId", false); + if (hasId) { + LOGGER.info("Task has id column, will use it to set _id property"); + } else { + LOGGER.info("Task will use elasticsearch auto generated _id property"); + } + this.fieldDelimiter = Key.getFieldDelimiter(this.conf); + this.enableRedundantColumn = this.conf.getBool("enableRedundantColumn", false); + this.typeList = new ArrayList(); + for (ElasticSearchColumn esColumn : this.columnList) { + this.typeList.add(ElasticSearchFieldType.getESFieldType(esColumn.getType())); + if (esColumn.getCombineFields() != null && esColumn.getCombineFields().size() > 0 + && ElasticSearchFieldType.getESFieldType(esColumn.getType()).equals(ElasticSearchFieldType.ID)) { + combinedIdColumn = esColumn; + } + } + this.primaryKeyInfo = Key.getPrimaryKeyInfo(this.conf); + this.esPartitionColumn = Key.getEsPartitionColumn(this.conf); + this.colNameToIndexMap = new HashMap(5); + this.handleMetaKeys(); + this.esClient = new ElasticSearchClient(this.conf); + } + + private void handleMetaKeys() { + if (null != this.primaryKeyInfo && null != this.primaryKeyInfo.getColumn() + && !this.primaryKeyInfo.getColumn().isEmpty()) { + this.hasPrimaryKeyInfo = true; + if (null == this.primaryKeyInfo.getFieldDelimiter()) { + if (null != this.fieldDelimiter) { + this.primaryKeyInfo.setFieldDelimiter(this.fieldDelimiter); + } else { + this.primaryKeyInfo.setFieldDelimiter(""); + } + } + + for (String eachPk : this.primaryKeyInfo.getColumn()) { + boolean foundKeyInColumn = false; + for (int i = 0; i < columnList.size(); i++) { + if (StringUtils.equals(eachPk, columnList.get(i).getName())) { + this.colNameToIndexMap.put(eachPk, i); + foundKeyInColumn = true; + break; + } + } + if (!foundKeyInColumn) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.RECORD_FIELD_NOT_FOUND, + "primaryKeyInfo has column not exists in column"); + } + } + } + + if (null != this.esPartitionColumn && !this.esPartitionColumn.isEmpty()) { + this.hasEsPartitionColumn = true; + for (PartitionColumn eachPartitionCol : this.esPartitionColumn) { + boolean foundKeyInColumn = false; + for (int i = 0; i < columnList.size(); i++) { + if (StringUtils.equals(eachPartitionCol.getName(), columnList.get(i).getName())) { + this.colNameToIndexMap.put(eachPartitionCol.getName(), i); + foundKeyInColumn = true; + break; + } + } + if (!foundKeyInColumn) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.RECORD_FIELD_NOT_FOUND, + "esPartitionColumn has column not exists in column"); + } + } + } + } + + private void parseDeleteCondition(Configuration conf) { + List> list = new ArrayList>(); + String config = Key.getDeleteBy(conf); + if (config != null) { + JSONArray array = JSON.parseArray(config); + for (Object obj : array) { + list.add((Map) obj); + } + deleteByConditions = list; + } + } + + + @Override + public void prepare() { + } + + /** + * 示例:{ + * "deleteBy" : [ + * {"product_status" : [-1,-2], "sub_status" : -3}, + * {"product_status" : -3} + * ] + * } + * + * 表示以下两类数据删除: + * 1. product_status为-1或-2并且sub_status为-3 + * 2. product_status为-3 + * + * 注意[{}]返回true + * @param record + * @return + */ + private boolean isDeleteRecord(Record record) { + if (deleteByConditions == null) { + return false; + } + + Map kv = new HashMap(); + for (int i = 0; i < record.getColumnNumber(); i++) { + Column column = record.getColumn(i); + String columnName = columnList.get(i).getName(); + kv.put(columnName, column.asString()); + } + + for (Map delCondition : deleteByConditions) { + if (meetAllCondition(kv, delCondition)) { + return true; + } + } + + return false; + } + + private boolean meetAllCondition(Map kv, Map delCondition) { + for (Map.Entry oneCondition : delCondition.entrySet()) { + if (!checkOneCondition(kv, oneCondition)) { + return false; + } + } + return true; + } + + private boolean checkOneCondition(Map kv, Map.Entry entry) { + Object value = kv.get(entry.getKey()); + if (entry.getValue() instanceof List) { + for (Object obj : (List) entry.getValue()) { + if (obj.toString().equals(value)) { + return true; + } + } + } else { + if (value != null && value.equals(entry.getValue().toString())) { + return true; + } + } + return false; + } + + @Override + public void startWrite(RecordReceiver recordReceiver) { + List writerBuffer = new ArrayList(this.batchSize); + Record record = null; + while ((record = recordReceiver.getFromReader()) != null) { + if (!columnSizeChecked) { + boolean isInvalid = true; + if (enableRedundantColumn) { + isInvalid = this.columnList.size() > record.getColumnNumber(); + } else { + isInvalid = this.columnList.size() != record.getColumnNumber(); + } + if (isInvalid) { + String message = String.format( + "column number not equal error, reader column size is %s, but the writer column size is %s", + record.getColumnNumber(), this.columnList.size()); + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE, message); + } + columnSizeChecked = true; + } + writerBuffer.add(record); + if (writerBuffer.size() >= this.batchSize) { + this.doBatchInsert(writerBuffer); + writerBuffer.clear(); + } + } + + if (!writerBuffer.isEmpty()) { + this.doBatchInsert(writerBuffer); + writerBuffer.clear(); + } + } + + private String getDateStr(ElasticSearchColumn esColumn, Column column) { + // 如果保持原样,就直接返回 + if (esColumn.isOrigin()) { + return column.asString(); + } + DateTime date = null; + DateTimeZone dtz = DateTimeZone.getDefault(); + if (esColumn.getTimezone() != null) { + // 所有时区参考 http://www.joda.org/joda-time/timezones.html + // TODO:创建一次多处复用 + dtz = DateTimeZone.forID(esColumn.getTimezone()); + } + if (column.getType() != Column.Type.DATE && esColumn.getFormat() != null) { + // TODO:创建一次多处复用 + DateTimeFormatter formatter = DateTimeFormat.forPattern(esColumn.getFormat()); + date = formatter.withZone(dtz).parseDateTime(column.asString()); + return date.toString(); + } else if (column.getType() == Column.Type.DATE) { + if (null == column.getRawData()) { + return null; + } else { + date = new DateTime(column.asLong(), dtz); + return date.toString(); + } + } else { + return column.asString(); + } + } + + private void doBatchInsert(final List writerBuffer) { + Map data = null; + Bulk.Builder bulkactionTmp = null; + int totalNumber = writerBuffer.size(); + int dirtyDataNumber = 0; + if (this.isGreaterOrEqualThan7) { + bulkactionTmp = new Bulk.Builder().defaultIndex(this.index); + } else { + bulkactionTmp = new Bulk.Builder().defaultIndex(this.index).defaultType(this.type); + } + final Bulk.Builder bulkaction = bulkactionTmp; + // 增加url的参数 + for (Map.Entry entry : urlParams.entrySet()) { + bulkaction.setParameter(entry.getKey(), entry.getValue()); + } + for (Record record : writerBuffer) { + data = new HashMap(); + String id = null; + String parent = null; + String routing = null; + String version = null; + String columnName = null; + Column column = null; + try { + for (int i = 0; i < record.getColumnNumber(); i++) { + column = record.getColumn(i); + columnName = columnList.get(i).getName(); + // 如果组合id不等于null,需要把相关的字段全部忽略 + if (combinedIdColumn != null) { + if (combinedIdColumn.getCombineFields().contains(columnName)) { + continue; + } + } + //如果是json数组,当成对象类型处理 + ElasticSearchFieldType columnType = columnList.get(i).isJsonArray() ? ElasticSearchFieldType.NESTED : typeList.get(i); + + Boolean dstArray = columnList.get(i).isDstArray(); + + //如果是数组类型,那它传入的是字符串类型,也有可能是null + if (columnList.get(i).isArray() && null != column.asString()) { + String[] dataList = column.asString().split(splitter); + if (!columnType.equals(ElasticSearchFieldType.DATE)) { + if (dstArray) { + try { + // 根据客户配置的类型,转换成相应的类型 + switch (columnType) { + case BYTE: + case KEYWORD: + case TEXT: + data.put(columnName, dataList); + break; + case SHORT: + case INTEGER: + if (StringUtils.isBlank(column.asString().trim())) { + data.put(columnName, null); + } else { + Integer[] intDataList = new Integer[dataList.length]; + for (int j = 0; j < dataList.length; j++) { + dataList[j] = dataList[j].trim(); + if (StringUtils.isNotBlank(dataList[j])) { + intDataList[j] = Integer.valueOf(dataList[j]); + } + } + data.put(columnName, intDataList); + } + break; + case LONG: + if (StringUtils.isBlank(column.asString().trim())) { + data.put(columnName, null); + } else { + Long[] longDataList = new Long[dataList.length]; + for (int j = 0; j < dataList.length; j++) { + dataList[j] = dataList[j].trim(); + if (StringUtils.isNotBlank(dataList[j])) { + longDataList[j] = Long.valueOf(dataList[j]); + } + } + data.put(columnName, longDataList); + } + break; + case FLOAT: + case DOUBLE: + if (StringUtils.isBlank(column.asString().trim())) { + data.put(columnName, null); + } else { + Double[] doubleDataList = new Double[dataList.length]; + for (int j = 0; j < dataList.length; j++) { + dataList[j] = dataList[j].trim(); + if (StringUtils.isNotBlank(dataList[j])) { + doubleDataList[j] = Double.valueOf(dataList[j]); + } + } + data.put(columnName, doubleDataList); + } + break; + default: + data.put(columnName, dataList); + break; + } + } catch (Exception e) { + LOGGER.info("脏数据,记录:{}", record.toString()); + continue; + } + } else { + data.put(columnName, dataList); + } + } else { + data.put(columnName, dataList); + } + } else { + // LOGGER.info("columnType: {} integer: {}", columnType, column.asString()); + switch (columnType) { + case ID: + if (id != null) { + id += record.getColumn(i).asString(); + } else { + id = record.getColumn(i).asString(); + } + break; + case PARENT: + if (parent != null) { + parent += record.getColumn(i).asString(); + } else { + parent = record.getColumn(i).asString(); + } + break; + case ROUTING: + if (routing != null) { + routing += record.getColumn(i).asString(); + } else { + routing = record.getColumn(i).asString(); + } + break; + + case VERSION: + if (version != null) { + version += record.getColumn(i).asString(); + } else { + version = record.getColumn(i).asString(); + } + break; + case DATE: + String dateStr = getDateStr(columnList.get(i), column); + data.put(columnName, dateStr); + break; + case KEYWORD: + case STRING: + case TEXT: + case IP: + case GEO_POINT: + case IP_RANGE: + data.put(columnName, column.asString()); + break; + case BOOLEAN: + data.put(columnName, column.asBoolean()); + break; + case BYTE: + case BINARY: + // json序列化不支持byte类型,es支持的binary类型,必须传入base64的格式 + data.put(columnName, column.asString()); + break; + case LONG: + data.put(columnName, column.asLong()); + break; + case INTEGER: + data.put(columnName, column.asLong()); + break; + case SHORT: + data.put(columnName, column.asLong()); + break; + case FLOAT: + case DOUBLE: + data.put(columnName, column.asDouble()); + break; + case GEO_SHAPE: + case DATE_RANGE: + case INTEGER_RANGE: + case FLOAT_RANGE: + case LONG_RANGE: + case DOUBLE_RANGE: + if (null == column.asString()) { + data.put(columnName, column.asString()); + } else { + data.put(columnName, JSON.parse(column.asString())); + } + break; + case NESTED: + case OBJECT: + if (null == column.asString()) { + data.put(columnName, column.asString()); + } else { + // 转json格式 + data.put(columnName, JSON.parse(column.asString())); + } + break; + default: + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE, String.format( + "Type error: unsupported type %s for column %s", columnType, columnName)); + } + } + } + + + if (this.hasPrimaryKeyInfo) { + List idData = new ArrayList(); + for (String eachCol : this.primaryKeyInfo.getColumn()) { + Column recordColumn = record.getColumn(this.colNameToIndexMap.get(eachCol)); + idData.add(recordColumn.asString()); + } + id = StringUtils.join(idData, this.primaryKeyInfo.getFieldDelimiter()); + } + if (this.hasEsPartitionColumn) { + List idData = new ArrayList(); + for (PartitionColumn eachCol : this.esPartitionColumn) { + Column recordColumn = record.getColumn(this.colNameToIndexMap.get(eachCol.getName())); + idData.add(recordColumn.asString()); + } + routing = StringUtils.join(idData, ""); + } + } catch (Exception e) { + // 脏数据 + super.getTaskPluginCollector().collectDirtyRecord(record, + String.format("parse error for column: %s errorMessage: %s", columnName, e.getMessage())); + dirtyDataNumber++; + // 处理下一个record + continue; + } + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("id: {} routing: {} data: {}", id, routing, JSON.toJSONString(data)); + } + + + if (isDeleteRecord(record)) { + Delete.Builder builder = new Delete.Builder(id); + bulkaction.addAction(builder.build()); + } else { + // 使用用户自定义组合唯一键 + if (combinedIdColumn != null) { + try { + id = processIDCombineFields(record, combinedIdColumn); + // LOGGER.debug("id: {}", id); + } catch (Exception e) { + // 脏数据 + super.getTaskPluginCollector().collectDirtyRecord(record, + String.format("parse error for column: %s errorMessage: %s", columnName, e.getMessage())); + // 处理下一个record + dirtyDataNumber++; + continue; + } + } + switch (actionType) { + case INDEX: + // 先进行json序列化,jest client的gson序列化会把等号按照html序列化 + Index.Builder builder = null; + if (this.enableWriteNull) { + builder = new Index.Builder( + JSONObject.toJSONString(data, SerializerFeature.WriteMapNullValue, + SerializerFeature.QuoteFieldNames, SerializerFeature.SkipTransientField, + SerializerFeature.WriteEnumUsingToString, SerializerFeature.SortField)); + } else { + builder = new Index.Builder(JSONObject.toJSONString(data)); + } + if (id != null) { + builder.id(id); + } + if (parent != null) { + builder.setParameter(Parameters.PARENT, parent); + } + if (routing != null) { + builder.setParameter(Parameters.ROUTING, routing); + } + if (version != null) { + builder.setParameter(Parameters.VERSION, version); + builder.setParameter(Parameters.VERSION_TYPE, "external"); + } + bulkaction.addAction(builder.build()); + break; + case UPDATE: + // doc: https://www.cnblogs.com/crystaltu/articles/6992935.html + // doc: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html + Map updateDoc = new HashMap(); + updateDoc.put("doc", data); + updateDoc.put("doc_as_upsert", true); + Update.Builder update = null; + if (this.enableWriteNull) { + // write: {a:"1",b:null} + update = new Update.Builder( + JSONObject.toJSONString(updateDoc, SerializerFeature.WriteMapNullValue, + SerializerFeature.QuoteFieldNames, SerializerFeature.SkipTransientField, + SerializerFeature.WriteEnumUsingToString, SerializerFeature.SortField)); + // 在DEFAULT_GENERATE_FEATURE基础上,只增加了SerializerFeature.WRITE_MAP_NULL_FEATURES + } else { + // write: {"a":"1"} + update = new Update.Builder(JSONObject.toJSONString(updateDoc)); + } + if (id != null) { + update.id(id); + } + if (parent != null) { + update.setParameter(Parameters.PARENT, parent); + } + if (routing != null) { + update.setParameter(Parameters.ROUTING, routing); + } + // version type [EXTERNAL] is not supported by the update API + if (version != null) { + update.setParameter(Parameters.VERSION, version); + } + bulkaction.addAction(update.build()); + break; + default: + break; + } + } + } + + if (dirtyDataNumber >= totalNumber) { + // all batch is dirty data + LOGGER.warn("all this batch is dirty data, dirtyDataNumber: {} totalDataNumber: {}", dirtyDataNumber, + totalNumber); + return; + } + + BulkResult bulkResult = null; + try { + bulkResult = RetryUtil.executeWithRetry(new Callable() { + @Override + public BulkResult call() throws Exception { + JestResult jestResult = esClient.bulkInsert(bulkaction); + if (jestResult.isSucceeded()) { + return null; + } + String msg = String.format("response code: [%d] error :[%s]", jestResult.getResponseCode(), + jestResult.getErrorMessage()); + LOGGER.warn(msg); + if (esClient.isBulkResult(jestResult)) { + BulkResult brst = (BulkResult) jestResult; + List failedItems = brst.getFailedItems(); + for (BulkResult.BulkResultItem item : failedItems) { + if (item.status != 400) { + // 400 BAD_REQUEST 如果非数据异常,请求异常,则不允许忽略 + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_INDEX_INSERT, + String.format("status:[%d], error: %s", item.status, item.error)); + } else { + // 如果用户选择不忽略解析错误,则抛异常,默认为忽略 + if (!Key.isIgnoreParseError(conf)) { + throw new NoReRunException(ElasticSearchWriterErrorCode.ES_INDEX_INSERT, + String.format( + "status:[%d], error: %s, config not ignoreParseError so throw this error", + item.status, item.error)); + } + } + } + return brst; + } else { + Integer status = esClient.getStatus(jestResult); + switch (status) { + case 429: // TOO_MANY_REQUESTS + LOGGER.warn("server response too many requests, so auto reduce speed"); + break; + default: + break; + } + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_INDEX_INSERT, + jestResult.getErrorMessage()); + } + } + }, this.trySize, this.tryInterval, false, Arrays.asList(DataXException.class)); + } catch (Exception e) { + if (Key.isIgnoreWriteError(this.conf)) { + LOGGER.warn(String.format("Retry [%d] write failed, ignore the error, continue to write!", trySize)); + } else { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.ES_INDEX_INSERT, e.getMessage(), e); + } + } + + if (null != bulkResult) { + List items = bulkResult.getItems(); + for (int idx = 0; idx < items.size(); ++idx) { + BulkResult.BulkResultItem item = items.get(idx); + if (item.error != null && !"".equals(item.error)) { + super.getTaskPluginCollector().collectDirtyRecord(writerBuffer.get(idx), + String.format("status:[%d], error: %s", item.status, item.error)); + } + } + } + } + + private int getRecordColumnIndex(Record record, String columnName) { + if (colNameToIndexMap.containsKey(columnName)) { + return colNameToIndexMap.get(columnName); + } + + List columns = new ArrayList(); + int index = -1; + for (int i=0; i 1) { + throw DataXException.asDataXException( + ElasticSearchWriterErrorCode.RECORD_FIELD_NOT_FOUND, + "record has multiple columns found by name: " + columnName); + } + + colNameToIndexMap.put(columnName, index); + return index; + } + + private String processIDCombineFields(Record record, ElasticSearchColumn esColumn) { + List values = new ArrayList(esColumn.getCombineFields().size()); + for (String field : esColumn.getCombineFields()) { + int colIndex = getRecordColumnIndex(record, field); + Column col = record.getColumnNumber() <= colIndex ? null : record.getColumn(colIndex); + if (col == null) { + throw DataXException.asDataXException(ElasticSearchWriterErrorCode.RECORD_FIELD_NOT_FOUND, field); + } + values.add(col.asString()); + } + return Joiner.on(esColumn.getCombineFieldsValueSeparator()).join(values); + } + + @Override + public void post() { + } + + @Override + public void destroy() { + try { + this.esClient.closeJestClient(); + } catch (Exception e) { + LOGGER.warn("ignore close jest client error: {}", e.getMessage()); + } + } + + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriterErrorCode.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriterErrorCode.java new file mode 100644 index 00000000..c9b02532 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/ElasticSearchWriterErrorCode.java @@ -0,0 +1,41 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum ElasticSearchWriterErrorCode implements ErrorCode { + BAD_CONFIG_VALUE("ESWriter-00", "The value you configured is not valid."), + ES_INDEX_DELETE("ESWriter-01", "Delete index error."), + ES_INDEX_CREATE("ESWriter-02", "Index creation error."), + ES_MAPPINGS("ESWriter-03", "The mappings error."), + ES_INDEX_INSERT("ESWriter-04", "Insert data error."), + ES_ALIAS_MODIFY("ESWriter-05", "Alias modification error."), + JSON_PARSE("ESWrite-06", "Json format parsing error"), + UPDATE_WITH_ID("ESWrite-07", "Update mode must specify column type with id"), + RECORD_FIELD_NOT_FOUND("ESWrite-08", "Field does not exist in the original table"), + ES_GET_SETTINGS("ESWriter-09", "get settings failed"); + ; + + private final String code; + private final String description; + + ElasticSearchWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonPathUtil.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonPathUtil.java new file mode 100644 index 00000000..49703435 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonPathUtil.java @@ -0,0 +1,28 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import java.util.List; + +import com.alibaba.fastjson.JSONObject; + +public class JsonPathUtil { + + public static JSONObject getJsonObject(List paths, JSONObject data) { + if (null == paths || paths.isEmpty()) { + return data; + } + + if (null == data) { + return null; + } + + JSONObject dataTmp = data; + for (String each : paths) { + if (null != dataTmp) { + dataTmp = dataTmp.getJSONObject(each); + } else { + return null; + } + } + return dataTmp; + } +} \ No newline at end of file diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonUtil.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonUtil.java new file mode 100644 index 00000000..e73c87be --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/JsonUtil.java @@ -0,0 +1,54 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; + +/** + * @author bozu + * @date 2021/01/06 + */ +public class JsonUtil { + + /** + * 合并两个json + * @param source 源json + * @param target 目标json + * @return 合并后的json + * @throws JSONException + */ + public static String mergeJsonStr(String source, String target) throws JSONException { + if(source == null) { + return target; + } + if(target == null) { + return source; + } + return JSON.toJSONString(deepMerge(JSON.parseObject(source), JSON.parseObject(target))); + } + + /** + * 深度合并两个json对象,将source的值,merge到target中 + * @param source 源json + * @param target 目标json + * @return 合并后的json + * @throws JSONException + */ + private static JSONObject deepMerge(JSONObject source, JSONObject target) throws JSONException { + for (String key: source.keySet()) { + Object value = source.get(key); + if (target.containsKey(key)) { + // existing value for "key" - recursively deep merge: + if (value instanceof JSONObject) { + JSONObject valueJson = (JSONObject)value; + deepMerge(valueJson, target.getJSONObject(key)); + } else { + target.put(key, value); + } + } else { + target.put(key, value); + } + } + return target; + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/Key.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/Key.java index 0f2d3f5c..af197711 100644 --- a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/Key.java +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/Key.java @@ -1,9 +1,13 @@ package com.alibaba.datax.plugin.writer.elasticsearchwriter; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; + import org.apache.commons.lang3.StringUtils; import java.util.HashMap; +import java.util.List; import java.util.Map; public final class Key { @@ -37,31 +41,35 @@ public final class Key { public static String getEndpoint(Configuration conf) { - return conf.getNecessaryValue("endpoint", ESWriterErrorCode.BAD_CONFIG_VALUE); + return conf.getNecessaryValue("endpoint", ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE); } - public static String getAccessID(Configuration conf) { - return conf.getString("accessId", ""); + public static String getUsername(Configuration conf) { + return conf.getString("username", conf.getString("accessId")); } - public static String getAccessKey(Configuration conf) { - return conf.getString("accessKey", ""); + public static String getPassword(Configuration conf) { + return conf.getString("password", conf.getString("accessKey")); } public static int getBatchSize(Configuration conf) { - return conf.getInt("batchSize", 1000); + return conf.getInt("batchSize", 1024); } public static int getTrySize(Configuration conf) { return conf.getInt("trySize", 30); } + public static long getTryInterval(Configuration conf) { + return conf.getLong("tryInterval", 60000L); + } + public static int getTimeout(Configuration conf) { return conf.getInt("timeout", 600000); } - public static boolean isCleanup(Configuration conf) { - return conf.getBool("cleanup", false); + public static boolean isTruncate(Configuration conf) { + return conf.getBool("truncate", conf.getBool("cleanup", false)); } public static boolean isDiscovery(Configuration conf) { @@ -69,7 +77,7 @@ public final class Key { } public static boolean isCompression(Configuration conf) { - return conf.getBool("compression", true); + return conf.getBool("compress", conf.getBool("compression", true)); } public static boolean isMultiThread(Configuration conf) { @@ -77,9 +85,17 @@ public final class Key { } public static String getIndexName(Configuration conf) { - return conf.getNecessaryValue("index", ESWriterErrorCode.BAD_CONFIG_VALUE); + return conf.getNecessaryValue("index", ElasticSearchWriterErrorCode.BAD_CONFIG_VALUE); } + public static String getDeleteBy(Configuration conf) { + return conf.getString("deleteBy"); + } + + + /** + * TODO: 在7.0开始,一个索引只能建一个Type为_doc + * */ public static String getTypeName(Configuration conf) { String indexType = conf.getString("indexType"); if(StringUtils.isBlank(indexType)){ @@ -128,4 +144,58 @@ public final class Key { public static boolean getDynamic(Configuration conf) { return conf.getBool("dynamic", false); } + + public static String getDstDynamic(Configuration conf) { + return conf.getString("dstDynamic"); + } + + public static String getDiscoveryFilter(Configuration conf){ + return conf.getString("discoveryFilter","_all"); + } + + public static Boolean getVersioning(Configuration conf) { + return conf.getBool("versioning", false); + } + + public static Long getUnifiedVersion(Configuration conf) { + return conf.getLong("version", System.currentTimeMillis()); + } + + public static Map getUrlParams(Configuration conf) { + return conf.getMap("urlParams", new HashMap()); + } + + public static Integer getESVersion(Configuration conf) { + return conf.getInt("esVersion"); + } + + public static String getMasterTimeout(Configuration conf) { + return conf.getString("masterTimeout", "5m"); + } + + public static boolean isEnableNullUpdate(Configuration conf) { + return conf.getBool("enableWriteNull", true); + } + + public static String getFieldDelimiter(Configuration conf) { + return conf.getString("fieldDelimiter", ""); + } + + public static PrimaryKeyInfo getPrimaryKeyInfo(Configuration conf) { + String primaryKeyInfoString = conf.getString("primaryKeyInfo"); + if (StringUtils.isNotBlank(primaryKeyInfoString)) { + return JSON.parseObject(primaryKeyInfoString, new TypeReference() {}); + } else { + return null; + } + } + + public static List getEsPartitionColumn(Configuration conf) { + String esPartitionColumnString = conf.getString("esPartitionColumn"); + if (StringUtils.isNotBlank(esPartitionColumnString)) { + return JSON.parseObject(esPartitionColumnString, new TypeReference>() {}); + } else { + return null; + } + } } diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/NoReRunException.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/NoReRunException.java new file mode 100644 index 00000000..52064e58 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/NoReRunException.java @@ -0,0 +1,16 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.spi.ErrorCode; + +public class NoReRunException extends DataXException { + public NoReRunException(String errorMessage) { + super(errorMessage); + } + + public NoReRunException(ErrorCode errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PartitionColumn.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PartitionColumn.java new file mode 100644 index 00000000..b99829b2 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PartitionColumn.java @@ -0,0 +1,42 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +public class PartitionColumn { + private String name; + // like: DATA + private String metaType; + private String comment; + // like: VARCHAR + private String type; + + public String getName() { + return name; + } + + public String getMetaType() { + return metaType; + } + + public String getComment() { + return comment; + } + + public String getType() { + return type; + } + + public void setName(String name) { + this.name = name; + } + + public void setMetaType(String metaType) { + this.metaType = metaType; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public void setType(String type) { + this.type = type; + } +} \ No newline at end of file diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PrimaryKeyInfo.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PrimaryKeyInfo.java new file mode 100644 index 00000000..b5821f51 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/PrimaryKeyInfo.java @@ -0,0 +1,47 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter; + +import java.util.List; + +public class PrimaryKeyInfo { + + /** + * 主键类型:PrimaryKeyTypeEnum + * + * pk: 单个(业务)主键 specific: 联合主键 + */ + private String type; + + /** + * 用户定义的联合主键的连接符号 + */ + private String fieldDelimiter; + + /** + * 主键的列的名称 + */ + private List column; + + public String getType() { + return type; + } + + public String getFieldDelimiter() { + return fieldDelimiter; + } + + public List getColumn() { + return column; + } + + public void setType(String type) { + this.type = type; + } + + public void setFieldDelimiter(String fieldDelimiter) { + this.fieldDelimiter = fieldDelimiter; + } + + public void setColumn(List column) { + this.column = column; + } +} \ No newline at end of file diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfo.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfo.java new file mode 100644 index 00000000..173bc9e2 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfo.java @@ -0,0 +1,35 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter.jest; + +import com.google.gson.Gson; +import io.searchbox.action.AbstractAction; +import io.searchbox.client.config.ElasticsearchVersion; + +public class ClusterInfo extends AbstractAction { + @Override + protected String buildURI(ElasticsearchVersion elasticsearchVersion) { + return ""; + } + + @Override + public String getRestMethodName() { + return "GET"; + } + + @Override + public ClusterInfoResult createNewElasticSearchResult(String responseBody, int statusCode, String reasonPhrase, Gson gson) { + return createNewElasticSearchResult(new ClusterInfoResult(gson), responseBody, statusCode, reasonPhrase, gson); + } + + public static class Builder extends AbstractAction.Builder { + + public Builder() { + setHeader("accept", "application/json"); + setHeader("content-type", "application/json"); + } + + @Override + public ClusterInfo build() { + return new ClusterInfo(); + } + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfoResult.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfoResult.java new file mode 100644 index 00000000..b4f49a37 --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/ClusterInfoResult.java @@ -0,0 +1,49 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter.jest; + +import com.google.gson.Gson; +import io.searchbox.client.JestResult; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ClusterInfoResult extends JestResult { + + private static final Pattern FIRST_NUMBER = Pattern.compile("\\d"); + + private static final int SEVEN = 7; + + public ClusterInfoResult(Gson gson) { + super(gson); + } + + public ClusterInfoResult(JestResult source) { + super(source); + } + + /** + * 判断es集群的部署版本是否大于7.x + * 大于7.x的es对于Index的type有较大改动,需要做额外判定 + * 对于7.x与6.x版本的es都做过测试,返回符合预期;5.x以下版本直接try-catch后返回false,向下兼容 + * @return + */ + public Boolean isGreaterOrEqualThan7() throws Exception { + // 如果是没有权限,直接返回false,兼容老版本 + if (responseCode == 403) { + return false; + } + if (!isSucceeded) { + throw new Exception(getJsonString()); + } + try { + String version = jsonObject.getAsJsonObject("version").get("number").toString(); + Matcher matcher = FIRST_NUMBER.matcher(version); + matcher.find(); + String number = matcher.group(); + Integer versionNum = Integer.valueOf(number); + return versionNum >= SEVEN; + } catch (Exception e) { + //5.x 以下版本不做兼容测试,如果返回json格式解析失败,有可能是以下版本,所以认为不大于7.x + return false; + } + } +} diff --git a/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/PutMapping7.java b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/PutMapping7.java new file mode 100644 index 00000000..c9f1d6be --- /dev/null +++ b/elasticsearchwriter/src/main/java/com/alibaba/datax/plugin/writer/elasticsearchwriter/jest/PutMapping7.java @@ -0,0 +1,39 @@ +package com.alibaba.datax.plugin.writer.elasticsearchwriter.jest; + +import io.searchbox.action.GenericResultAbstractAction; +import io.searchbox.client.config.ElasticsearchVersion; + +public class PutMapping7 extends GenericResultAbstractAction { + protected PutMapping7(PutMapping7.Builder builder) { + super(builder); + + this.indexName = builder.index; + this.payload = builder.source; + } + + @Override + protected String buildURI(ElasticsearchVersion elasticsearchVersion) { + return super.buildURI(elasticsearchVersion) + "/_mapping"; + } + + @Override + public String getRestMethodName() { + return "PUT"; + } + + public static class Builder extends GenericResultAbstractAction.Builder { + private String index; + private Object source; + + public Builder(String index, Object source) { + this.index = index; + this.source = source; + } + + @Override + public PutMapping7 build() { + return new PutMapping7(this); + } + } + +} diff --git a/elasticsearchwriter/src/main/resources/plugin.json b/elasticsearchwriter/src/main/resources/plugin.json index b6e6384b..b39f1222 100644 --- a/elasticsearchwriter/src/main/resources/plugin.json +++ b/elasticsearchwriter/src/main/resources/plugin.json @@ -1,6 +1,6 @@ { "name": "elasticsearchwriter", - "class": "com.alibaba.datax.plugin.writer.elasticsearchwriter.ESWriter", + "class": "com.alibaba.datax.plugin.writer.elasticsearchwriter.ElasticSearchWriter", "description": "适用于: 生产环境. 原理: TODO", "developer": "alibaba" } \ No newline at end of file diff --git a/hbase20xsqlreader/src/main/resources/plugin.json b/hbase20xsqlreader/src/main/resources/plugin.json index 45856411..4a7b4edf 100644 --- a/hbase20xsqlreader/src/main/resources/plugin.json +++ b/hbase20xsqlreader/src/main/resources/plugin.json @@ -2,6 +2,6 @@ "name": "hbase20xsqlreader", "class": "com.alibaba.datax.plugin.reader.hbase20xsqlreader.HBase20xSQLReader", "description": "useScene: prod. mechanism: read data from phoenix through queryserver.", - "developer": "bake" + "developer": "alibaba" } diff --git a/hbase20xsqlwriter/src/main/resources/plugin.json b/hbase20xsqlwriter/src/main/resources/plugin.json index 91b7069f..93d3002a 100755 --- a/hbase20xsqlwriter/src/main/resources/plugin.json +++ b/hbase20xsqlwriter/src/main/resources/plugin.json @@ -2,6 +2,6 @@ "name": "hbase20xsqlwriter", "class": "com.alibaba.datax.plugin.writer.hbase20xsqlwriter.HBase20xSQLWriter", "description": "useScene: prod. mechanism: use hbase sql UPSERT to put data, index tables will be updated too.", - "developer": "bake" + "developer": "alibaba" } diff --git a/loghubreader/pom.xml b/loghubreader/pom.xml new file mode 100644 index 00000000..b2f52f3d --- /dev/null +++ b/loghubreader/pom.xml @@ -0,0 +1,73 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + loghubreader + + 0.0.1-SNAPSHOT + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + com.aliyun.openservices + aliyun-log + 0.6.22 + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/loghubreader/src/main/assembly/package.xml b/loghubreader/src/main/assembly/package.xml new file mode 100644 index 00000000..e1d8d739 --- /dev/null +++ b/loghubreader/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + + plugin/reader/loghubreader + + + target/ + + loghubreader-0.0.1-SNAPSHOT.jar + + plugin/reader/loghubreader + + + + + + false + plugin/reader/loghubreader/libs + runtime + + + diff --git a/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Constant.java b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Constant.java new file mode 100644 index 00000000..fd9e88dc --- /dev/null +++ b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Constant.java @@ -0,0 +1,26 @@ +package com.alibaba.datax.plugin.reader.loghubreader; + +public class Constant { + + public static String DATETIME_FORMAT = "yyyyMMddHHmmss"; + public static String DATE_FORMAT = "yyyyMMdd"; + + static String META_COL_SOURCE = "__source__"; + static String META_COL_TOPIC = "__topic__"; + static String META_COL_CATEGORY = "__category__"; + static String META_COL_MACHINEUUID = "__machineUUID__"; + static String META_COL_HOSTNAME = "__hostname__"; + static String META_COL_PATH = "__path__"; + static String META_COL_LOGTIME = "__logtime__"; + public static String META_COL_RECEIVE_TIME = "__receive_time__"; + + /** + * 除用户手动配置的列之外,其余数据列作为一个 json 读取到一列 + */ + static String COL_EXTRACT_OTHERS = "C__extract_others__"; + + /** + * 将所有元数据列作为一个 json 读取到一列 + */ + static String COL_EXTRACT_ALL_META = "C__extract_all_meta__"; +} diff --git a/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Key.java b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Key.java new file mode 100644 index 00000000..9067cc68 --- /dev/null +++ b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/Key.java @@ -0,0 +1,38 @@ +package com.alibaba.datax.plugin.reader.loghubreader; + +public final class Key { + + /** + * 此处声明插件用到的需要插件使用者提供的配置项 + */ + public static final String ENDPOINT = "endpoint"; + + public static final String ACCESSKEYID = "accessId"; + + public static final String ACCESSKEYSECRET = "accessKey"; + + public static final String PROJECT = "project"; + + public static final String LOGSTORE = "logstore"; + + public static final String TOPIC = "topic"; + + public static final String COLUMN = "column"; + + public static final String BATCHSIZE = "batchSize"; + + public static final String BEGINTIMESTAMPMILLIS = "beginTimestampMillis"; + + public static final String ENDTIMESTAMPMILLIS = "endTimestampMillis"; + + public static final String BEGINDATETIME = "beginDateTime"; + + public static final String ENDDATETIME = "endDateTime"; + + public static final String TIMEFORMAT = "timeformat"; + + public static final String SOURCE = "source"; + + public static final String SHARD = "shard"; + +} diff --git a/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReader.java b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReader.java new file mode 100644 index 00000000..f25fbc61 --- /dev/null +++ b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReader.java @@ -0,0 +1,482 @@ +package com.alibaba.datax.plugin.reader.loghubreader; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.element.StringColumn; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordSender; +import com.alibaba.datax.common.spi.Reader; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.DataXCaseEnvUtil; +import com.alibaba.datax.common.util.RetryUtil; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.log.Client; +import com.aliyun.openservices.log.common.Consts.CursorMode; +import com.aliyun.openservices.log.common.*; +import com.aliyun.openservices.log.exception.LogException; +import com.aliyun.openservices.log.response.BatchGetLogResponse; +import com.aliyun.openservices.log.response.GetCursorResponse; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.Callable; + +public class LogHubReader extends Reader { + public static class Job extends Reader.Job { + + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + + private Client client; + private Configuration originalConfig; + + private Long beginTimestampMillis; + private Long endTimestampMillis; + + @Override + public void init() { + LOG.info("loghub reader job init begin ..."); + this.originalConfig = super.getPluginJobConf(); + validateParameter(originalConfig); + + String endPoint = this.originalConfig.getString(Key.ENDPOINT); + String accessKeyId = this.originalConfig.getString(Key.ACCESSKEYID); + String accessKeySecret = this.originalConfig.getString(Key.ACCESSKEYSECRET); + + client = new Client(endPoint, accessKeyId, accessKeySecret); + LOG.info("loghub reader job init end."); + } + + private void validateParameter(Configuration conf){ + conf.getNecessaryValue(Key.ENDPOINT,LogHubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESSKEYID,LogHubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESSKEYSECRET,LogHubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.PROJECT,LogHubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.LOGSTORE,LogHubReaderErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.COLUMN,LogHubReaderErrorCode.REQUIRE_VALUE); + + int batchSize = this.originalConfig.getInt(Key.BATCHSIZE); + if (batchSize > 1000) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid batchSize[" + batchSize + "] value (0,1000]!"); + } + + beginTimestampMillis = this.originalConfig.getLong(Key.BEGINTIMESTAMPMILLIS); + String beginDateTime = this.originalConfig.getString(Key.BEGINDATETIME); + + if (beginDateTime != null) { + try { + beginTimestampMillis = getUnixTimeFromDateTime(beginDateTime); + } catch (ParseException e) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginDateTime[" + beginDateTime + "], format [yyyyMMddHHmmss or yyyyMMdd]!"); + } + } + + if (beginTimestampMillis != null && beginTimestampMillis <= 0) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginTimestampMillis[" + beginTimestampMillis + "]!"); + } + + endTimestampMillis = this.originalConfig.getLong(Key.ENDTIMESTAMPMILLIS); + String endDateTime = this.originalConfig.getString(Key.ENDDATETIME); + + if (endDateTime != null) { + try { + endTimestampMillis = getUnixTimeFromDateTime(endDateTime); + } catch (ParseException e) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid beginDateTime[" + endDateTime + "], format [yyyyMMddHHmmss or yyyyMMdd]!"); + } + } + + if (endTimestampMillis != null && endTimestampMillis <= 0) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid endTimestampMillis[" + endTimestampMillis + "]!"); + } + + if (beginTimestampMillis != null && endTimestampMillis != null + && endTimestampMillis <= beginTimestampMillis) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "endTimestampMillis[" + endTimestampMillis + "] must bigger than beginTimestampMillis[" + beginTimestampMillis + "]!"); + } + } + + private long getUnixTimeFromDateTime(String dateTime) throws ParseException { + try { + String format = Constant.DATETIME_FORMAT; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); + return simpleDateFormat.parse(dateTime).getTime() / 1000; + } catch (ParseException ignored) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "Invalid DateTime[" + dateTime + "]!"); + } + } + + @Override + public void prepare() { + } + + @Override + public List split(int adviceNumber) { + LOG.info("split() begin..."); + + List readerSplitConfigs = new ArrayList(); + + final String project = this.originalConfig.getString(Key.PROJECT); + final String logstore = this.originalConfig.getString(Key.LOGSTORE); + + List logStore = null; + try { + logStore = RetryUtil.executeWithRetry(new Callable>() { + @Override + public List call() throws Exception { + return client.ListShard(project, logstore).GetShards(); + } + }, DataXCaseEnvUtil.getRetryTimes(7), DataXCaseEnvUtil.getRetryInterval(1000L), DataXCaseEnvUtil.getRetryExponential(true)); + } catch (Exception e) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "get LogStore[" + logstore + "] error, please check ! detail error messsage: " + e.toString()); + } + + if (logStore == null) { + throw DataXException.asDataXException(LogHubReaderErrorCode.BAD_CONFIG_VALUE, + "LogStore[" + logstore + "] isn't exists, please check !"); + } + + int splitNumber = logStore.size(); + if (0 == splitNumber) { + throw DataXException.asDataXException(LogHubReaderErrorCode.EMPTY_LOGSTORE_VALUE, + "LogStore[" + logstore + "] has 0 shard, please check !"); + } + + Collections.shuffle(logStore); + for (int i = 0; i < logStore.size(); i++) { + if (beginTimestampMillis != null && endTimestampMillis != null) { + try { + String beginCursor = getCursorWithRetry(client, project, logstore, logStore.get(i).GetShardId(), beginTimestampMillis).GetCursor(); + String endCursor = getCursorWithRetry(client, project, logstore, logStore.get(i).GetShardId(), endTimestampMillis).GetCursor(); + if (beginCursor.equals(endCursor)) { + if ((i == logStore.size() - 1) && (readerSplitConfigs.size() == 0)) { + + } else { + LOG.info("skip empty shard[" + logStore.get(i) + "]!"); + continue; + } + } + } catch (Exception e) { + LOG.error("Check Shard[" + logStore.get(i) + "] Error, please check !" + e.toString()); + throw DataXException.asDataXException(LogHubReaderErrorCode.LOG_HUB_ERROR, e); + } + } + Configuration splitedConfig = this.originalConfig.clone(); + splitedConfig.set(Key.SHARD, logStore.get(i).GetShardId()); + readerSplitConfigs.add(splitedConfig); + } + + if (splitNumber < adviceNumber) { + // LOG.info(MESSAGE_SOURCE.message("hdfsreader.12", + // splitNumber, adviceNumber, splitNumber, splitNumber)); + } + LOG.info("split() ok and end..."); + + return readerSplitConfigs; + } + + @Override + public void post() { + } + + @Override + public void destroy() { + } + + private GetCursorResponse getCursorWithRetry(final Client client, final String project, final String logstore, final int shard, final long fromTime) throws Exception { + return + RetryUtil.executeWithRetry(new Callable() { + @Override + public GetCursorResponse call() throws Exception { + LOG.info("loghug get cursor with project: {} logstore: {} shard: {} time: {}", project, logstore, shard, fromTime); + return client.GetCursor(project, logstore, shard, fromTime); + } + }, 7, 1000L, true); + } + + } + + public static class Task extends Reader.Task { + + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + + private Configuration taskConfig; + private Client client; + private String endPoint; + private String accessKeyId; + private String accessKeySecret; + private String project; + private String logstore; + private long beginTimestampMillis; + private long endTimestampMillis; + private int batchSize; + private int shard; + private List columns; + + @Override + public void init() { + this.taskConfig = super.getPluginJobConf(); + + endPoint = this.taskConfig.getString(Key.ENDPOINT); + accessKeyId = this.taskConfig.getString(Key.ACCESSKEYID); + accessKeySecret = this.taskConfig.getString(Key.ACCESSKEYSECRET); + project = this.taskConfig.getString(Key.PROJECT); + logstore = this.taskConfig.getString(Key.LOGSTORE); + batchSize = this.taskConfig.getInt(Key.BATCHSIZE, 128); + + this.beginTimestampMillis = this.taskConfig.getLong(Key.BEGINTIMESTAMPMILLIS, -1); + String beginDateTime = this.taskConfig.getString(Key.BEGINDATETIME); + + if (beginDateTime != null) { + try { + beginTimestampMillis = getUnixTimeFromDateTime(beginDateTime); + } catch (ParseException e) { + } + } + + this.endTimestampMillis = this.taskConfig.getLong(Key.ENDTIMESTAMPMILLIS, -1); + String endDateTime = this.taskConfig.getString(Key.ENDDATETIME); + + if (endDateTime != null) { + try { + endTimestampMillis = getUnixTimeFromDateTime(endDateTime); + } catch (ParseException e) { + } + } + + columns = this.taskConfig.getList(Key.COLUMN, String.class); + + shard = this.taskConfig.getInt(Key.SHARD); + + client = new Client(endPoint, accessKeyId, accessKeySecret); + LOG.info("init loghub reader task finished.project:{} logstore:{} batchSize:{}", project, logstore, batchSize); + } + + @Override + public void prepare() { + } + + private long getUnixTimeFromDateTime(String dateTime) throws ParseException { + try { + String format = Constant.DATETIME_FORMAT; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); + return simpleDateFormat.parse(dateTime).getTime() / 1000; + } catch (ParseException ignored) { + } + String format = Constant.DATE_FORMAT; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); + return simpleDateFormat.parse(dateTime).getTime() / 1000; + } + + private GetCursorResponse getCursorWithRetry(final Client client, final String project, final String logstore, final int shard, final long fromTime) throws Exception { + return + RetryUtil.executeWithRetry(new Callable() { + @Override + public GetCursorResponse call() throws Exception { + LOG.info("loghug get cursor with project: {} logstore: {} shard: {} time: {}", project, logstore, shard, fromTime); + return client.GetCursor(project, logstore, shard, fromTime); + } + }, 7, 1000L, true); + } + + private GetCursorResponse getCursorWithRetry(final Client client, final String project, final String logstore, final int shard, final CursorMode mode) throws Exception { + return + RetryUtil.executeWithRetry(new Callable() { + @Override + public GetCursorResponse call() throws Exception { + LOG.info("loghug get cursor with project: {} logstore: {} shard: {} mode: {}", project, logstore, shard, mode); + return client.GetCursor(project, logstore, shard, mode); + } + }, 7, 1000L, true); + } + + private BatchGetLogResponse batchGetLogWithRetry(final Client client, final String project, final String logstore, final int shard, final int batchSize, + final String curCursor, final String endCursor) throws Exception { + return + RetryUtil.executeWithRetry(new Callable() { + @Override + public BatchGetLogResponse call() throws Exception { + return client.BatchGetLog(project, logstore, shard, batchSize, curCursor, endCursor); + } + }, 7, 1000L, true); + } + + @Override + public void startRead(RecordSender recordSender) { + LOG.info("read start"); + + try { + GetCursorResponse cursorRes; + if (this.beginTimestampMillis != -1) { + cursorRes = getCursorWithRetry(client, project, logstore, this.shard, beginTimestampMillis); + } else { + cursorRes = getCursorWithRetry(client, project, logstore, this.shard, CursorMode.BEGIN); + } + String beginCursor = cursorRes.GetCursor(); + + LOG.info("the begin cursor, loghub requestId: {} cursor: {}", cursorRes.GetRequestId(), cursorRes.GetCursor()); + + if (this.endTimestampMillis != -1) { + cursorRes = getCursorWithRetry(client, project, logstore, this.shard, endTimestampMillis); + } else { + cursorRes = getCursorWithRetry(client, project, logstore, this.shard, CursorMode.END); + } + String endCursor = cursorRes.GetCursor(); + LOG.info("the end cursor, loghub requestId: {} cursor: {}", cursorRes.GetRequestId(), cursorRes.GetCursor()); + + if (StringUtils.equals(beginCursor, endCursor)) { + LOG.info("beginCursor:{} equals endCursor:{}, end directly!", beginCursor, endCursor); + return; + } + + String currentCursor = null; + String nextCursor = beginCursor; + + HashMap metaMap = new HashMap(); + HashMap dataMap = new HashMap(); + JSONObject allMetaJson = new JSONObject(); + while (!StringUtils.equals(currentCursor, nextCursor)) { + currentCursor = nextCursor; + BatchGetLogResponse logDataRes = batchGetLogWithRetry(client, project, logstore, this.shard, this.batchSize, currentCursor, endCursor); + + List logGroups = logDataRes.GetLogGroups(); + + for(LogGroupData logGroup: logGroups) { + metaMap.clear(); + allMetaJson.clear(); + FastLogGroup flg = logGroup.GetFastLogGroup(); + + metaMap.put("C_Category", flg.getCategory()); + metaMap.put(Constant.META_COL_CATEGORY, flg.getCategory()); + allMetaJson.put(Constant.META_COL_CATEGORY, flg.getCategory()); + + metaMap.put("C_Source", flg.getSource()); + metaMap.put(Constant.META_COL_SOURCE, flg.getSource()); + allMetaJson.put(Constant.META_COL_SOURCE, flg.getSource()); + + metaMap.put("C_Topic", flg.getTopic()); + metaMap.put(Constant.META_COL_TOPIC, flg.getTopic()); + allMetaJson.put(Constant.META_COL_TOPIC, flg.getTopic()); + + metaMap.put("C_MachineUUID", flg.getMachineUUID()); + metaMap.put(Constant.META_COL_MACHINEUUID, flg.getMachineUUID()); + allMetaJson.put(Constant.META_COL_MACHINEUUID, flg.getMachineUUID()); + + for (int tagIdx = 0; tagIdx < flg.getLogTagsCount(); ++tagIdx) { + FastLogTag logtag = flg.getLogTags(tagIdx); + String tagKey = logtag.getKey(); + String tagValue = logtag.getValue(); + if (tagKey.equals(Constant.META_COL_HOSTNAME)) { + metaMap.put("C_HostName", logtag.getValue()); + } else if (tagKey.equals(Constant.META_COL_PATH)) { + metaMap.put("C_Path", logtag.getValue()); + } + metaMap.put(tagKey, tagValue); + allMetaJson.put(tagKey, tagValue); + } + + for (int lIdx = 0; lIdx < flg.getLogsCount(); ++lIdx) { + dataMap.clear(); + FastLog log = flg.getLogs(lIdx); + + String logTime = String.valueOf(log.getTime()); + metaMap.put("C_LogTime", logTime); + metaMap.put(Constant.META_COL_LOGTIME, logTime); + allMetaJson.put(Constant.META_COL_LOGTIME, logTime); + + for (int cIdx = 0; cIdx < log.getContentsCount(); ++cIdx) { + FastLogContent content = log.getContents(cIdx); + dataMap.put(content.getKey(), content.getValue()); + } + + Record record = recordSender.createRecord(); + + JSONObject extractOthers = new JSONObject(); + if(columns.contains(Constant.COL_EXTRACT_OTHERS)){ + List keyList = Arrays.asList(dataMap.keySet().toArray(new String[dataMap.keySet().size()])); + for (String otherKey:keyList) { + if (!columns.contains(otherKey)){ + extractOthers.put(otherKey,dataMap.get(otherKey)); + } + } + } + if (null != this.columns && 1 == this.columns.size()) { + String columnsInStr = columns.get(0).toString(); + if ("\"*\"".equals(columnsInStr) || "*".equals(columnsInStr)) { + List keyList = Arrays.asList(dataMap.keySet().toArray(new String[dataMap.keySet().size()])); + Collections.sort(keyList); + + for (String key : keyList) { + record.addColumn(new StringColumn(key + ":" + dataMap.get(key))); + } + } else { + if (dataMap.containsKey(columnsInStr)) { + record.addColumn(new StringColumn(dataMap.get(columnsInStr))); + } else if (metaMap.containsKey(columnsInStr)) { + record.addColumn(new StringColumn(metaMap.get(columnsInStr))); + } else if (Constant.COL_EXTRACT_OTHERS.equals(columnsInStr)){ + record.addColumn(new StringColumn(extractOthers.toJSONString())); + } else if (Constant.COL_EXTRACT_ALL_META.equals(columnsInStr)) { + record.addColumn(new StringColumn(allMetaJson.toJSONString())); + } + } + } else { + for (String col : this.columns) { + if (dataMap.containsKey(col)) { + record.addColumn(new StringColumn(dataMap.get(col))); + } else if (metaMap.containsKey(col)) { + record.addColumn(new StringColumn(metaMap.get(col))); + } else if (col != null && col.startsWith("'") && col.endsWith("'")){ + String constant = col.substring(1, col.length()-1); + record.addColumn(new StringColumn(constant)); + }else if (Constant.COL_EXTRACT_OTHERS.equals(col)){ + record.addColumn(new StringColumn(extractOthers.toJSONString())); + } else if (Constant.COL_EXTRACT_ALL_META.equals(col)) { + record.addColumn(new StringColumn(allMetaJson.toJSONString())); + } else { + record.addColumn(new StringColumn(null)); + } + } + } + + recordSender.sendToWriter(record); + } + } + + nextCursor = logDataRes.GetNextCursor(); + } + } catch (LogException e) { + if (e.GetErrorCode().equals("LogStoreNotExist")) { + LOG.info("logStore[" + logstore +"] Not Exits! detail error messsage: " + e.toString()); + } else { + LOG.error("read LogStore[" + logstore + "] error, please check ! detail error messsage: " + e.toString()); + throw DataXException.asDataXException(LogHubReaderErrorCode.LOG_HUB_ERROR, e); + } + + } catch (Exception e) { + LOG.error("read LogStore[" + logstore + "] error, please check ! detail error messsage: " + e.toString()); + throw DataXException.asDataXException(LogHubReaderErrorCode.LOG_HUB_ERROR, e); + } + + LOG.info("end read loghub shard..."); + } + + @Override + public void post() { + } + + @Override + public void destroy() { + } + } +} diff --git a/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReaderErrorCode.java b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReaderErrorCode.java new file mode 100644 index 00000000..d9ee4c8e --- /dev/null +++ b/loghubreader/src/main/java/com/alibaba/datax/plugin/reader/loghubreader/LogHubReaderErrorCode.java @@ -0,0 +1,34 @@ +package com.alibaba.datax.plugin.reader.loghubreader; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum LogHubReaderErrorCode implements ErrorCode { + BAD_CONFIG_VALUE("LogHuReader-00", "The value you configured is invalid."), + LOG_HUB_ERROR("LogHubReader-01","LogHub access encounter exception"), + REQUIRE_VALUE("LogHubReader-02","Missing parameters"), + EMPTY_LOGSTORE_VALUE("LogHubReader-03","There is no shard in this LogStore"); + + private final String code; + private final String description; + + private LogHubReaderErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} diff --git a/loghubreader/src/main/resources/plugin.json b/loghubreader/src/main/resources/plugin.json new file mode 100644 index 00000000..31403dd6 --- /dev/null +++ b/loghubreader/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "loghubreader", + "class": "com.alibaba.datax.plugin.reader.loghubreader.LogHubReader", + "description": "适用于: 从SLS LogHub中读取数据", + "developer": "alibaba" +} \ No newline at end of file diff --git a/loghubreader/src/main/resources/plugin_job_template.json b/loghubreader/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..4d536eb9 --- /dev/null +++ b/loghubreader/src/main/resources/plugin_job_template.json @@ -0,0 +1,12 @@ +{ + "name": "loghubreader", + "parameter": { + "endpoint": "", + "accessId": "", + "accessKey": "", + "project": "", + "logstore": "", + "batchSize":1024, + "column": [] + } +} \ No newline at end of file diff --git a/loghubwriter/pom.xml b/loghubwriter/pom.xml new file mode 100644 index 00000000..d43b7286 --- /dev/null +++ b/loghubwriter/pom.xml @@ -0,0 +1,73 @@ + + + + datax-all + com.alibaba.datax + 0.0.1-SNAPSHOT + + 4.0.0 + + loghubwriter + + 0.0.1-SNAPSHOT + + + + com.alibaba.datax + datax-common + ${datax-project-version} + + + slf4j-log4j12 + org.slf4j + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + com.aliyun.openservices + aliyun-log + 0.6.12 + + + + + + + + maven-compiler-plugin + + ${jdk-version} + ${jdk-version} + ${project-sourceEncoding} + + + + + maven-assembly-plugin + + + src/main/assembly/package.xml + + datax + + + + dwzip + package + + single + + + + + + + diff --git a/loghubwriter/src/main/assembly/package.xml b/loghubwriter/src/main/assembly/package.xml new file mode 100644 index 00000000..44d25a48 --- /dev/null +++ b/loghubwriter/src/main/assembly/package.xml @@ -0,0 +1,34 @@ + + + + dir + + false + + + src/main/resources + + plugin.json + + plugin/writer/loghubwriter + + + target/ + + loghubwriter-0.0.1-SNAPSHOT.jar + + plugin/writer/loghubwriter + + + + + + false + plugin/writer/loghubwriter/libs + runtime + + + diff --git a/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/Key.java b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/Key.java new file mode 100644 index 00000000..bdfe3fa5 --- /dev/null +++ b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/Key.java @@ -0,0 +1,35 @@ +package com.alibaba.datax.plugin.writer.loghubwriter; + +/** + * 配置关键字 + * @author + */ +public final class Key { + + /** + * 此处声明插件用到的需要插件使用者提供的配置项 + */ + public static final String ENDPOINT = "endpoint"; + + public static final String ACCESS_KEY_ID = "accessId"; + + public static final String ACCESS_KEY_SECRET = "accessKey"; + + public static final String PROJECT = "project"; + + public static final String LOG_STORE = "logstore"; + + public static final String TOPIC = "topic"; + + public static final String COLUMN = "column"; + + public static final String BATCH_SIZE = "batchSize"; + + public static final String TIME = "time"; + + public static final String TIME_FORMAT = "timeformat"; + + public static final String SOURCE = "source"; + + public static final String HASH_BY_KEY = "hashKey"; +} diff --git a/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriter.java b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriter.java new file mode 100644 index 00000000..bf60d08c --- /dev/null +++ b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriter.java @@ -0,0 +1,315 @@ +package com.alibaba.datax.plugin.writer.loghubwriter; + +import com.alibaba.datax.common.element.Record; +import com.alibaba.datax.common.exception.DataXException; +import com.alibaba.datax.common.plugin.RecordReceiver; +import com.alibaba.datax.common.spi.Writer; +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.RetryUtil; +import com.alibaba.datax.common.util.StrUtil; +import com.aliyun.openservices.log.Client; +import com.aliyun.openservices.log.common.LogItem; +import com.aliyun.openservices.log.common.Shard; +import com.aliyun.openservices.log.exception.LogException; +import com.aliyun.openservices.log.request.ListShardRequest; +import com.aliyun.openservices.log.request.PutLogsRequest; +import com.aliyun.openservices.log.response.ListShardResponse; +import com.aliyun.openservices.log.response.PutLogsResponse; + +import org.apache.commons.codec.digest.Md5Crypt; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sun.security.provider.MD5; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +/** + * SLS 写插件 + * @author + */ +public class LogHubWriter extends Writer { + + public static class Job extends Writer.Job { + private static final Logger LOG = LoggerFactory.getLogger(Job.class); + + private Configuration jobConfig = null; + + @Override + public void init() { + info(LOG, "loghub writer job init begin ..."); + this.jobConfig = super.getPluginJobConf(); + validateParameter(jobConfig); + info(LOG, "loghub writer job init end."); + } + + private void validateParameter(Configuration conf){ + conf.getNecessaryValue(Key.ENDPOINT,LogHubWriterErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESS_KEY_ID,LogHubWriterErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.ACCESS_KEY_SECRET,LogHubWriterErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.PROJECT,LogHubWriterErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.LOG_STORE,LogHubWriterErrorCode.REQUIRE_VALUE); + conf.getNecessaryValue(Key.COLUMN,LogHubWriterErrorCode.REQUIRE_VALUE); + } + + @Override + public List split(int mandatoryNumber) { + info(LOG, "split begin..."); + List configurationList = new ArrayList(); + for (int i = 0; i < mandatoryNumber; i++) { + configurationList.add(this.jobConfig.clone()); + } + info(LOG, "split end..."); + return configurationList; + } + + @Override + public void post() { + } + + @Override + public void destroy() { + } + } + + public static class Task extends Writer.Task { + private static final Logger LOG = LoggerFactory.getLogger(Task.class); + private Configuration taskConfig; + private com.aliyun.openservices.log.Client logHubClient; + private String logStore; + private String topic; + private String project; + private List columnList; + private int batchSize; + private String timeCol; + private String timeFormat; + private String source; + private boolean isHashKey; + private List shards; + public void init() { + this.taskConfig = super.getPluginJobConf(); + String endpoint = taskConfig.getString(Key.ENDPOINT); + String accessKeyId = taskConfig.getString(Key.ACCESS_KEY_ID); + String accessKeySecret = taskConfig.getString(Key.ACCESS_KEY_SECRET); + project = taskConfig.getString(Key.PROJECT); + logStore = taskConfig.getString(Key.LOG_STORE); + topic = taskConfig.getString(Key.TOPIC,""); + columnList = taskConfig.getList(Key.COLUMN,String.class); + batchSize = taskConfig.getInt(Key.BATCH_SIZE,1024); + timeCol = taskConfig.getString(Key.TIME,""); + timeFormat = taskConfig.getString(Key.TIME_FORMAT,""); + source = taskConfig.getString(Key.SOURCE,""); + isHashKey = taskConfig.getBool(Key.HASH_BY_KEY,false); + logHubClient = new Client(endpoint, accessKeyId, accessKeySecret); + if (isHashKey) { + listShard(); + info(LOG, "init loghub writer with hash key mode."); + } + if (LOG.isInfoEnabled()) { + LOG.info("init loghub writer task finished.project:{} logstore:{} topic:{} batchSize:{}",project,logStore,topic,batchSize); + } + } + + /** + * 获取通道的分片信息 + */ + private void listShard() { + try { + ListShardResponse response = logHubClient.ListShard(new ListShardRequest(project,logStore)); + shards = response.GetShards(); + if (LOG.isInfoEnabled()) { + LOG.info("Get shard count:{}", shards.size()); + } + } catch (LogException e) { + info(LOG, "Get shard failed!"); + throw new RuntimeException("Get shard failed!", e); + } + } + + @Override + public void prepare() { + } + + private int getTime(String v) { + try { + if ("bigint".equalsIgnoreCase(timeFormat)) { + return Integer.valueOf(v); + } + + DateFormat sdf = new SimpleDateFormat(timeFormat); + Date date = sdf.parse(v); + return (int)(date.getTime()/1000); + } catch (Exception e) { + LOG.warn("Format time failed!", e); + } + return (int)(((new Date())).getTime()/1000); + } + + @Override + public void startWrite(RecordReceiver recordReceiver) { + info(LOG, "start to write....................."); + // 按照shared做hash处理 + if (isHashKey) { + processDataWithHashKey(recordReceiver); + } else { + processDataWithoutHashKey(recordReceiver); + } + info(LOG, "finish to write........."); + } + + private void processDataWithHashKey(RecordReceiver receiver) { + Record record; + Map> logMap = new HashMap>(shards.size()); + int count = 0; + try { + while ((record = receiver.getFromReader()) != null) { + LogItem logItem = new LogItem(); + if (record.getColumnNumber() != columnList.size()) { + this.getTaskPluginCollector().collectDirtyRecord(record, "column not match"); + } + + String id = ""; + for (int i = 0; i < record.getColumnNumber(); i++) { + String colName = columnList.get(i); + String colValue = record.getColumn(i).asString(); + if (colName.endsWith("_id")) { + id = colValue; + } + + logItem.PushBack(colName, colValue); + if (colName.equals(timeCol)) { + logItem.SetTime(getTime(colValue)); + } + } + + String hashKey = getShardHashKey(StrUtil.getMd5(id), shards); + if (!logMap.containsKey(hashKey)) { + info(LOG, "Hash key:" + hashKey); + logMap.put(hashKey, new ArrayList()); + } + logMap.get(hashKey).add(logItem); + + if (logMap.get(hashKey).size() % batchSize == 0) { + PutLogsRequest request = new PutLogsRequest(project, logStore, topic, source, logMap.get(hashKey), hashKey); + PutLogsResponse response = putLog(request); + count += logMap.get(hashKey).size(); + if (LOG.isDebugEnabled()) { + LOG.debug("record count:{}, request id:{}", logMap.get(hashKey).size(), response.GetRequestId()); + } + logMap.get(hashKey).clear(); + } + } + + for (Map.Entry> entry : logMap.entrySet()) { + if (!entry.getValue().isEmpty()) { + // 将剩余的数据发送 + PutLogsRequest request = new PutLogsRequest(project, logStore, topic, source, entry.getValue(), entry.getKey()); + PutLogsResponse response = putLog(request); + count += entry.getValue().size(); + if (LOG.isDebugEnabled()) { + LOG.debug("record count:{}, request id:{}", entry.getValue().size(), response.GetRequestId()); + } + entry.getValue().clear(); + } + } + LOG.info("{} records have been sent", count); + } catch (LogException ex) { + throw DataXException.asDataXException(LogHubWriterErrorCode.LOG_HUB_ERROR, ex.getMessage(), ex); + } catch (Exception e) { + throw DataXException.asDataXException(LogHubWriterErrorCode.LOG_HUB_ERROR, e.getMessage(), e); + } + } + + private void processDataWithoutHashKey(RecordReceiver receiver) { + Record record; + ArrayList logGroup = new ArrayList(); + int count = 0; + try { + while ((record = receiver.getFromReader()) != null) { + LogItem logItem = new LogItem(); + if(record.getColumnNumber() != columnList.size()){ + this.getTaskPluginCollector().collectDirtyRecord(record,"column not match"); + } + for (int i = 0; i < record.getColumnNumber(); i++) { + String colName = columnList.get(i); + String colValue = record.getColumn(i).asString(); + logItem.PushBack(colName, colValue); + if(colName.equals(timeCol)){ + logItem.SetTime(getTime(colValue)); + } + } + + logGroup.add(logItem); + count++; + if (count % batchSize == 0) { + PutLogsRequest request = new PutLogsRequest(project, logStore, topic, source, logGroup); + PutLogsResponse response = putLog(request); + logGroup.clear(); + if (LOG.isDebugEnabled()) { + LOG.debug("record count:{}, request id:{}", count, response.GetRequestId()); + } + } + } + if (!logGroup.isEmpty()) { + //将剩余的数据发送 + PutLogsRequest request = new PutLogsRequest(project, logStore, topic, source, logGroup); + PutLogsResponse response = putLog(request); + logGroup.clear(); + if (LOG.isDebugEnabled()) { + LOG.debug("record count:{}, request id:{}", count, response.GetRequestId()); + } + } + LOG.info("{} records have been sent", count); + } catch (LogException ex) { + throw DataXException.asDataXException(LogHubWriterErrorCode.LOG_HUB_ERROR, ex.getMessage(), ex); + } catch (Exception e) { + throw DataXException.asDataXException(LogHubWriterErrorCode.LOG_HUB_ERROR, e.getMessage(), e); + } + } + + private PutLogsResponse putLog(final PutLogsRequest request) throws Exception{ + final Client client = this.logHubClient; + + return RetryUtil.executeWithRetry(new Callable() { + public PutLogsResponse call() throws LogException{ + return client.PutLogs(request); + } + }, 3, 1000L, false); + } + + private String getShardHashKey(String hashKey, List shards) { + for (Shard shard : shards) { + if (hashKey.compareTo(shard.getExclusiveEndKey()) < 0 && hashKey.compareTo(shard.getInclusiveBeginKey()) >= 0) { + return shard.getInclusiveBeginKey(); + } + } + return shards.get(0).getInclusiveBeginKey(); + } + + @Override + public void post() { + } + + @Override + public void destroy() { + } + } + + /** + * 日志打印控制 + * + * @param logger + * @param message + */ + public static void info(Logger logger, String message) { + if (logger.isInfoEnabled()) { + logger.info(message); + } + } +} diff --git a/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriterErrorCode.java b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriterErrorCode.java new file mode 100644 index 00000000..98c5e16f --- /dev/null +++ b/loghubwriter/src/main/java/com/alibaba/datax/plugin/writer/loghubwriter/LogHubWriterErrorCode.java @@ -0,0 +1,33 @@ +package com.alibaba.datax.plugin.writer.loghubwriter; + +import com.alibaba.datax.common.spi.ErrorCode; + +public enum LogHubWriterErrorCode implements ErrorCode { + BAD_CONFIG_VALUE("LogHubWriter-00", "The value you configured is invalid."), + LOG_HUB_ERROR("LogHubWriter-01","LogHub access encounter exception"), + REQUIRE_VALUE("LogHubWriter-02","Missing parameters"); + + private final String code; + private final String description; + + private LogHubWriterErrorCode(String code, String description) { + this.code = code; + this.description = description; + } + + @Override + public String getCode() { + return this.code; + } + + @Override + public String getDescription() { + return this.description; + } + + @Override + public String toString() { + return String.format("Code:[%s], Description:[%s]. ", this.code, + this.description); + } +} \ No newline at end of file diff --git a/loghubwriter/src/main/resources/plugin.json b/loghubwriter/src/main/resources/plugin.json new file mode 100644 index 00000000..2a913b14 --- /dev/null +++ b/loghubwriter/src/main/resources/plugin.json @@ -0,0 +1,6 @@ +{ + "name": "loghubwriter", + "class": "com.alibaba.datax.plugin.writer.loghubwriter.LogHubWriter", + "description": "适用于: 将数据导入到SLS LogHub中", + "developer": "alibaba" +} \ No newline at end of file diff --git a/loghubwriter/src/main/resources/plugin_job_template.json b/loghubwriter/src/main/resources/plugin_job_template.json new file mode 100644 index 00000000..ac0d3b2a --- /dev/null +++ b/loghubwriter/src/main/resources/plugin_job_template.json @@ -0,0 +1,13 @@ +{ + "name": "loghubwriter", + "parameter": { + "endpoint": "", + "accessId": "", + "accessKey": "", + "project": "", + "logstore": "", + "topic": "", + "batchSize":1024, + "column": [] + } +} \ No newline at end of file diff --git a/mysqlreader/doc/mysqlreader.md b/mysqlreader/doc/mysqlreader.md index 24589579..bae4bce0 100644 --- a/mysqlreader/doc/mysqlreader.md +++ b/mysqlreader/doc/mysqlreader.md @@ -197,9 +197,9 @@ MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReade * **querySql** - * 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id
+ * 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id
- `当用户配置querySql时,MysqlReader直接忽略column、where条件的配置`,querySql优先级大于column、where选项。querySql和table不能同时存在 + `当用户配置querySql时,MysqlReader直接忽略table、column、where条件的配置`,querySql优先级大于table、column、where选项。 * 必选:否
diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java index 291dc785..642c99fe 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/ext/ReaderJob.java @@ -1,6 +1,5 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.ext; -import java.util.Arrays; import java.util.List; import com.alibaba.datax.common.constant.CommonConstant; @@ -27,7 +26,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { public void init(Configuration originalConfig) { //将config中的column和table中的关键字进行转义 List columns = originalConfig.getList(Key.COLUMN, String.class); - ObReaderUtils.escapeDatabaseKeywords(columns); + ObReaderUtils.escapeDatabaseKeyword(columns); originalConfig.set(Key.COLUMN, columns); List conns = originalConfig.getList(Constant.CONN_MARK, JSONObject.class); @@ -38,7 +37,7 @@ public class ReaderJob extends CommonRdbmsReader.Job { // tables will be null when querySql is configured if (tables != null) { - ObReaderUtils.escapeDatabaseKeywords(tables); + ObReaderUtils.escapeDatabaseKeyword(tables); originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, i, Key.TABLE), tables); } @@ -79,7 +78,8 @@ public class ReaderJob extends CommonRdbmsReader.Job { final String obJdbcDelimiter = com.alibaba.datax.plugin.rdbms.writer.Constant.OB10_SPLIT_STRING; if (jdbcUrl.startsWith(obJdbcDelimiter)) { String[] ss = jdbcUrl.split(obJdbcDelimiter); - if (ss.length >= 2) { + int elementCount = 2; + if (ss.length >= elementCount) { String tenant = ss[1].trim(); String[] sss = tenant.split(":"); return sss[0]; diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java index 6356b97b..06d53108 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtils.java @@ -37,12 +37,15 @@ public class ObReaderUtils { public static final DataBaseType databaseType = DataBaseType.OceanBase; + private static final String TABLE_SCHEMA_DELIMITER = "."; + + private static final Pattern JDBC_PATTERN = Pattern.compile("jdbc:(oceanbase|mysql)://([\\w\\.-]+:\\d+)/([\\w\\.-]+)"); private static Set keywordsFromString2HashSet(final String keywords) { return new HashSet(Arrays.asList(keywords.split(","))); } - public static String escapeDatabaseKeywords(String keyword) { + public static String escapeDatabaseKeyword(String keyword) { if (databaseKeywords == null) { if (isOracleMode(compatibleMode)) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); @@ -57,10 +60,10 @@ public class ObReaderUtils { return keyword; } - public static void escapeDatabaseKeywords(List ids) { + public static void escapeDatabaseKeyword(List ids) { if (ids != null && ids.size() > 0) { for (int i = 0; i < ids.size(); i++) { - ids.set(i, escapeDatabaseKeywords(ids.get(i))); + ids.set(i, escapeDatabaseKeyword(ids.get(i))); } } } @@ -144,7 +147,7 @@ public class ObReaderUtils { if (isOracleMode(context.getCompatibleMode())) { tableName = tableName.toUpperCase(); String schema; - if (tableName.contains(".")) { + if (tableName.contains(TABLE_SCHEMA_DELIMITER)) { schema = String.format("'%s'", tableName.substring(0, tableName.indexOf("."))); tableName = tableName.substring(tableName.indexOf(".") + 1); } else { @@ -170,7 +173,7 @@ public class ObReaderUtils { while (rs.next()) { hasPk = true; String columnName = rs.getString("Column_name"); - columnName = escapeDatabaseKeywords(columnName); + columnName = escapeDatabaseKeyword(columnName); if (!realIndex.contains(columnName)) { realIndex.add(columnName); } @@ -462,7 +465,7 @@ public class ObReaderUtils { if (isOracleMode(compatibleMode)) { String schema; tableName = tableName.toUpperCase(); - if (tableName.contains(".")) { + if (tableName.contains(TABLE_SCHEMA_DELIMITER)) { schema = String.format("'%s'", tableName.substring(0, tableName.indexOf("."))); tableName = tableName.substring(tableName.indexOf(".") + 1); } else { @@ -513,7 +516,7 @@ public class ObReaderUtils { Iterator>> iterator = allIndex.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry> entry = iterator.next(); - if (entry.getKey().equals("PRIMARY")) { + if ("PRIMARY".equals(entry.getKey())) { continue; } @@ -770,9 +773,7 @@ public class ObReaderUtils { } public static String getDbNameFromJdbcUrl(String jdbcUrl) { - final Pattern pattern = Pattern.compile("jdbc:(oceanbase|mysql)://([\\w\\.-]+:\\d+)/([\\w\\.-]+)"); - - Matcher matcher = pattern.matcher(jdbcUrl); + Matcher matcher = JDBC_PATTERN.matcher(jdbcUrl); if (matcher.find()) { return matcher.group(3); } else { @@ -814,18 +815,52 @@ public class ObReaderUtils { if (version1 == null || version2 == null) { throw new RuntimeException("can not compare null version"); } + ObVersion v1 = new ObVersion(version1); + ObVersion v2 = new ObVersion(version2); + return v1.compareTo(v2); + } - String[] ver1Part = version1.split("\\."); - String[] ver2Part = version2.split("\\."); - for (int i = 0; i < ver1Part.length; i++) { - int v1 = Integer.parseInt(ver1Part[i]), v2 = Integer.parseInt(ver2Part[i]); - if (v1 > v2) { - return 1; - } else if (v1 < v2) { - return -1; + /** + * + * @param conn + * @param sql + * @return + */ + public static List getResultsFromSql(Connection conn, String sql) { + List list = new ArrayList(); + Statement stmt = null; + ResultSet rs = null; + + LOG.info("executing sql: " + sql); + + try { + stmt = conn.createStatement(); + rs = stmt.executeQuery(sql); + while (rs.next()) { + list.add(rs.getString(1)); } + } catch (Exception e) { + LOG.error("error when executing sql: " + e.getMessage()); + } finally { + DBUtil.closeDBResources(rs, stmt, null); } - return 0; + return list; + } + + /** + * get obversion, try ob_version first, and then try version if failed + * @param conn + * @return + */ + public static ObVersion getObVersion(Connection conn) { + List results = getResultsFromSql(conn, "select ob_version()"); + if (results.size() == 0) { + results = getResultsFromSql(conn, "select version()"); + } + ObVersion obVersion = new ObVersion(results.get(0)); + + LOG.info("obVersion: " + obVersion); + return obVersion; } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObVersion.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObVersion.java new file mode 100644 index 00000000..7bb6559e --- /dev/null +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObVersion.java @@ -0,0 +1,86 @@ +package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author johnrobbet + */ +public class ObVersion implements Comparable { + + private static final Logger LOG = LoggerFactory.getLogger(ObVersion.class); + + private int majorVersion; + private int minorVersion; + private int releaseNumber; + private int patchNumber; + + public static final ObVersion V2276 = valueOf("2.2.76"); + private static final ObVersion DEFAULT_VERSION = + valueOf(System.getProperty("defaultObVersion","3.2.3.0")); + + private static final int VERSION_PART_COUNT = 4; + + public ObVersion(String version) { + try { + String[] versionParts = version.split("\\."); + majorVersion = Integer.valueOf(versionParts[0]); + minorVersion = Integer.valueOf(versionParts[1]); + releaseNumber = Integer.valueOf(versionParts[2]); + int tempPatchNum = 0; + if (versionParts.length == VERSION_PART_COUNT) { + try { + tempPatchNum = Integer.valueOf(versionParts[3]); + } catch (Exception e) { + LOG.warn("fail to parse ob version: " + e.getMessage()); + } + } + patchNumber = tempPatchNum; + } catch (Exception ex) { + LOG.warn("fail to get ob version, using default {} {}", + DEFAULT_VERSION, ex.getMessage()); + majorVersion = DEFAULT_VERSION.majorVersion; + minorVersion = DEFAULT_VERSION.minorVersion; + releaseNumber = DEFAULT_VERSION.releaseNumber; + patchNumber = DEFAULT_VERSION.patchNumber; + } + } + + public static ObVersion valueOf(String version) { + return new ObVersion(version); + } + + @Override + public int compareTo(ObVersion o) { + if (this.majorVersion > o.majorVersion) { + return 1; + } else if (this.majorVersion < o.majorVersion) { + return -1; + } + + if (this.minorVersion > o.minorVersion) { + return 1; + } else if (this.minorVersion < o.minorVersion) { + return -1; + } + + if (this.releaseNumber > o.releaseNumber) { + return 1; + } else if (this.releaseNumber < o.releaseNumber) { + return -1; + } + + if (this.patchNumber > o.patchNumber) { + return 1; + } else if (this.patchNumber < o.patchNumber) { + return -1; + } + + return 0; + } + + @Override + public String toString() { + return String.format("%d.%d.%d.%d", majorVersion, minorVersion, releaseNumber, patchNumber); + } +} diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java index be190755..05c23d6f 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartType.java @@ -5,8 +5,13 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; */ public enum PartType { + // Non partitioned table NONPARTITION("NONPARTITION"), + + // Partitioned table PARTITION("PARTITION"), + + // Subpartitioned table SUBPARTITION("SUBPARTITION"); private String typeString; diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java index 3bf2320a..bc3d455c 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/PartitionSplitUtil.java @@ -3,7 +3,6 @@ package com.alibaba.datax.plugin.reader.oceanbasev10reader.util; import com.alibaba.datax.common.util.Configuration; import com.alibaba.datax.plugin.rdbms.reader.Constant; import com.alibaba.datax.plugin.rdbms.reader.Key; -import com.alibaba.datax.plugin.rdbms.reader.util.HintUtil; import com.alibaba.datax.plugin.rdbms.util.DBUtil; import com.alibaba.datax.plugin.rdbms.util.DataBaseType; import com.alibaba.datax.plugin.reader.oceanbasev10reader.ext.ObReaderKey; @@ -11,8 +10,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.Statement; import java.util.ArrayList; import java.util.List; @@ -22,12 +19,76 @@ import java.util.List; public class PartitionSplitUtil { private static final Logger LOG = LoggerFactory.getLogger(PartitionSplitUtil.class); + private static final String ORACLE_GET_SUBPART_TEMPLATE = + "select subpartition_name " + + "from dba_tab_subpartitions " + + "where table_name = '%s' and table_owner = '%s'"; + + private static final String ORACLE_GET_PART_TEMPLATE = + "select partition_name " + + "from dba_tab_partitions " + + "where table_name = '%s' and table_owner = '%s'"; + + private static final String MYSQL_GET_PART_TEMPLATE = + "select p.part_name " + + "from oceanbase.__all_part p, oceanbase.%s t, oceanbase.__all_database d " + + "where p.table_id = t.table_id " + + "and d.database_id = t.database_id " + + "and d.database_name = '%s' " + + "and t.table_name = '%s'"; + + private static final String MYSQL_GET_SUBPART_TEMPLATE = + "select p.sub_part_name " + + "from oceanbase.__all_sub_part p, oceanbase.%s t, oceanbase.__all_database d " + + "where p.table_id = t.table_id " + + "and d.database_id = t.database_id " + + "and d.database_name = '%s' " + + "and t.table_name = '%s'"; + + /** + * get partition info from data dictionary in ob oracle mode + * @param config + * @param tableName + * @return + */ + public static PartInfo getObOraclePartInfoBySQL(Configuration config, String tableName) { + PartInfo partInfo; + DataBaseType dbType = ObReaderUtils.databaseType; + String jdbcUrl = config.getString(Key.JDBC_URL); + String username = config.getString(Key.USERNAME); + String password = config.getString(Key.PASSWORD); + String dbname = ObReaderUtils.getDbNameFromJdbcUrl(jdbcUrl).toUpperCase(); + Connection conn = DBUtil.getConnection(dbType, jdbcUrl, username, password); + tableName = tableName.toUpperCase(); + + // check if the table has subpartitions or not + String getSubPartSql = String.format(ORACLE_GET_SUBPART_TEMPLATE, tableName, dbname); + List partList = ObReaderUtils.getResultsFromSql(conn, getSubPartSql); + if (partList != null && partList.size() > 0) { + partInfo = new PartInfo(PartType.SUBPARTITION); + partInfo.addPart(partList); + return partInfo; + } + + String getPartSql = String.format(ORACLE_GET_PART_TEMPLATE, tableName, dbname); + partList = ObReaderUtils.getResultsFromSql(conn, getPartSql); + if (partList != null && partList.size() > 0) { + partInfo = new PartInfo(PartType.PARTITION); + partInfo.addPart(partList); + return partInfo; + } + + // table is not partitioned + partInfo = new PartInfo(PartType.NONPARTITION); + return partInfo; + } + public static List splitByPartition (Configuration configuration) { List allSlices = new ArrayList<>(); - List conns = configuration.getList(Constant.CONN_MARK, Object.class); - for (int i = 0, len = conns.size(); i < len; i++) { + List connections = configuration.getList(Constant.CONN_MARK, Object.class); + for (int i = 0, len = connections.size(); i < len; i++) { Configuration sliceConfig = configuration.clone(); - Configuration connConf = Configuration.from(conns.get(i).toString()); + Configuration connConf = Configuration.from(connections.get(i).toString()); String jdbcUrl = connConf.getString(Key.JDBC_URL); sliceConfig.set(Key.JDBC_URL, jdbcUrl); sliceConfig.remove(Constant.CONN_MARK); @@ -64,7 +125,7 @@ public class PartitionSplitUtil { slices.add(slice); } } else { - LOG.info("fail to get table part info or table is not partitioned, proceed as non-partitioned table."); + LOG.info("table is not partitioned."); Configuration slice = configuration.clone(); slice.set(Key.QUERY_SQL, ObReaderUtils.buildQuerySql(weakRead, column, table, where)); @@ -74,7 +135,16 @@ public class PartitionSplitUtil { return slices; } - private static PartInfo getObPartInfoBySQL(Configuration config, String table) { + public static PartInfo getObPartInfoBySQL(Configuration config, String table) { + boolean isOracleMode = config.getString(ObReaderKey.OB_COMPATIBILITY_MODE).equals("ORACLE"); + if (isOracleMode) { + return getObOraclePartInfoBySQL(config, table); + } else { + return getObMySQLPartInfoBySQL(config, table); + } + } + + public static PartInfo getObMySQLPartInfoBySQL(Configuration config, String table) { PartInfo partInfo = new PartInfo(PartType.NONPARTITION); List partList; Connection conn = null; @@ -86,45 +156,22 @@ public class PartitionSplitUtil { String allTable = "__all_table"; conn = DBUtil.getConnection(DataBaseType.OceanBase, jdbcUrl, username, password); - String obVersion = getResultsFromSql(conn, "select version()").get(0); - - LOG.info("obVersion: " + obVersion); - - if (ObReaderUtils.compareObVersion("2.2.76", obVersion) < 0) { + ObVersion obVersion = ObReaderUtils.getObVersion(conn); + if (obVersion.compareTo(ObVersion.V2276) >= 0) { allTable = "__all_table_v2"; } - String queryPart = String.format( - "select p.part_name " + - "from oceanbase.__all_part p, oceanbase.%s t, oceanbase.__all_database d " + - "where p.table_id = t.table_id " + - "and d.database_id = t.database_id " + - "and d.database_name = '%s' " + - "and t.table_name = '%s'", allTable, dbname, table); - String querySubPart = String.format( - "select p.sub_part_name " + - "from oceanbase.__all_sub_part p, oceanbase.%s t, oceanbase.__all_database d " + - "where p.table_id = t.table_id " + - "and d.database_id = t.database_id " + - "and d.database_name = '%s' " + - "and t.table_name = '%s'", allTable, dbname, table); - if (config.getString(ObReaderKey.OB_COMPATIBILITY_MODE).equals("ORACLE")) { - queryPart = String.format( - "select partition_name from all_tab_partitions where TABLE_OWNER = '%s' and table_name = '%s'", - dbname.toUpperCase(), table.toUpperCase()); - querySubPart = String.format( - "select subpartition_name from all_tab_subpartitions where TABLE_OWNER = '%s' and table_name = '%s'", - dbname.toUpperCase(), table.toUpperCase()); - } + String querySubPart = String.format(MYSQL_GET_SUBPART_TEMPLATE, allTable, dbname, table); PartType partType = PartType.SUBPARTITION; // try subpartition first - partList = getResultsFromSql(conn, querySubPart); + partList = ObReaderUtils.getResultsFromSql(conn, querySubPart); // if table is not sub-partitioned, the try partition if (partList.isEmpty()) { - partList = getResultsFromSql(conn, queryPart); + String queryPart = String.format(MYSQL_GET_PART_TEMPLATE, allTable, dbname, table); + partList = ObReaderUtils.getResultsFromSql(conn, queryPart); partType = PartType.PARTITION; } @@ -140,26 +187,4 @@ public class PartitionSplitUtil { return partInfo; } - - private static List getResultsFromSql(Connection conn, String sql) { - List list = new ArrayList(); - Statement stmt = null; - ResultSet rs = null; - - LOG.info("executing sql: " + sql); - - try { - stmt = conn.createStatement(); - rs = stmt.executeQuery(sql); - while (rs.next()) { - list.add(rs.getString(1)); - } - } catch (Exception e) { - LOG.error("error when executing sql: " + e.getMessage()); - } finally { - DBUtil.closeDBResources(rs, stmt, null); - } - - return list; - } } diff --git a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java index d482232a..17655a52 100644 --- a/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java +++ b/oceanbasev10reader/src/main/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/TaskContext.java @@ -19,6 +19,15 @@ public class TaskContext { private boolean weakRead = true; private String userSavePoint; private String compatibleMode = ObReaderUtils.OB_COMPATIBLE_MODE_MYSQL; + + public String getPartitionName() { + return partitionName; + } + + public void setPartitionName(String partitionName) { + this.partitionName = partitionName; + } + private String partitionName; // 断点续读的保存点 @@ -165,12 +174,4 @@ public class TaskContext { public void setCompatibleMode(String compatibleMode) { this.compatibleMode = compatibleMode; } - - public String getPartitionName() { - return partitionName; - } - - public void setPartitionName(String partitionName) { - this.partitionName = partitionName; - } } diff --git a/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java b/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java index bc387767..35966595 100644 --- a/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java +++ b/oceanbasev10reader/src/test/java/com/alibaba/datax/plugin/reader/oceanbasev10reader/util/ObReaderUtilsTest.java @@ -18,5 +18,7 @@ public class ObReaderUtilsTest { assert ObReaderUtils.compareObVersion("2.2.70", "2.2.50") == 1; assert ObReaderUtils.compareObVersion("2.2.70", "3.1.2") == -1; assert ObReaderUtils.compareObVersion("3.1.2", "3.1.2") == 0; + assert ObReaderUtils.compareObVersion("3.2.3.0", "3.2.3.0") == 0; + assert ObReaderUtils.compareObVersion("3.2.3.0-CE", "3.2.3.0") == 0; } } diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java index ede2eb01..62656843 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/OceanBaseV10Writer.java @@ -61,7 +61,7 @@ public class OceanBaseV10Writer extends Writer { checkCompatibleMode(originalConfig); //将config中的column和table中的关键字进行转义 List columns = originalConfig.getList(Key.COLUMN, String.class); - ObWriterUtils.escapeDatabaseKeywords(columns); + ObWriterUtils.escapeDatabaseKeyword(columns); originalConfig.set(Key.COLUMN, columns); List conns = originalConfig.getList(Constant.CONN_MARK, JSONObject.class); @@ -69,7 +69,7 @@ public class OceanBaseV10Writer extends Writer { JSONObject conn = conns.get(i); Configuration connConfig = Configuration.from(conn.toString()); List tables = connConfig.getList(Key.TABLE, String.class); - ObWriterUtils.escapeDatabaseKeywords(tables); + ObWriterUtils.escapeDatabaseKeyword(tables); originalConfig.set(String.format("%s[%d].%s", Constant.CONN_MARK, i, Key.TABLE), tables); } this.commonJob = new CommonRdbmsWriter.Job(DATABASE_TYPE); diff --git a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java index ff1648a1..edc4b236 100644 --- a/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java +++ b/oceanbasev10writer/src/main/java/com/alibaba/datax/plugin/writer/oceanbasev10writer/util/ObWriterUtils.java @@ -25,7 +25,7 @@ public class ObWriterUtils { return new HashSet(Arrays.asList(keywords.split(","))); } - public static String escapeDatabaseKeywords(String keyword) { + public static String escapeDatabaseKeyword(String keyword) { if (databaseKeywords == null) { if (isOracleMode()) { databaseKeywords = keywordsFromString2HashSet(ORACLE_KEYWORDS); @@ -40,9 +40,9 @@ public class ObWriterUtils { return keyword; } - public static void escapeDatabaseKeywords(List keywords) { + public static void escapeDatabaseKeyword(List keywords) { for (int i = 0; i < keywords.size(); i++) { - keywords.set(i, escapeDatabaseKeywords(keywords.get(i))); + keywords.set(i, escapeDatabaseKeyword(keywords.get(i))); } } public static Boolean isEscapeMode(String keyword){ @@ -159,7 +159,7 @@ public class ObWriterUtils { while (rs.next()) { String keyName = rs.getString("Key_name"); String columnName = rs.getString("Column_name"); - columnName=escapeDatabaseKeywords(columnName); + columnName= escapeDatabaseKeyword(columnName); if(!ObWriterUtils.isEscapeMode(columnName)){ columnName = columnName.toUpperCase(); } diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ColumnType.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ColumnType.java index eb674a7f..1c771d3e 100644 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ColumnType.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ColumnType.java @@ -3,20 +3,6 @@ package com.alibaba.datax.plugin.reader.odpsreader; public enum ColumnType { PARTITION, NORMAL, CONSTANT, UNKNOWN, ; - @Override - public String toString() { - switch (this) { - case PARTITION: - return "partition"; - case NORMAL: - return "normal"; - case CONSTANT: - return "constant"; - default: - return "unknown"; - } - } - public static ColumnType asColumnType(String columnTypeString) { if ("partition".equals(columnTypeString)) { return PARTITION; diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/InternalColumnInfo.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/InternalColumnInfo.java new file mode 100644 index 00000000..b5a15f1d --- /dev/null +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/InternalColumnInfo.java @@ -0,0 +1,24 @@ +package com.alibaba.datax.plugin.reader.odpsreader; + +public class InternalColumnInfo { + + private String columnName; + + private ColumnType columnType; + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public ColumnType getColumnType() { + return columnType; + } + + public void setColumnType(ColumnType columnType) { + this.columnType = columnType; + } +} diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java index 8cb7ba31..d7ea6b1c 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/OdpsReader.java @@ -15,8 +15,6 @@ import com.aliyun.odps.TableSchema; import com.aliyun.odps.tunnel.TableTunnel.DownloadSession; import com.aliyun.odps.type.TypeInfo; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.MutablePair; -import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -311,7 +309,7 @@ public class OdpsReader extends Reader { */ List allPartitionColumns = this.originalConfig.getList( Constant.PARTITION_COLUMNS, String.class); - List> parsedColumns = OdpsUtil + List parsedColumns = OdpsUtil .parseColumns(allNormalColumns, allPartitionColumns, userConfiguredColumns); @@ -320,13 +318,15 @@ public class OdpsReader extends Reader { StringBuilder sb = new StringBuilder(); sb.append("[ "); for (int i = 0, len = parsedColumns.size(); i < len; i++) { - Pair pair = parsedColumns.get(i); - sb.append(String.format(" %s : %s", pair.getLeft(), - pair.getRight())); + InternalColumnInfo pair = parsedColumns.get(i); + sb.append(String.format(" %s : %s", pair.getColumnName(), + pair.getColumnType())); if (i != len - 1) { sb.append(","); } } + + sb.append(" ]"); LOG.info("parsed column details: {} .", sb.toString()); } @@ -500,22 +500,11 @@ public class OdpsReader extends Reader { } try { - List parsedColumnsTmp = this.readerSliceConf - .getListConfiguration(Constant.PARSED_COLUMNS); - List> parsedColumns = new ArrayList>(); - for (int i = 0; i < parsedColumnsTmp.size(); i++) { - Configuration eachColumnConfig = parsedColumnsTmp.get(i); - String columnName = eachColumnConfig.getString("left"); - ColumnType columnType = ColumnType - .asColumnType(eachColumnConfig.getString("right")); - parsedColumns.add(new MutablePair( - columnName, columnType)); - - } + List parsedColumns = this.readerSliceConf.getListWithJson(Constant.PARSED_COLUMNS, + InternalColumnInfo.class); ReaderProxy readerProxy = new ReaderProxy(recordSender, downloadSession, columnTypeMap, parsedColumns, partition, this.isPartitionedTable, start, count, this.isCompress, this.readerSliceConf); - readerProxy.doRead(); } catch (Exception e) { throw DataXException.asDataXException(OdpsReaderErrorCode.READ_DATA_FAIL, diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java index 31d0d605..1d56d191 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/ReaderProxy.java @@ -17,7 +17,6 @@ import com.aliyun.odps.type.MapTypeInfo; import com.aliyun.odps.type.TypeInfo; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +33,7 @@ public class ReaderProxy { private RecordSender recordSender; private TableTunnel.DownloadSession downloadSession; private Map columnTypeMap; - private List> parsedColumns; + private List parsedColumns; private String partition; private boolean isPartitionTable; @@ -71,7 +70,7 @@ public class ReaderProxy { public ReaderProxy(RecordSender recordSender, TableTunnel.DownloadSession downloadSession, Map columnTypeMap, - List> parsedColumns, String partition, + List parsedColumns, String partition, boolean isPartitionTable, long start, long count, boolean isCompress, Configuration taskConfig) { this.recordSender = recordSender; this.downloadSession = downloadSession; @@ -136,9 +135,9 @@ public class ReaderProxy { // warn: for PARTITION||NORMAL columnTypeMap's key // sets(columnName) is big than parsedColumns's left // sets(columnName), always contain - for (Pair pair : this.parsedColumns) { - String columnName = pair.getLeft(); - switch (pair.getRight()) { + for (InternalColumnInfo pair : this.parsedColumns) { + String columnName = pair.getColumnName(); + switch (pair.getColumnType()) { case PARTITION: String partitionColumnValue = this .getPartitionColumnValue(partitionMap, diff --git a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java index 0103a383..f2ad8e0f 100755 --- a/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java +++ b/odpsreader/src/main/java/com/alibaba/datax/plugin/reader/odpsreader/util/OdpsUtil.java @@ -7,6 +7,7 @@ import com.alibaba.datax.common.util.MessageSource; import com.alibaba.datax.common.util.RetryUtil; import com.alibaba.datax.plugin.reader.odpsreader.ColumnType; import com.alibaba.datax.plugin.reader.odpsreader.Constant; +import com.alibaba.datax.plugin.reader.odpsreader.InternalColumnInfo; import com.alibaba.datax.plugin.reader.odpsreader.Key; import com.alibaba.datax.plugin.reader.odpsreader.OdpsReaderErrorCode; import com.aliyun.odps.*; @@ -215,19 +216,18 @@ public final class OdpsUtil { return userConfiguredPartitionClassification; } - public static List> parseColumns( + public static List parseColumns( List allNormalColumns, List allPartitionColumns, List userConfiguredColumns) { - List> parsededColumns = new ArrayList>(); + List parsededColumns = new ArrayList(); // warn: upper & lower case for (String column : userConfiguredColumns) { - MutablePair pair = new MutablePair(); - + InternalColumnInfo pair = new InternalColumnInfo(); // if constant column if (OdpsUtil.checkIfConstantColumn(column)) { // remove first and last ' - pair.setLeft(column.substring(1, column.length() - 1)); - pair.setRight(ColumnType.CONSTANT); + pair.setColumnName(column.substring(1, column.length() - 1)); + pair.setColumnType(ColumnType.CONSTANT); parsededColumns.add(pair); continue; } @@ -236,8 +236,8 @@ public final class OdpsUtil { // repeated in partitioning columns int index = OdpsUtil.indexOfIgnoreCase(allNormalColumns, column); if (0 <= index) { - pair.setLeft(allNormalColumns.get(index)); - pair.setRight(ColumnType.NORMAL); + pair.setColumnName(allNormalColumns.get(index)); + pair.setColumnType(ColumnType.NORMAL); parsededColumns.add(pair); continue; } @@ -245,8 +245,8 @@ public final class OdpsUtil { // if partition column index = OdpsUtil.indexOfIgnoreCase(allPartitionColumns, column); if (0 <= index) { - pair.setLeft(allPartitionColumns.get(index)); - pair.setRight(ColumnType.PARTITION); + pair.setColumnName(allPartitionColumns.get(index)); + pair.setColumnType(ColumnType.PARTITION); parsededColumns.add(pair); continue; } @@ -431,13 +431,13 @@ public final class OdpsUtil { MESSAGE_SOURCE.message("odpsutil.12", tableName), e); } - public static List getNormalColumns(List> parsedColumns, + public static List getNormalColumns(List parsedColumns, Map columnTypeMap) { List userConfigNormalColumns = new ArrayList(); Set columnNameSet = new HashSet(); - for (Pair columnInfo : parsedColumns) { - if (columnInfo.getValue() == ColumnType.NORMAL) { - String columnName = columnInfo.getKey(); + for (InternalColumnInfo columnInfo : parsedColumns) { + if (columnInfo.getColumnType() == ColumnType.NORMAL) { + String columnName = columnInfo.getColumnName(); if (!columnNameSet.contains(columnName)) { Column column = new Column(columnName, columnTypeMap.get(columnName)); userConfigNormalColumns.add(column); diff --git a/opentsdbreader/pom.xml b/opentsdbreader/pom.xml index f2263726..83d7c424 100644 --- a/opentsdbreader/pom.xml +++ b/opentsdbreader/pom.xml @@ -24,9 +24,6 @@ 4.5 2.4 - - 1.2.28 - 2.3.2 @@ -94,7 +91,6 @@ com.alibaba fastjson - ${fastjson.version} diff --git a/opentsdbreader/src/main/resources/plugin.json b/opentsdbreader/src/main/resources/plugin.json index 692a9853..5c9cbed9 100755 --- a/opentsdbreader/src/main/resources/plugin.json +++ b/opentsdbreader/src/main/resources/plugin.json @@ -6,5 +6,5 @@ "mechanism": "根据时间和 metric 直连底层 HBase 存储,从而 Scan 出符合条件的数据点", "warn": "指定起止时间会自动忽略分钟和秒,转为整点时刻,例如 2019-4-18 的 [3:35, 4:55) 会被转为 [3:00, 4:00)" }, - "developer": "Benedict Jin" + "developer": "alibaba" } diff --git a/oraclereader/pom.xml b/oraclereader/pom.xml index ae8e06fa..67d4ac82 100755 --- a/oraclereader/pom.xml +++ b/oraclereader/pom.xml @@ -41,11 +41,9 @@ - com.oracle + oracle ojdbc6 11.2.0.3 - system - ${basedir}/src/main/lib/ojdbc6-11.2.0.3.jar diff --git a/oraclereader/src/main/assembly/package.xml b/oraclereader/src/main/assembly/package.xml index a0c9fd1c..a954a30d 100755 --- a/oraclereader/src/main/assembly/package.xml +++ b/oraclereader/src/main/assembly/package.xml @@ -15,13 +15,6 @@ plugin_job_template.json plugin/reader/oraclereader - - - src/main/lib - - ojdbc6-11.2.0.3.jar - - plugin/reader/oraclereader/libs target/ diff --git a/oraclereader/src/main/lib/ojdbc6-11.2.0.3.jar b/oraclereader/src/main/lib/ojdbc6-11.2.0.3.jar deleted file mode 100644 index 01da074d5a137914da574f929a4736ede7811a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2714189 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μgD^KgtR7X`W%eN5Wg%dq<7ts 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ž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

r?oA(+gT|Hu8#SoN?z2RBW)cKo-1 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⪼{K2Gp0A@_cO1Wp9>`~pQAIEN9yox{g4@C((z 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%0Dj#>mi!JU zCzx4*MZOC)8ppU^UY7GQc#XDh%>#yaXp=t)wlsCL(Dv6ITdh&8T&Ih6dg-YRl|ycRn=p656%irpR45oTeJEI8Jw^*8gB@7?*sD$#BvGPf30w~K!bko2!$Z-K{TBDlus8FkYdW-d3T~-m z>OGJlB7V-<#qw1&sn6pZzWq1~$QI48(VeB8g^s<|boq}cJerMla~~a}Hgc3Dn)YUF zWa4EH$O>HnTfoI<@%h42{_PV04|1bCQOLGMtqcl2^BX?ES?XxU**nT&pe~Y{Z>qd z7{fB#XZxf|Sx%-PXFs%lFz> zu%+eRhv|zdjz*O5qN@Uc-{;!p#&0FNQss$=h%wvm&gR_WX~N=b|JP30kP z@GHmhAC`;5DqI6KpM^7a9r~fKefW?|_$_n&iGi9t5eb~34w0;tUE?zq>;MfTn2zZ| zE7n9n5ksyH&Fd?V!U>O&(*!%Uqm1R76K7up3$lxyhrB0ZWob-FZPl28C)pCB3$41Cwy=GsU$EDZ53qOLBHpc1lgarDTfz)&$x z2-?3GXIlEb;718f_+F&j4VtjDk`v&EL_f3+5;O&3ZRKskWjfdTdS1DMgeerizbxF1(N2 ze{Dr&MxrcXa{;P{CDcXoVRe#kY!qLZuP7)}q98FeS+JDS_F#jzvkoQIVO5vajt#n@ z?}a}}ck4vbON{r@_pawupHmp*^4;M&n@{3(6@U!!a*o&|Tden7B=o%wDta5dOG!rMjWjGX^=#VwZs*e3TJF&m@B_=-U%mS{&c}D<^F+W% zrnjRM^ntTeup_z!%SJBOcUoCg1n( zBz-=kc=j>Nz%u)Gd@Cs;wq-tr!ify>i#D5o!Ddmf3QtR=O_0wljTm#YHjkF%>{QfN zxwz<-zfA)KsW^2!i8lF&&en;XZ2ckw`ajL2z7aFWACV8J-MAGGPqwH}HkCO(zCL$W zyTkMY-wU#nn98(CZ$DHYwY(Glh1B3O$MKb%RLV1Y&50vS97a~9nuyB<9$k|&n(@Lo z%8&;84aL-zmZAxH&jI2u7drU#PpowsAm+8w&+ctNPYQU`c|OK&TOONp*~q7_l)E+#0y1!F_VUq~ zA~Rhj5CwR$ntmTQx2n{F=YugD?O#%WWhv}|OE^Kh)@3yU&$5ckV!{!pCTFGF43h|L z{Pi_z?_jwse)80f>dGB&6W@s0xy~Zub{Lkz%v_s)gxyGo_x7PkFU=%4Zk~!EMCQ=|{-kD%9 z`OGU9;&=e!1Yr1nlRvbtJWqPMS=bx7;XA>~xos}*g6XD*yzYqdcTJQLC9SbRw&|HY zm%h*g(ItJgoBRH2lnJC-Tr(Fix3<3g@#hH+dy1V9An=*Jer>e(Ut7MklL4YMQOm9O z#0FtAzPYGP_#NZ4oshKA_0$-1&Bz)2DArFEOv|mu&+h=8aSdeFqC?~x*fA95r+5jIg;&ygKI+83tJEW zF$S}_!y%c4wHb;_ChS|%2aNt}a!w6&#fD`7BP}HXE0T!*lB#rVP=iEXX$oA z{DQ#)QH_#6yf(g{V!W<|AwSiM?nO{hLyZf42+>TtoDexyt!At<%kd5A)3Q&RC3JHe zHxr#sC+AXMMYFuF?s)?;t?fuu2S1yED_E&^b1X1iLmv%-q8Ql?aIxSrC_{WBPX0!| zYu*$g%3M*TufT4@Zm0h|V;AGl8@>r9xgt1O*FKvplgDEL6ZdgrZL4HedN#n9`AH6Y za9oO3(%637CI>R`o|?NgtG2DqV<*^4;Kz6}nt1^oFMdF(p3a}`vc^)k$TeyTO!l$v zuxn8|hOoFOQX}D>-hD>g=6ONkO6voVr9pqPA17-)siT>m!#{ztmQ%4a7~nX>KYsmg zY(odPOgH`v02!YEHlrU-P_lzw+dTTvp1Rown=jp|Hl0Jb644kCIV8(b#_maC)v5HC-q?j`YO0+!lr?qr z)n^n`^PSpkFWpJ@S%i#X3pg~!>&8YpGtNOv=5_JiA^FTjM40ZNN$Tt(&d^J_V(=C> zF;y~ku|6>BbmYWmKTV_m_$!rBC^``1P>0GU-yB;6C*8xf_Q?`-y?@Bq?qeD)#w6Oq zFa?VSCM}_}EwNH+Vyc5cU)AU@a=*VSCMNc2zeAKyzuR_c;l}rhpKZi$xS_ zdkCF680dAKL<`Ev)Zr7HF-B|c(OQ^roHT`|h9Jn1yszC!62Q*=Dtm`A_jqM-2r{F9 z8N%r2{}-h#f(<^8?j1mFA8aK6Js&Osgt;d7V}1}LrOeOO7Ync#s!q12jWV4XUUwC^ zw>Gv*wf^r$?x<8Cxf4Dt9^fhkvg;bdd`@*bikN%U8iL+qnaB~fdnc4Ue=aRwVYaXD zH8pFZ^?B;Pu6T3Ern|DwIk2r_ADGh+yi^;cZ2B*;B$(Tyn2_7e3xxo+*Ku@&AGy-+BL zIXeeh;x!}NQvhRB5Y1c{OR8VGi%GI&CV`-u*EOrDGldX=auPK`@ z_jjv#ONY5#2f@Otmky>tUmSCMk_rGS9tx zitX1&0pi;mSD=4m8KmDSo|=kjvl`o(SQ7+XK5V)-mro7<^iMaL^j=)(w5s$QOt=C} zU^M`MW})(CxH|P{QpKh?LA+WFzKGAZtw3o^Otsf>z@a0jr9LF%3$h)5lW)X>5mbwz zlAXxWXAk%BE4dYMxbg*WW<9BLP2D~9wJg~-TYJ=L?dvb@l&Ce4Z(Ea(;v;QJ@@EjI z30^%}^%VYqqyNa}eA51JTA)k-gIB&%tZNPy0AS~r7$E%rs|93~MEK=}U5ssV48&NC4M1_@`)ONfFZyGVj~+f&Jz&im9M8j--a84gPDRAPR+k$ z92r|?6su>bG%(kRuL~v8ty^4K%pW(2r>>ZsC9rr)r>?MUWfqZiJKlKVLJyR^`t-1V zv%PFLY&p(wzhphUZFcB#0qT)g+vS6QEX+j%18q|FdY_$+d>K6RafICFrFo0^g@U-P z1_!=Y0mQc6lHnk>&iuJ`uk+IKBL!hgnx+cXcKa*)=X?Pu3JM-^kq{Qkxi6ZQ?N%5S z(q2j~CUPwmgblwp6?8y#@UoJ|3q}{U!M4@z?@ZWQ1CZB(zipdbh#?RcX|FHjtu_Bg z48RQ3Z2-WI^BwFCqKNm7KW?jBPD|maQ|d z^2#xz!Cun$D`$6IXrx&{Luk5*j@TKMQDR{bCzTr5t~cU$NAJ@2&-o#kqq<;tM#Y=m zbjuI;_uSS`Y1C6+RdH|reH0}S3HoOgq4Hz1yow$H<^lp%#9Fl5|Hob>`veyY8X|#r zm8ES=H+_~Vn@^1g@r#_uopdFS_uLj|qiz5K@$uC;3PeD8>Z3pei~18W%n9?m&)W-k z143P(Xa|?R8Ep@O(#Q%fzo3?wsht)JZ5{neQ$u@ewnaW;aRmwb*%`{JsCFX^ZI63c z57&01v#qPJskW)SC7LdhmhkUWtWe8qpkWB2FJaM>3u{wj`KJN@zgoyBkb>wSVdInT zshoRiuQ%#^{%1)QQN6)aEX-@x{;uzDJVPyOPw*)DJ~aE?8!vN#hDUIIYQ%yDkAiQ1 zIP2S3i9hIFnr~+uw{QaAaR}Kcko{HnXQ*`1v0rIJ_gjBv{Fv*_B1rS-4g0@TO4oNU z5tuTWi=vQsCY_37P^cM(YBK5{7$sj_T@Il`st;;a>POg~k%&X^10f@ryk5gh)6nH)H59L$slcX%b-GHCib5!)(NHR1cOYMeZ0(8112yVb;<)DLzmKM7@t6$ z!G0mwKp^y0d%&-Gz_ymJs50hm;5Qt08V9K27%qE)7{AIwF??l0OvYO(X+lnRtiwe+ z@M6nT1As6sUj}6wwr$-j+Q-h8$=G19A{s=>@{Cv1nGp0xe z=J5inXoo?n)O)6J(k*^aj5hNckzl36JcH=tMA1S}rGhz7gWCQiPiC09%5`Q9G9(?c zUV{9lq;Vz+RK{8WWU1aGDp|Sjh3s zF}^zx62hT_ySqOra>%;=k=#+1LlqfsN1&bsShYFiJ#4-(j#44bBVtC+?rE#$OG2^~ zcg2(OX=)`7bn-mFv1CAXikGVvFopXvk&39m5A^m| zyskX>R6M!RB4s~4M`QwX?RI&!=2m64=H9wb4!Tp2y3*RZs+P2<6BylJTu%uFtF+6eCFhWDSyDs3HtE~at3RQ=1IPa;pC21powRLM(AB(1RS);d__7fUZessY zFAJ{w_Af)YrZ1ROwgdZnaw~KtF6>;IyOE~PORB#o#uAyC&ZN(iOD~vIY_^Do6D=YH z7!N)Z6&3&wi^<;rEoI+bu13d^UYFd~DmWem_F63RHBeZexp!!g?3OM~y+7Xi+>Ed` z1^J7smZMFyu$i&vpKoFh3m^_)ODQdOluuNR-J2Su+>x8kwo1uUwx^9c37=GpxLK2k z8q`LNZnf~UIIS-hv&}0_O2sCT8RL+v&$(A3h&nVB)cmU>g~x~-&B~m$Yu(S5O{2#; z=?rtlMpqz0f`JJN*o?cc7(t6?E};vCsei3*Bxt6@f(QndhwV@&NPCU}s~Tnyt(g)c zpx!&hPILRH7BRxZqHBn8nye_67S?CAE`QE+SlTEQAE2!O1C(xi| zcW@;hu_p29X!Gg$ee#rv*`ynb_vB`GC?yrWK0X|k&c$l0JFu@Q3*u_8%M=w*nX5=OCzkM%$* z03=rPS76eo&!~f@?zA}awO;jezU+T`rITD&n=!Vcd$F@`z?N;OVIi^F+hQ~v)j`H} zR6)gdb%}5<)<6=x9@5d@S{O~7__RMI@$H&IDwADUctvulbJ|emmX^4ya=~h#HVGZN zT+9ZSyIjg1$vz;1SNo=vb1seJ7^NXV#2(0!t)Oq>$wpOYFQ(m!bx&bPEv6dCD3T>T zL$^vIiJn*DCcGmfA<*4SB4?dQn0P!-?`K+Kl2(3_BDZ8PQIA^lV6lxOWF3`%x+KRO zM0g_rkZRMCq>-I5Z1W;dtvz=SA9s#4Z)PUf%hA~IwmS!%dk5;u^NAU{XjVJcNEC=v zGSZK5M$nzNy>_qA$!cBkiX1bPMxm4Ss{Q>H^gZDHZ{!P5q;WoT+bjWfJzcQ}`HeEk z3x(p7Lfr~|YfJk?j9yLc=KhPuC$b0V18vG@q;i+Q?L$#>_q>6&L7mE(@}vf}dZlvL zI9JG{lUMdlWnEEUR$!4e!RM-J_ul$`QmTi`w%;Ly_hvrVN(gf=4{%xb4S z8T4iZv*$E?F(kb{c>E$Gy((qH#yu(WPEfpm$jZ|-y3Tbl_{J_ha=q2BKVTT|KT`6e zG(-4~uDHEv#KJ8W(GtEHT6*Ny5*2LC5wQop>Wg+lwkgTHwQmP*nFZXGfIDFEfNohp zY)y>Wr+KHiE;+d+e+T4|=I!(0Spf6^ep$$LbyFiBBpesus!-ae zFUE*+Zhr+GUh7mj4(~!ImjI6d~LQEab2Y1sy*HZZ35U)jJ)$+io`8%a+B8%PF*zV ztg;!TJSTol$LOuJK;uhTO z(%q*$$9%1PNBK699N4i=e+{h$_-ULP$ZUqXOR=WkZeH3;sz$h3rRnczruiKh69XvU za=`bvrc#rydqu;rE+5%;Asr!^oiKX(vxxpmNBv>jWm-8-NdKn*lruzzN;$1+WpKR< zL2vKyG)G=YcaGfn&1;?;lceJ&3#lu!c(3u@0jZivJqoGw$AX2o|Iu^z7RP@ybSSh+ zb#yCm-1X2eFl#i=$=)z3KZ+c(wy()lwTzT<(j=I@ijK9Z|EJd(I=J6JQ6Iyy4mZQh z@)AhgCS>Ix1gUD;NCj@jW>C5$otTRvfW(91!>Hx(uNs9gMlz`rZ|?{jpLu%`qq@T% zNfpN9gVv)KDF9PIhHb^Ml`i2;fFei4<{5ab%^>f2^V^)eF5&M@Q})8MOe zRh?>i7l!>l2kfefMcFox@C+1>ynyh4DCTQ zrIx3V?cp^=9cP3L-46OUPP@~MieVgfD?PUXU4V{*zOfnn&m0^2C%gng;4b`|Y@qL26Gv+2tTF};#Bolloqzt1 ziMaZABBtj+o7n~e02l%V0HFA9CSnC+Q*%cr2Yn}VTbuti7$+;a%Odh4{Yak)ljkKD zBnLp26=Ok>v1Tj+m55hA`Uw@RQEk-GsJrO5Z|t@tl*O6tgWn3G?@)=77xaA@ZclRh z+-&FebbkTRMYll^xUI&xa6#_bgIJ4=84?L(H6}$%tf@g9;7bMN(Y;bzr!o%Sb7}}G zN=;Re8;hc;ScmH?O|5(42Fri!mMtVEI-XnRpOL6CmXxOuwbZ1zWk-V5RzSz2Vzzxo zv?r8TF*uo6S6-W?G?b^)z!@gs%aI$`6B%e)BT=FSOoSM-&7iwcv^gKEAtQBcBxFkDVO=F_awsvf2DK%OrvSDj9Ww4&ZwzTSv7T-6gmenh6 zEhAg&jv+xc8+NifP0?FjNI9MbIBqpNsY2MWkDmjsXpf*s&Kny&@tt_iSK#y`3BI?l z&bLb5YIpQy#tU0+lDBUjf!3OHm&aGGqv$M8EsQr8cjApVQ#y5FYTDJ(D<$#ksz8850l_`-jq6`6<7o8>^4`^hy zahqXwYuBh*9p)`rFUi$Hi%hk%xp}MSWE*5_Yi4IEt!PlQcB!bowQE$q{i#TfdcALD zR8{Wy7qjyXuOpGeV^JhHR$9wMTd}rU>y1mlpt{`9Tf;4c zc11C37xEympXUMSoLu9BMGVi$WN*0Y{Qj_sSL>X~!&Ly=?-Qlmi)$kYErY@|D=gnlpKUJus1gDjtbLv?U(o%^?OiAZ}(3 zZ3*Pxf04?4xOr2!MeR@8?wq;NFB#F!mk;uiQM^8_ZS9529)LrBM1n7cCRuEb_0)|8 zvZhOYE^nl8JEIs6hnP3meRs9Td`Ktn_Y~ZfQ+owpwFp6AsJL3-I#lz2;rLJ9$o&o{$`FXit@qIhJ=)J}v*&JcKp$)`pH4JH|3#0x*N$ z!A!fLBk_hIpNt?{%!!i;!9`?J3+z)%?4hmD1t?HU+|R(_?@4~G)IM_G$7d^db9Z--pO5>KAOGiB5(Tg!`k$-cgxx5Rz@BM+4p<)y z!8=SZe8B>YFC@VNOfOBKUm(|9yLC4l!`mLcJA0rI--b5|=&$h&ahUI`z%+voL5Gw>dZ zRj-c_P}k2!NFS%nS#^4XwO_-9p9yfu!CD(b)svV|EE#q858*r5g8|QJ#ATi zd6B)9W2vS>td~0^#QHA-rt`aS)z-HDPqB_O;i((^R7*?@9Zi;$vy_Ng4>Kd<4OP&3 z!`S6LmVSuSW7gKj<`93}U(SA5bdFb^R?GtHB-$d%o0m#&4trJ*sA;0x${eBr(!l^ni$1#(ao7&loSPnbU`=Iv}(@ji~Fqu# ztlVSsY*4=pEDxO9X10ciJ08D&cMaH}I$UkeDs5uj*s_2O!B0hzfK>a<-eBVq2|!!K znc5a>tYa~Q*i&VgOFsd4xA!}t(nx8q%!cJdx|L3DU;Idg5@UbQT_Rx7d3 z0;p_4Dl1IK(F?H8Gn64MDvYV^9d%JuZjr1zbcJw|ZOy3zA2`^O7D&ap)0UZ1r1$>X zn#m39w>}+r9<|VDXHrpSQmPV9lEu(yt1q+B3Q^kDJw0E*d3Lggu3Jo{Gu8Qpx{CUg ztZZzLZW{U&A+dsNL{Gcl`K!t3`N{eG#L3p+MYOVWsH?BsMGF2)^YP7{6%IN7n1O1W z;gwU-P(f9D=drp^Jm=#tDroZwMzVBwxIv~Upc1t(?C6r1ziY44n3G#W7lMA6AEtig z6;keX^q~Ls(uET}>mFbjb*S>oaq;Su(G*HCo74@f0K!D#!B9!@`K^ORF2s>LPV#C zxojFE5^Ck$Pp|QxG}b*UxAXeaM~j-9o2`LyTn6FC@t$CMrhxHwhW9O(a>7SzLSl6! z>$Lv%UW{!{(bx{oDI>bi>Ks+GnTWdVi54p-#EhjQ-)4RvJw#scjEy78W_2INE;{@l zD1-Uksv9==r@k0$UD%bmY0GwKzUE>;mQxf!|3ZDPtbo9Wb#t5$XvX@+>~x87boFw! z%2;whf3vi&<^~PEjl~_u$PqG_XO9L73qxCN>EEq;W0dXPg@$E2C>6XB)2DPsd+LXN zvIRNfc~2}wPgI$7ib}%Dxw@!{$k0EwZeS0qcARI+b_{{Cy%VQA2mvFsJPL;07&!a> zEVYjyK${|gf5O|1%!?VC16dfMl|RmQEaTIBgyH~?=Vp#)8o*$v&g#W2_r?C$4^)52 zki*AZAn9Ez3e-_Nm~V1pqT7L(D}dp8hzkFSE_ZjsGY;^~>>f|S_xsuE2E<{LhIhxt zwr|2wd`JY_KkS4vdS_`@?ghO6B|*WyXzmCaK-niVQ@wKIvs$+I>~-;ZL#@SmSD$$f zShsVvQ(E0cKy(&Qt<)t8RrOUI_^IN<<`0Uid`SmUU>ifj`w%UzG+ar6@yneP&fm#d|`nB_l3?ak<92z zxO0JEVBs9tMXN-@ZTU0J`#sEizsZA(%{yF>#L+0#5N1H2obQD~VAg4j0m*xr(xZ3T zB)x7i$&k~L?|QuXl)^TZ9Aq(#yQCnp@@jFY0M^hN3v8AtWg{Uq+@Pb)?g;@X`;}Yh zoemsaL7q{&7?WGO{aZ;a%r5Hi=%g-#`#fc)g1c1R+2=LdnSXM!E{j{b!xZ*yYBMWS zfYLaGI91tW9-MYOJbCh8I8qG=vkBzzLvlvMUw_T9d}In`8Mvnm({)Le^eVbX$S_Q+ zSCV4wkeBdmt?1QFK0ZL4v7z?YP(Mao94T8SInQ}HQrBg{DIcTx!&^+PngE>wBzwR^ z5A#I#?`VWyK{R&^WZE2WqI29c=Z~&Ft4RYKK8{5#a#w~$bC;zul+OQ@fNfGZs5Gp; z>^sjaUB$mF6B3=B@T5Vl)c>q=#TRoo$46l16rz&VUnZh9K9WG z4siGl0j5|3v<{JXIts(o8`3TKU6MC4epQ+ktt_D695+li+=jMH#j}Ylin&KtNWL0g z-$L@4mnwB?n%K<#J7X*ch39w`Iy*Z;PCExEA!zrmUhSnf+aq|sC~8~gQF@q0E2CvG z*{Mgmu};okZX1gdyFLhKD(KqI3#B8o?9Q)6D3Ipm5sHCmkn0_zSO)W0RMpaowM4oaOyQ8P?a|<8$GE7b5nUHWxYn1LZ0Sp7F*Gb9b!g+!A(cOM1`Cl` zR^lw^_$TC~{UyfA!%x;a*;kvm|31*__?_*}6>O3k71dYsP+ME_EOKjRg=hnx)2F#J z*~yDz%%*Y67LvHCbX7ByQic6NG$XDM2A3gYYq%Dg<@6dn;rS52oyw>0ie+M=n&Z!9 zGi1$i-`I>(n=~~7qDrZNdHDgS?xgJdVX2%zJ)NzhKS*>h&z8rmb=+l^442HAES%Q$ z$`U?*SwLbpRYsIdm=xA&r7eOkbW8NDY%;Q&bAo&3PMf4m=eh?`x#gR-+MQ5GE0*T< zD!w=|UiU}T!ToDp#x1VosuSt@D!eyjf)fZs^_b+E_D~2Y=m9ei#Doy6=Yeu(n1I@l zXYQw$Am^c|Eo1PEj$%VEAyprzaSO%jS^VW;K8cR+!c-=Xe{H@?q4nY6;2P*7_UE@v zQy-n;9=`s+B*HsbR@afu57wmV&<1gH_x6Q_|KmV7~E)62un#m3eqJKIJd`OCYkN@PJ@^3K{Ot2;dif5Mg>ii15e6$1LwyV`+I4cIGzxd1lU%kEjtL{*kdxh;W+Y{mg%vTb2sKo$X!(uZLy*`Z zcNVq?l12t+^|_lY=`CQ2+FqTQM1{294ih_&-dYr&l86Vu&0G|d8`ngcG38wuR2hg* zW1b#lF*eO+Vjd$!0o;Bv79h~VUvyI4;CCaSjM0sZfoF|{3ijCsmLNj99hRF*hE|Qv z*~Np}81iDW8e^a;8O{{v)0Y6%6ztj(deoKfc4vaPfPx>H!;AufAGo20zf+<*ln8!s z+pYSbie9V4f93?8fYl`bGX9Mj38PTqs2oZFTzSJ9@cqWbYhsV^k=ZJt_>Z0wBFU2j zKP|Q`ae%yy`X~fuJ(#K{MDv#*(Sp&a01&p_$>Lr0C#Xf!piuo|U~Wl(_jRw%ApI$h zXHFTEjMI7vv9knU7wBlnQ#lX12y@?cuyjMF_-%&#ZH5dJS4N>d#L&8KWD_{54lGqF z^;kZcW1{XYYjgaY#=t%6f`TDmc5114kT<@wQd`wJ(5dZ-3X%zU065X;@E1Uv{pr3G zYhjgogGzG$7&<-H)$m?!DypRKy{|Oj%`k8*^A>E@C(XFUVYdwYI9yATX7YH{4|kDq zvf-i;7uU0VCR*MlrsGKKS+F}ItvPexSSi(C5g*-Mq=J|6Itb4nLF)!1T~J3Ih@hAC z1rfb(q#l_+&}J96S_0N{4u;P%46nRTUpBdPBzP(}F+0%*pBXXt0HO2H>gkqh-PDR> zc!B&rZ6=I(cQb}WJ+4=#Y-=bjD0aUk1{XVJ&u#Ev`M;Rtpj!%<-fUdGMfk{*>y z;F@6e>vmLZe4*F}twM3kUKyXlb`SJp>?2$i!W8kI>NxqSFxRVpyOeUu4xO*5V@f(a z#=o+qV@keeI;57lUI%LM%ms=&J=P-s%smJ?n*6*Anj9L0JBplzB~*wym=!`^UqoSr z2HIRR^PdzOcgE5MLkS}s8}b|r34L+x`m!V@@}Kq=g^$1~V&90bC!t$%6m;@fTvUeh zt|GuiER$%Po-K4RC&aH$yH-&FVmYp{($niEy3LH@=SI5D;F!7lRqP2z8&!5d0~|z# zY$qm;h|RfHv>D5&5o4+leK2n-&d92#`!-lduV_avslFkzhn!KoLRY?mS@rL!Sy(K( zc^7DT6W7jM$@=s;EMDhQR*O_ti&j>PSXK*qndBR|d(5mEL*QU#{ru<#XZ6aUhEU!G zv}iix>cj@>)GG68fDm2q5L_yw=D5i}%&tUuZF2a^GzhvAD(rR}@Zc2Q8R}u|5+S)a zuAnJg7P?8jsn42dy&+8;6C2EGGe@@IpRWV74J@4*n$Dw0oWn@GZet1$EI4-NwV_q= z+_`~Oa|j(zKL(Sn%{`OJnf$OmbqHVxA${sWO$LS*IrO-=JwdJe^_0C z7Mmrk3~@2ng?%sd++5baD(L($GGU40Bzn}pTMUIdt(>q>_oUkibas(+;T4Q&c%wA> zX6oVnBW!l*x*_<5+niw`Qg|4PaeMWT80}T?2QSB&HY;#P2FBxVfHNd<4XL;x5pq!e zssoM^F$z0O@yN1dm5a&=;oOeEYO4wBZHY|C(9KhC_-r^F@O?1PbC!M1#ND*x`kd(l zCEEwdOVp_BocBpbh`4UoI-6AD?o%!0FGGr0g{Y)l$+=rZ>a`=urIe(xC@xCIz-vv1 zD#8kW9yyhAK8h%w$|@lU)zb83cs{ynG_shvGs9iXU&?P~%v+spHk-^u`cX-)y!;Uj zdN#2lP9>)z>r_sRE}_y|em6{8Bwk8!yra@o$}CJS=2{5n1S6|OwZPUwlSnF)Ll_t* zH=pDN$7+Nhs6^%qVoN2xmMMBQa6DfQj(5h*T!+aXlPKt5Z9s6&?i6Fzkv%@2FXkr% zNBI5oXXa~H!BfhitX35&+Bx*Ma4KwEXJ8upRG9yyT}$zUml<`BWJ{zhI*|!NTN$g* zg2$Xwcs1s!MxDtT7S|bd=}PwXq~iM7j5O2Cc;F&wj!>H?s9@!ER7RJ(!>y>grGrRy zBaAH5)O+a4@Rhi!sB=&OkEO1x_Gj8U(l-u@5PU))I3mE>>r$YblxYTK4JltBxwXsbMyy1cc{W-0@(faU>#*(<%|%Oy z(%_@n+)y>3=b>DBYP;@F7?b=V>b&7FM)^{+9aez)Zo7dIbBz++L(wXfkR|R`d>D6m zVUQ&FeP&psjPQ!k%P+`gGEa#2sqhnRS(z8Jo*9WRB;28@?n*RUhL|OkL*Z0<%fUK7&FEVBoL>5cR=Oe z&fS2fd200-Uab~8;VTAAY!6hmDz`Y{NUjW5SL9!7Nj^qxu*?&0X^eK{mz-G`swn0q z+rbTxA-Dxc+((}s#2^ycgwfikVHDcLuV@0(D7+nL_666EsqReChHY_y(8y6(BW=6@ z(Pj@*V74fV6f!kxwckl-I;qtp8=hw-d`d!wBovxm(B6bR7$l-Z+zHg$?-GeLEwo7| zt`pk<*$MBK$tsL2R}$MSmV6zGgd=7S%Sva{nb}Mz`p5IcNmqP~U*@Jzott!)1G!H$ ze;-zSGEi)h{!mPj$O+*xh*Gb}3tcrBq3L&mu<-2WNm6(%(R^F6xQ){G^Iq9Lj=I}O ziC~kpd@)8%$u`#wN-b=*oru*RN)A&v2{3!;^!AZ+rtUX9-E&r%tH3BfLxNdnfh;@g z79`b~V|ceM)*(??nkEQRFq3drMySM#K!1xoG&*C{>4}9N&Z0=7U$FQ{U5!*1NTeTz ze+%I&^C8?x9ILn2m>oO=?=qZq6EzwvPLZ3#$sw+r;6l*z22D3P4J`t>1j1i3SeUGd z)+sI*fxL9#QAsN}^#)UxVi>U`b-hjl2+ASNv5s9>_k!b|nqwU`|J67q#Ex$|#l?9O zR5CcvaWknnHrLBTx*h6ytJC=W98dQJ)UhAOsQ&>CGn8kP`vRLB^_>6nsx>w8xj_FT zNBJ4DUjGBMdq1yU%@>MiP@-PO7w&yf>nuvj^%bsHwSGe5!z#KoR?HB~G(ppr>`vx| zVL_oV-4iu1y-M};31wM%!ijM`wtrZerU!Fe+BWoVaYsmQs2_Lx+GJL(vU5}-YjRk` zBi-f(W$c*okTJ=ZH@CAU+QG_A>#>{BQ^)0@dmuis=$aoab0RUv#X^Qa4LH@-&wGMD z&@~*PpER*2*UXBxhp$s7%yO%*MtP27cVZi1<@D)d8d;61f#*_wsr3wz6oI~JMt{~tV=p!%gRv)OVsSpw&Dh%Tg%vdBmGb&HC z+P-1X{%SVBS+=zO0si0qCkbe{5c#>6DON#sShoCuV&K$E6fjww49P9Rj z_|4!p>r4lNrGN2OM~BuY!p=~7IcBc2jB~z}Fyn8lk@xzHi@wCKH;t2`j+?qtzNQz- zilr$N78&6UA_zj1JD&uECbMoU@BKC7O%@YA)bMqZtcCdoWt{Uyhk+RFjvD#EVJ$W$ z{^TuI65-HLmc?A#yF6V=Bw;}RI;kHq{5LygY|^SM>+-G5eZ%n*-yKG)8Hli(AV#k% zdU>#@et?pwFH1M~jqsn0Gy$whoB|vWkTo_C5b6KONQ;Wd|8G*p91Uns)g`nq2Xn8a z3<;<}U=ZNa-`u36L`t9`Q}JL>#=l7~&N*fA$95SbSWrUfQ#)04>}<9awe70VDu>YH z!Du8~U<+GXYHGA;)OB>y<||vG)Iz>adNL+S;dD;kkF&e7-}79q`6m1n2>e_HeoG&@ z6d~k{$v!m9;n-*>~ooajREX*DgjP5lfCo@VC_|R#fbi*+$F;P#rSHB z7iru@Yj{Jz)^{tyX6U@hgbheO&eQeW3Ki(O!9emG2<6c8lo8x<->aj?bw6<6B>nu` zbrVa=NvhscwZ{kltvFkR7jctWB2J5c6;53a0p7;7XxbdAgXSFbD9$?9*sw5r!{7B- zL7&DhS|nc0jvPG_(=PlP6syUI$~3;xTKiK)04O|i>l1Z!W3*pvg)FiIbU6E7zgfWq z2iMf>fjvTyJX+CxABs-hqQIyq$OxsDsFt*mi{S+SgHo$Ev~%>U=j}H;nu^fmTo=bm z>$pB@{FklP)S=O|gBz)C+DwCXSE%<-9j77GMmwmAq|wEKc+q-L1m;W4PcAxi1*hR| zIF-w-C8o6A%rbi%qEryw1FNAvpR<;eEgZ^0Hu!MJQ|eZfmJ-K4f6Mw$5Z@xwkz6bv zur!@TOgwEmd85->EqW{mR^M_AnC94fT2tm$i+K!^%8fP!8oWpH%yv3swNdQ@;J{71 z)cd}8qVw9sw+E{Er`d(^4jB=$#zavsV*CaPZqhEG{ zre8vekC+Gn3#}HHl&ETktDZyZ&r`9gb!ef^-}g9C_wm*_{aQL5FLITG zpH<7nE-!+=>>M94*MnCE=eAc1c4IZFD0e=!hB_s+$WgCEKhoEO=X;Hu?5;j&S}kU* z{&qL_2qmczm;L3RR12us6Nbqkm?&lv9@%Qw*B}`hCDxTi;KlEi9wV8rJ%BCq8#$?Z zLYktpETT*~6Z-?;HaMqHCc!Sr4i#BG^rlgJme17Rmzg#3^YdTg@57giXm)vzmNjzm zqQ>@BGVl8{;RO08{|5U0x8JhYD>HJ!3;|Q2UBnYsbuY?hCU((5RC@yKLxGp?d z1&aroWZ9Oq++r2F6qR?i4a&7P@&=h1XdF zI9?)<3(pZ}O)Cd%Z8C5V-{{IlC*i`MaH$MS`|EJ6cbnAlO~>OS29Ldq*Oq&0?33jQ zA#*R>FDY2RubyZa|}zgr1+ur*5ud`3l-Q zZzy?gDce{U{S-O`g;L&*0XDzC5!;;`H!7F1(b{+dv5m7jQBu=lX7-=k4qOfktFD}cwHj< zjC)C$v}GWxBWNs5-T9c0{r#=cofsiL%F|)Pvj@Y`Nu_t)CHFJbb-N<(T{`+^fuMpd zOm*GGm_44UlkYMqjl29l5|10u)fj2GK`&e`0urTAr*t@h()?tDKPlYv2?Rik~^n_L>MV zWjelt(S?4s;#O(vk=~5X8I`TqVsnx6K}tT1o$G(#W343$dU`c(BJiV+woOG2I+^&P zRgNV0Rk?cP?e&xF3(W7i!D-13rJ;|sW16m%K_hF9*PKbltUA(6?~#5i?E%WgaU9h;LFga;3S%Cp^Ax3jz*X@x)&Y+*W>crb32y4>`_TD4maE_h`0REKLSF6B4(+6}B%$D?0}AAay+-a=9Cj&&oeXVLH@Z1FE)6}746YKE8e(XhiP@9MY)8}6iR&W9 z65@)vB?+U_KRxA|4Uj2`ebZ*KJaxOi?BXTZBA0yS=Y5CP7DfP;lv}t!4KK~QhDUCc z2OZh*u#Au$qgCJEJg<)(Nd|FYDRS^i?)S}ZtGon6{-{VpNV_!cTw0;2i6`;z%no&f z(vGfiRQvd{AfO&k=LCJO@Fl@JVK?QxhgE@?eKP}0mH8_o5EjMWyH)LEXEY{B>)D0< z3H03dSZV{iilMk2Xl*&0Z6BY$Q4zm)IGTsk&UD%iVo4{4AX#y> zv_v88uPL}A9;Ub3pUK4Z)O&K)2|St4^i~s-YvlpE`G0h<0tTM^eKN*+CinH}M>i){ zZXUNu#>U)94+zd7S;81ypjjADj<1q$x$yrz7VKj&`Y6dcWVhy%9;Ggvg^W!#s4)hI zT&)IYOn8f#YY`uuRcM_s)E~PHmNiYSXx@L}Pflm2MeXyP`bYmuscs>~8GG z19eXa)*~RCvSq_S252i@w7CXvKsmfj#Me!C-(JF;rqLYD(jLsxj_#|3R;$F4(HdK> zB5N0+8{$}E=B-UVkZJ*OD3`%pPTSXW%NW-XV$-crKNzJbS63^AQ>$24O|sU&sA9D0 zimVLxdWS=pLAqFWoLM6%(j4H>oB;SoBgdQ)%tK)ON%4-!045X&^TvdAe{wmK$M&zY z`ttK#2L`ugYwB#)RSZ8mq@kz$_}^MvD}IDz5PH~g1z?LApWdGCO`oEN9C2Bh=C>p3=^h6iPD+Dngl&I(00jwdCztvR{!I7KjIF7$LYNUZ|++ak&|3@$mel&sgdwVZxfnVP4W|I;l-Iq1V(15cG6j z(q%dD@*X+iU2%5~fr{CZmLrcjw0z6#-4pGj@+v);%6e@qA*Mi-orxuXk=lf>&o<0W zvm1G;g=!Y7^o-RDkE`)n*7WjPa}HD1y9arU5KisJ%W1~58UI_I$3-&fWq!N|-*lSy zIbO{ek$p6Ep-PT;W^AYJq52-_#5VsJ@zI9V1sKCdP{uy{A&3I%nG#g%6wMNA2AZF4 zC-l_~7p|Pi|H|RiNdyVIgf?b14BJUb+qAT^t)+UCCIcLpuu=7p`wn4`$ zk(FvQ`Q6nn9$AJOZLFZ|&vpP3=3B@#@+qc=ok?>x%Nu0$c2uxm8pQiF4o8yJFAIab z-doUPvEAG9PD1L=>1`hZBp0B=HZGVJaFSb?J7uGwyT0Km<6-D|{Wxi(+ ze1ojue+>m@EV97HXtAnP9S}P>MXU?y_950DFr!n+{n{4OZp*)-D{BzyBLfdE{G$(4 z=VuSF)asF;xUDb`VnBSE3V1YYhcL+4<(56gQ)#fl_U#;T4Wb$O1X>vGDP_@p6}Qd$ zv!8NKwPLV8+fUv+c9q6CIhAlT2NOG1P5nZPTYD9ZhKs=AWFX`MPS;k1*1R3w)4yB0 zaPonlhp-gL!uFyiA}7X_K+3)*7Dn3 z*1JJUb4pSJZ`v~AT+-2{-Uh8br?;{3KH!fn&THbVg$$XWnl{Z_WjU0O1gdL4>%gzg zjKAvd^>`|(r7Oc%HjWe%;H@heOmqn~_BF6w%Qu>*s%xmD8HJAOTsx5_ zII&u-^SI44tiuVf&wOm47CYvsFjx>UGOO6=!WoU3Mz&4$xp8QB>a=F@ctymCIFrP` zgvksENlZy(OT`EHuSOmhlB9B* zrE+WYCQUsOg%RgcZ4HvrCezTe!W`CJr89q#nf)gJF%s0K7UEKGbHVN!X$Ob5@#h$~ zd^XU#JL$^1)x&CMAAr?rcX9lR?Nt4U;pXM1a+ni*g)OVA26wA=v0F7ihS8*B53`ew z-oYd7;#bZfd0z4El&f8o`UiFqgURv54;uJfh*x3)F@WyAE5@7Eca8<|^7--QUFW@r zFR*O3UoTK#t`SmWwFT0neWeF-#^kYGuk<1`?2bJuoJAisxT|Y!G7z1|hFR(Ai2Wag$mp9yx1j$)z@{E(wsj5t&YjfqKjpbiKUR# z*|L1pkudPPibVx{Pi zxv(f4o|w42qWk;K_`L*j2Vx++CJ!bkTw;L50UBmb43ZftsDCiee=ny0f?&2Tw^e?i zKtQDsKtNRgCkUqO;PD>-EJyYG2Y?}dcMCd?c>NZSF>H{dS$6~$t}iDYOw{cyg)kNg zDHPC+JH+}m)AiuocNS2xfNVY<{nx!TK=r2!0+@{x&yKmN%faEf$zbRGJx^c5Cj42RX<)$=nfeMhIp0?6>W4>N>e4DkitaoCJYAaldw23nt+T~*%7)kx>3;% zDo##_9ZX%U-vnAfs+?JLQ+>!@O&11I}Z-)?(Q% zm)r7UNhPK;iP*(&$2GHibi-}N8oKT5nW+&DgZDXQiPEL)?3$$>S%h z2#cADd#@iq z%`Z^E(cm{_$3rz^(-dR1iU!v3MCt$s55sf22FtVU{HWZOh7VqQV*0D*RFTdft$+rj z);IhEzPM-dribatgD(3&SAmBbumpXF#|q)$78t%us?a2p(lz-h4so-+fR<_V-` zb4~XZi)_F+6y|&$9~Gd&ZHDvbHGi~wZM{Lum`yc$#FgQ_d*b24?RH8 z7a4jVj)gQVe~v3+t?3@OfAA!McnU$Ek+KNmS)QO#5?!{q>ND`hAl#ZF{34Op_a`$p^vNwg3J7mN z@kUqX5P!hq0n$n{8qpHvJ)9#PR&)=?+b>m-RM9+qp7=>Fpx{k-P(y+68sDTin>SFn zKeT*(sC;=y6XRemiZpLmS)htCr!XzT)u|+^if4@8_`2|cd2%7iKoFh#_K5J<%6K2c z{O`efR^TAMGVxmeESj&BF3}~b+wJiA;r|9M{%eMZlM=p+A%TE;eo`v_k7tysk+H4W ze@tz%9hrwDHs*LQ9E-0JzzD$L8|d%>o>6e*;bEqeuoa7Q zk>PX2#r@3df3oTFJaheVjQ(4nwqrJ?1L8t#IMnOZIL(bHY(&=+3Sf92#5SaiNPQA= z(XEN^kUtKN!5>2b_Kt<60P~it$xn0O66C)fTH~ob93Ksiq3tL&%tGI6EI-^tf6j*xPJe1TcgkEp*OcOvt9n{K zn5!NOfW?}>?uZO*1)B?b65E=%=+&aE4EgIUPb6Wf4zYl6icnmy@7MdXNN-U3_zB|AGat~NC7Oi|VVg#<}(gCHj=0h}D89rqS* z_R@W6WmegetdL8+22p{P+O6uTCnYaFvH)(3H<>)rJQnek<+>Buj>; zsO0@^ckj<$oAty2cR&)&aE%HK)7(|%F*)!bxiKMnd7U<-X4ThwG#is~{ ztX(-HOA*#*VC(|2br{_TPOz0;lZ_c#mXd@V8W)!PVkVYO&4;_ghmbq$HARX%wXI?cAvgX{6Z>xZ^jFzS& zxcFN>m{?L~v-S*{KsT`_aFT+U67Y07_bS!Z8ILGWRMB|lpMwsIf#!u@Ux_gqNw{Vg zlCw&1NDcgbwrDr(B_W95fC8p=uMFnbetgitsmcw@hwd-~YImdo^{GT&w1L#=YwwCg z9}*m;r|5&>)M0#(kmD;GI@#vmz-^2S-LzTVEqM1jq`($|VwQ#dG`h==3HmT6)jk_f zJyL!$cZd3;&UFp*DWxZM4WA>^hKDFy&$J+`Y$RQ&K8jl^0394lzdO(1Q{?1E50;JO zY;I9eoP@$|d--u0RC}8^`y2OXq)Wa+J>Y6R-=~UZcDk<2p1<1P zcFzJ^g8aG1SJ}q#H_ZsyN{z9xcJp6Zu6x??1`DNMd{NF&Q6Ac|=CwSxNWRHWAgMiZ z2?F|kkYjoE7j49%owNu^0ugZ<*-26);mXJd9KB+T1-Xd<@2P~Z#l+UWxg2|xh07~i z!dqG848q6LT(j;AYZ@DC+W#zR3VtlFKAZ?yhSNyTr$H3O(81L!9KsAmD_+rOu0 z&1&uI9=D|DX3-NbA*5rgAhH8sFoy02#8Yl+Rgm4qUDdNij;Eu7u=QO zRce)S&PN+6>VB~D=Fr(C)>CRU9IiiW6b(o#v(o(rt!q@!Tb#B%WZh2$*(WrMXo_3PC@~FGvf!gVbI{R2?=r}<06KOjlwtUwo@L*Kcdu2Xq?GF7N z{N)YMc;+I0;FZ-KRw+)q2?~`XvEB}(58mlz2`S46OAK*s!5K8jdEoA>)!1_m-JVaK z(Yl~;b9qL5f8R5y!DYg5deHp$4fNk|`@h1ZIt6t@cz$?*`X9#ge}>!txBf!*$2)6g zZ|3~J_|BYEISm{&%#m*nK?vb|*2osR7P=BU{d&+w*byV<-q|xS za+JZ8r5qj&e{c@^@j3N4SUvApg3%O-&mAIC(qcQ-lSx1GD?fezXRlnIB!RE5BMl&v z(a_nLGy0GlqwoP)s5U2x5F*l}&1zg_XUPeoB18E;y}UaJQF_!- znN4Zd%8Kpu!y)gMXJfv@`;33XaYV`*%cPxFWMWVp*!~^{VCj+$&UDdE6bvr2`?172Z)3CcD*? zKQ>Y04`I$jjW+2nsTT!bLm#?$gKQaVj1Y`S;$RM;PAF}tw19>XNF!PkvS|HmD3a)0 z#y3ai=(afq#|nC}+7_Em>mr-LKkH1|+8e}$y}j8sR%3Snc6SvVtUTPDbljc-KFJd= z>YogkHys&1j{PqB%T;T8E*-gy-lJ5QnaMU~qCk~8OWr_OIc7(wEGNCSbEE+_x0%Vy zRSBS^I!=cXX)c4aw_(1jJFZcAV{L<|^n(7NK%qxw zNM0BTXpdz7q_E;c%Xmp-WW2Di73WL-KGEkXxLn@6R$tozop^rZU*{@~W8`9gLle{M z6UM*becq;7@&6g%-VZm$83uabSGy3aJau!q{@D=;0- zx&~(LVTazLwId@PwYUeJZw4KrDKv8-|B_%<$_}aHCrDSgSLgs6#49Mye0t zIX4{;XZ(U^VXznP28>wrhclh0za=ty9mT$JOY$$mzr%a)E4^p)HV+>8p?|4bP?aR{ zS3)#x+EX|r+wOb0DIkFW8!(QtT%F0VpZ?TJQVbfLs^#DLgB8gM)5H|~efoa!ofTzU zEq{Zr``11v+R~)-r~`60rK!ZHq68l<-t!}2jg26oKdKY?_+9%6v2@KP|Av+RhVh>p z$k-jPHQ>j%zxA_$NdL!!|NpUk)HhsE)G)tuHe2P|SQSP4OT;=to8w!dk`>Fz?1%&PM8E2!3ua*Kv-A+EZ5YcTC^k&`R zFyE8xYv1Q6-Z&w+*ST<`1|ITJ zNxVeKr9Do0C}!%tVglf3XlLnuE27T?0)F3%5emtuEi9sPsH5oiDM>|e9vUbN|7qz_ zsZo~23P7#P(lXqZ@v0}cQF^5IZo;jtc#Nr>U1U~5pK5@ukTrowa4r@%j*n8@5O~^s zbqe#ZJI%g&&(!uZ%nvO!0!3G{5jnuIhGqc0V5toqO{&JIbD)upv2KPkai_WHBFs!A zX@?ZIlt|9*lZ()NqHT*Nt87*Q86HdILTT#6##wA@E8iK>h*4*mqGTLYZ3_NgDr2G? zOLe&?C8algVzZpwOajw)-@&b@LuVVs(ukshm3C|421T-P#EPKFO{uuIv7fy)HKwm# zX6+gzW^BlI{DuxW%8q+b9|}ujHg)E#E5Byuq$5j-Da@c#7Fmv^B-9dxomdX0V&rsA zh!Zr5yoSQOtR&^ErqTvhYE>a#MYlN_>%?)VrKnt*wkLkOfK{?=%Ck+s|8J05=}Sc5 ziPZ>stm{2LESv_ZVRPGr1~ei7yhA1`)&^qgT#y`UcC-}Yh@jGN8KaqIJz27;>>e&S z{Q+;OnJ)kqPEJOxQnA4+Icf1k_#0N&boE1BEajGrK0@|SqNCO@nr@1dT(O&8JkF`9 zr7K)Q&WqxXR|*ErZ2;Ys1I&EnCF<%t7DFmqJ*Rv{_ZXTt=)X5Px-FIQ5+3)m4ep{# zpQ6jI`GFp)%;_h009)Po5}^xC_C#V08nIJWR^))KzVN}2sg-v$aT%2rjGd12G4-<5 ztc`3gN2Ht?4x^c@WSJ=R>VdGG9&om?0_hF}wNlfC!;IOIWU2 zZ>jFgF3(f1A?(8w8ha=`-cA=ytrQPwfn+R-l@zd)iwDI7koZM#RWCWMK@n|Hw7kMd zDMD3U?IQz1)OP`>n?(5AN(0P-LsmA6L`EehIWuiCT@$FVuPjSn=u}V=ePMdwNd6=R zY?X)Zo?oc5%?yJ5`!-|(ner*@GGbYORHq(5t@n@}^4#ffKXOtK1r76nfGtWSuBz## zKe2CBE#ZwJYv7P1%3`K3i~ldizJW=!C{42P%C1-DE8Dhh+qP}nwr$(CZCkJGt&W+F z>E4K*-QV!#`R+NHc{5eGTzUmAq&;~vwHhZ7Wo*?4T>APgVXJFBV6FK$_mbIM2LQiq zZXvucunKSAemn>40G%19DB-_D_W$Oii~7Dcwpv3pqeu>{?2?lWapMdCdu6ZzYLE?vYd8Bxa4!Mx8oq%?F<{6+)OEO%ZXiX@r_;G zUh65bl7k05DP%J!2ItbCKP25zyJ=6+GWb{{}`15uaLJABjX+jVFL&@?mq2e17S-JIw$gG5V=AJy)Z zP_HKt81V-r;FAW}n@}#j3ay&=rC&!N?nsA4BC79M6X#S5YWWPv~o#&5?1P=ed<&jG1S?ihn^YU1vtmUYv zg8Vi8v1QmA3y;`OSO|kOe&_;3MV6&YOV|fJ1xExdDm$E!mSL!CPqNweJ9j;~xv{xX zouau(5g`_(skA5&-VfwuzNvB|g*s=6sKwHN@pwTJF;M>t*#H<@;-(A>>=%?5E7kRt_PjJ99!fVUiGdoDmkosTyHDT zKm;No(O#e?w!E&p8_!WtP$Mc=s-mr`H`d)gDb8I!icZp^PQpNey{jbx&IlbFXWp)u z*lpsWqb973gjTlPtrN%$BqhCk*Ii-}W_uc9=_yyPl(}Ccvdk~{#>Lbk7?KBOzx}?K z(mXXY1=LmTP-6#UhCK8FzgWGqg7&rL48|r?emJa97!hDP2JW&9zpvY7H9M;-Lrrs4 z0**&H>$G%a8H~le@9)E$ndxM?_}%B;QRnzON~GVmmmB1>@Mn_JSWE{62Fiv45);62 zfEika1aYC4i5+F5(p*Iu3GS5mvdJaAxkkfLa`sQwTgc~E;f_v$9Uv$!@?H`Qm0Rlg zRj7MxfG(~kA|x?`u?eTXz9tTvp&C~}(mq?(fGQ^R!ZFDY!!TVuT-=ozdS;f&Mq6mK z&V*7Fo<1ZtZ_h!&=fR}Lv-A02?~M={i?9a}ATt!Mex&&Fmpgi2rP|MNrQCWQN_{M+ zmvUR@D>15W*||7);S2h8o-GiS_cVhY^TG5AxH8h`-wTg;{tA68Y1GUps4=PS*(I41 zxbcX|@iE4Svf?hJu5scE>96tvPEc_awZSgv)B-W%QPqu+CevzM=?D_G0=d)QJ0JUk z*=D9;yrAR`Sfll(4vcXy)h@JY%mr`Ft=Qt?Hw(~Fp;pQ8@^=8t5R?=E_Q)5zDsz8A zh#40c$h(756g@FX(Djjb`XIc_ z+CkPpZ9blrk(Tw8?7y>C?Ssj89I;Jn90*gMpd)+qrDn<5p`0jwz@M1FgpmN}`Ej;4 zxC-=TkW=r9kb6g7k$d~MC~6LhA@dB)pz$K}jBJoo?@{?JqA&IVgPHU3#C(;?us^+Duaj{>2uuOkM`%Z;8WMG3l$6 z9H*zJ?bj7m-BJ5W?JSUA?fTk&Rc>C|Y8!GCmp&B+U4*Kykt)`nM+=LozqXOO9hHXc z@hPPZ_%$SoHly`iSPy%5WH^1Fq-c=}|GV_*MD9>vt(ty=r!3b{V5^xo;nIIUQ&gcu z3gn}iSEgOW(#VS2kh%jy!YxYw|FuxPL!FhIMbXfP6jT$JEf-N8m`^}R8$IUg7w2Dl40C~mZ)SFew5Tug_Zs#|;GjGq!vO|D-gD!p8fDtPBL z19i{jnJT;K8toSn6E;X%ekbvtli>E6uq-1ut)tbytdO>%mcZrCm@SLp=}~+LqmUja zKusJv8kUs4sWq7vWQ%1Va5zzKhZ(~ItaCQlKyGkyJRl?dvoBbNBCGMB4_J z&fBBoyB@h&S|kF58YDf16ja+qqK!~%X;d5kA}KG*WREl>n=;X$gmjVUE%+6w)C+ zwL97;e6xw3Q~JkYhhuM3TRPwUCT9pFo63%hIB3sHYwpH(CY$}xv~E(Deasf=c>;w= z!NPWGa7}mIY(q`^z!Itzw1f_e0m6vOi&I(!1?dRVfo)oMwz0D&!Fo*rFiUOJ_UQoC z2JVop*RK##m-n&@0Y@L<6&&;Pea#KpAaZ{Rb6!s6o#29=vN}Hes_rm1THNm*euQlj zQg5jbAK#8U4f`trpX3X=^5eZt#n=lZWl$|<6_bjM6Mf-U^)2LUws++Owp)(qo{~@= z*})vreVWa0ii^G-Rj@DXjl+P{y^s;u315F~NF3!_g=?!@1ngV7ryq(eNXvp#G5s`%t%)+*6kHub~UlW0l{CzdsALCM29yVQOw zwb2nBXXI%QjnQO2m`(I+CAH;m(3{myPz<=Y{0);o{TFhrQSrGF?)@Y*mB|BK4kHxL zlV+>a>A-pUqLjfZlzc^`MU6$Kh(@N!6EDM*A{nKBL@DV0DF2}>uT@br=ur&=&R=d8 z4Z1LJMZQFlf>q;u-i=UOSSK81Q&FA)oq|oV0(|t~0Q0AZz?cJXF)hXbOpHLezD39| zQXEnX?!!C2c0G(kiR9p1QmkY@SzkaCrbP^*SOEwbO3b1CJmr zDPHCdmV7@Bo{d}n}h_6+hp;#Oh_@q zPoa_+Dx>D**HFz?J6YLFS>Ry&cZ)g+7;IAdJb*li*Bjl&9m- zi7jy>xQVn_b~@FDxxgCJUgSoG2bi(KmY1&GVq4<<2^fyK@G=AlaHupbcJFVHG=#2} zgZZ7#!Wq?$UmTF;Lz?xN*p6x7)d}!g<4E1(ZLsP({*5rhOmd&2r&cjnR6G}V*Hy`L z4f>TbNUdd@A?XS_;S`kuU{vprI;PwH3F2O13&A9!!||X~s0q~!rrS3S5VZRVpllnk zj~tnIk0g=kw}X^Z;5-8zYF6IR$7ENn=QW}T2$wl7dzP&D-P<3L_ZJ9-4D}9CLKRnk zR55kr^Z&v`mz0ge&<`fU{{JyS|4&S4{Uc70YhlaTYHhw~ndXx`EMNz+K~7vK-MVUCJoefbTkr|nl(lj$y#tGiN?eT!``0 zCBLVY;Dy5!16=UCqTW!PtuFO;gwZRQ!%5dv{j3W7(}RMefL#q|_KmlGgVL^|hO4tf zxy6SD_RW=hk1qB0T*3(Pw#a8uIgN;anj3i30kqXLdf-BE&3yJyZD@^qlGDjQx16>y zefc=}2--^0tmIeY_S#}u;qaz?OwhB5%W#SKfWYQ0n>q?QB-l@JWcs^_C>(aCD4=bd zq~_#eSISfJW~3Foz&Gtk!nwm%y1NXv1>AwWVi{+~E9(=FQ^Enq&>xMs@~;gla1J;J zDFO?u8rgDb+RqFUaAZ0t zRR3CNNu4}ZV(1WNNu4xhRR7v&$*lm(LY-1@Wz?Dvt+IZnrl}NMan%aCGX8jB=+H&j z(KkJJa@mT&vS!C@-CXc1r{w^}lP|iPG(!W~b1a(uvh?RSjwMJ>n3gp=j%(79tW~oS ztyYckR*`7uu{mqDb`|^Wl3j0(^Seh#PG6hVyFWPOBRH2yB{vGUwf>(#OB(%Kc}?#0 zb2u`>?)Z3A=wTzj2G@X|WEt~E;!8$;i}{r|Q?2_hqb=!oMST?_ggrKcD;ARhWlvAH z^5O6Omfio97v$evWt1RC4`X)5xbxl;6@K`&wkVpE0hXovyx>WeiIv zu+Cqr0)z?blx=bm#SipYxmAADEh83sp8lMn^CNrHrqee6{`nHhbKvVC~NVl~;8R1a}OYBDrRrhB*G zlt9uafx8Lnt6dxX?(F4AocOkpdCx;&50#bbCecbkACPDU&8d#}xxJZp(N>R*8JWZ* z1(4ljv>u%5&u^4x2GEY{nV3}A1n9I|YCP7ku_uw1zQ6H~r9n_xXc6as3e5YpVjT(p z9vU7W&b^xANRQj`t1F|c(67x(*5R@Njw2S>t7qaWMLv`@_HbofIus$;6`P61Hx(CF z6=?HlMFbUS!k5y_av@5L&m&k#mMALwD>{KxD6n&cRznl`a2f?ZFd?A#E;$-h8$%Jz zlP}{9p{4Qamfz|}g`-d^-O*9X+0|oZ`5TcdkIFS@Y6K3EE053VHI}o&Q~@z1B5CgI z!8u!>s$al3H-fdzPIq3<R#dMD5&Vhgxo}kSB^tl~|RATnb5nC4)$m zID<-*I0J6VUvRROZZpGg4&0D=dZEa@LvayS_nQyhOyd9w&v=X%D_jw1$X>$2bM}ph z{ljziP9VMW_ETPx{8bb`Flx$A`D(&8V^C5m2`nN-XS2>>sI@UH)t5U> z-R|=f0zPP)BPgYN$4`XXuwW@{jw zA2Uvo3v28142ZA~h(+I^KULOO`U@ z66oZ6LYx<06Th*MIu_~E{q_)Ju+cxEV{)T7v^wfhfztVHKxnj79!99{L@;tHd43ze zTkt%HAM9j}BY9hB%KYY+UOv{rjGQXp!+pfd%JJ*= z09n0$SKa0x(b%ebLFtXid>5gQSbkU#R6zb(PUpdGIhk#P*`SlXW;1=+V)&$D_?DFB z#I3xVGO7}@cHcGl#p>44;IixZ1jOxd13k?n-9~WFEUDK6d!>1{d#a?WYqE2}4zO3x z861zNs`-=k(vDRmKd*yOsQKP)nVmcBi-L@c~8*^qNZs7W@OkTWCS>6P(@KU55;y?>_ z(jRtT3!n2xl@G{)J8EfHB(#IwgzIls;A5gKr#Sa+z7}5!JilK~&m~Yja1k(OEuDcS zwg>fm`Ddwj@5gjP`Re2l6m7(LrqCn%A*lE(Tx)t^(z|Q}6jQYx76-^TTd3K^F`U6$ z+CA<`w%5q$@Wv}<@&E-@#kskQeqQDx6;5!0-?xjNd-}%?p-nS;WqhBWmuH92<=5_z z`o-%5Z^vORW$hx)pdFMs=0`QigBVI1wPM4TcngtS01`Hjuezq-A~l|V3S!*^n)(Jh zw+j3bg_sYFT_=j3rpRP9FRnG=iBw@HdddNcW{`#yA%&be$0rvl|6-5C1`A(5$!WaW z;PWOUwWqLp7%Hu)ni)phczu1dH3^ozyah%ZRPz?;jyAu?c4<|I!Qi&b->a&IU^BCZ zrTRujDm`oEey-I0+T}!R8ssyk9dC_w!A%&{ zYoq_}w{oQ>5tG>>I*gtmx}Wd{JU ze83qbYBv~{H?3I%)reND3+iHMm8DnvkTzn`of(#EyP-42*tJXaS$@0iWLZb%O1G&wV`CNG#{SREevtN5X1jkdPWq zl@A)sih>$p)+#SK@~A(oYRf;=o5q<@8>m({yo_rkUG;Yy$q+{_5?Ox#!<>l1x`?LjVV z(}Bs5GqpI$$2Z8fK(Uf}LYFS6DhSepEM4abeg1&HkSJdkgeL%hEIl2W%tw4^K()2S zS8*E&*jQ5wJf^G$**ZC4sf2Bm)Q7l$d*P-}=k8l^srFR1Sr61Y!44i1AK{q#TA zfvGC|ONK_2veu7P8qFIP-dPJZi1bB{w9XU;0ud1zSvKR>tSLMZAP=cliXjBl1@W~t zyrq>*rZmk4&n#34gS3fz-U4D4yOaA|n)JKI8&sy*l?O9C&|sWq=SikX&VBatedfpK zPE8G<;B8VMK`SMm9|dAHej5~b*k&{2CO27E^8)IIW(Ux&XY8AhA4l~ACDLMEE6 z7#5{Q(9$iZnk#w_7REY@jG?I-W3#3L>yx_+)$%IV#{)W(vgD)klP5FU2LG64FxV?$ zs`=xU4&DbLOUz7hh!@t}MABcE%jXB@N!l(d6EkWwBsW&}?@CdZN|=wzPHB=JskWyP zRLNV?$6+Z47n~u`Q)jbSi7;V5>mslRkZ>VHEs!{uWbZ=-594huWzjt2G++#D7h0RIgg+ZIQB+N11Tq$3F*UFjqii-|Hi7^~7%q(33scyF zGy@3qa@lj2u#tsh>4j0AJ-FQKiU-14M3-YC#RBMMP|iz8;+}Y~zrXBjCdrMKax(p}rCq{S~4ph&tcQ=~|gDXptw7NI!e{`$_+% z8!toumo(OZ{@OrvSmZQbuP=EochuIAtB?f5J)RK}m_fm{?a5RSAdMJy4$CRz5Cr*`Ht*c8=KNAu4ZMofE!8YhhcSQ4HFftD$U`u4|sfpPJ0jO5-{FZl%Qni+tYFAt?dR~Ig&J45TqtCPG#VkggV^<;Lwe%roQ#AbJZWf87LY!MFJ?&1@gYtrbm zhO)BLNfO7zqNmV`8YJ>$Jt$`5Kk+Sg5y4@AWTMQ{>_Qtry9O|4I&IYqutCRi1fb!M zX`SZAk>19N!OZ-`UKL6l?Xr&Dx7G?jR>=ujf8MNiC2QPwdvtipnrk%Fs)zN(By|=sbu?$sGaWd97n3>15w2iu+8kEdV)jhFtkF1 zRe8LWW8<<%(yF+JlRtBn>EaqNB6bzWGl%rx-Mb<)hxlUD^i7UO*q2-?y_31fx+bxvr;b=s%Eq@<)hYce9H9GZUjlP z9%lR`^!zuTMp+`f@m zAcO(Y+PLBRy7_khUU~2KdP@+&1*?VsW-5RcFkaM8u=KBoFlvC9Fji&GFmljlZq^-) zyuU+U)BK~S!&HEXI(}?nyts?Mrl}hYj5=|QIL4M5C2{8z=9!jOFhTTAarhw4_7;r3 zGuSez8dgDgX%5jL+}AQiI?x1J%}{`~l75G+S+ffY!ZQAtfwXBkthtH5v`U^~1=(G( ztITk@TCE#GxSbZYVcX%)K^Vd@wHnlcv}rXwwwe~?G1-dxOxCJ1{*i5oBYW!w0tZQ| z0qVs?Adt@MeF6Gx?9w!Ig3iT^xMdp zV@0_VftCsMt*vTPxkkqV7w2-ppX-_%7w`C(3df4{vWOf~800)gBHE!!;mc7bktC?? zTLuSW(H;xjT+aRsTWffcH+3LcSGRVHYt)OfzG(JHHF7lg&6T;iEhPVVH09VD;#bC| zo=ewAK@dL>$!g~GBIXp%Y(KUaCZmjMufBuwpdPxec&b$dB3wvUx4C$^gkP~P%R$Ch z9JJFX;;L{9!usJ4D>x7^=%d<)Q|#~G1*BG3esf;V{90A=8Kj zrWoBrdY9#6Rw#Wy)|9)#gdl&Y582$dhwtpeAonDwn)nq@=jiey_l#tOK?Sd!YPUV1 zU}qX)`<;me70+Qqj@Zi&ZM+2ZPL3V4c8BHf^x+<5e;4l0yhQM7+rxt=4hH!1J&Puw z{QcD>u*WNl@ssj8|3VcMFpzDFKkfm!t#YUG!G+LdFxq9NDk1n8;_p-bg8C&@GMrak zs-tj&0W}C@p!b#h)&1HSvLtD`B*H-zw^|jbTRGF$@2Ps*kR=qs8JlBiTsr5xizNt$!K!m9zDdJVP3FxgX zNajxV;BindX&#o7a2k$cK_NIm=u=E^8vs6iIWKR}pm}XGD3UbU8o4Alz{_Z~mAQ)9 zcMg11sQqAtEM37}_V;d~5zqe>JOHEZ!viH?DoMnC;fjRHdbX-ciI&aEF)cCF>hLK# zdSUlI3?se$TB$IWY%O7DN=Pf|tf|E>C22?!<1&8w;LiNUNS|YparqGzL_Vfy6`?0^ zaE+H4Ni8FL5PgtjC0%4m$r@8^AfKA}xbHW! z+Mq0%# z&pLE`2vahHJ)a)HN7mj8-g+(7-HMUoh|bv_T4=yC%>QPXwQ}O{_UNGucgE0n5Q#Ijepx*gPW(6Q@osPj)VuhJn|mh<(k-{(-^r7DR@Gu<}3QIyI=JB>OID5 zmSolqWj3wj?Yy(#VQgf$$YV4D-E0A2ZHQ|4}TE2)K>#1^Sb(uHXMh7^N z3VeZ#G6?po~5Ps>*Ts;mJxAi(NAG!au4X&8>-S%g%eH0TQP~~)|bencx9I2 z8;aW3YxBxMk=Y^~8;HfXHkY6X=95W9?sNv^e&nLGu$r;|Z+JQ2{gd|@xxe|Kvj(ty*n_l!hI@;JrEf$Xbt>x-O zQjAeB072S@a2ORWb5B5uw$#O1ZOX9$OWqcaFeeo8IJ?n>l@%aeZQQS@sF|9O%ZSS$ zSCj%ztfg*9lXbls!tbFtuPy2EE7>mLkoU_(*Ehbic6R-4vz=^i*O(xgkuSUJr=!$A zA6yzO>Tb*sE|PGrhWT^|sxU?SJ9TkLMlYQU$RgW_M|>R{Au;=mm2~f;I3>G-)rv$r z4s;{f=xH9@xRE29KN!u4)33ft7CS_Cc$Q0UdZGnC=H7nVWI4UESdN}UjOG0^(FrfN zv-gH}L?WtfJ0^-IGJxvXCD}AXF?*T=XAj;uYB~K-8R=S({LiyK6SgEEVnO2=!(YEq zLIzJy7~{GwzvLc>*VZ)e?jW<4fH4=adp*>KeQnACufI9slQ&?dYhY(PA!vXFk-l8F zw@dC6I%OO$I9o#7&--edF(;7S@Ao&0}oQs+xs^gp1WNU zaJM)*A~y#F-IeT4JSRxFeUcy+_E0>*W@)VcWcK}abmsE5$0MoAvAZVRItAX_W2~d` z-o;cg$7boa(j5n4hHN-H#8+rAr0VuG^l*CCR>4V3=GjY!y6UUu3{`0eilQNZPlVs@ zi%MlMUzgBoS5bFeAbOa7#_TTG6Xd{-~F6o50 z2y$`5!@S5c?i1AUKW|Z{#^eTav-@L#SPYSz%FR~nN*bsS>Y&R;s6Oj8gKe>s@h44=~$wqK16ru3n9}f{w=?HG-7- z-7_rM~bhkC<3+ir?#W!dQ=_)mUw`KK3@@ZN9W>?q#<7p^T^e zEG=nPqBn%iwQKiWd{IBE)p;Ni1hk^4+)`iP?R%r9{~sIPH;6_d{lgtuCP;} z+oG{e4cFPNZ2?>z`{3F)gI%EB-4Ggji8(V_{a!PipITo7*SQ?IOTN6vBs7IXdWHe( zrnmN;6DSBzaYfwdO&=Fn5e=jHmGBCjPekYt^ZL^6QQXnZ#gfBRfbznSj_uwotArs*3ou}(c-MwsQK7!`)<07g* zBdQgx72;zb4%wm)F8Ovj|R?-50QrTg>zOeWyYIqMJdsx*V7DFIrV>53B zmdZ4c85w*&uQ|5!r~iRHh;5!xy?y2n-wmc{^bU&`s8bT9%jr|5WuzlN8<>JLokOs% zz29zF52K41F^Ir>WbPA0!#dq@lR~(Z0-BpDrdue*Pgo(pxc(mW9?t{YERgvLxCLr# zlLXJ)5CW5cx~#ys%CG2=#9CVO9WrtEOp{?S#6&MY$G^A_U}KRw+w(U6jz64FVeP^n zb>83ygEap^ko_nA1Z-^G%&blR4Tf?W7C#dGm$ZY9LdD~Hx-tT8I;1t??J^3U6eW0G z@>DvQPO#V$e2Jy=fZ^}c8AMzp+z&wi(A^t^8SAF*U%1B8X*S(Anmu1{A0WI?F4#!6 z1AS7P<$q!}h%6Ip#av6-?;a-8?>YpVFrrG%o0bYq3@e3HOT?+#uf<=1 ztyZvpUuVuG7iHoxb>cBKa$a~b0iPk&|M_k7fk}|VEV8$8B$U_Nso($YxsIy%aQDf~BeEl;p>3I#M+L%x+>>0-GhGTpi z4x+;wZ)04L*N^+pvy8l?-c8BoO1vSQd)S=9Y4~JK2N3Yyf%|+x7HDqXGLelO{S9rQ#e)>m za3?FefexA|7wmmX*IDgUfF#ay7hHWU=0jcRJ?%y~G#J-^F(genj34u4tIZ>7M6hhE-vRUw{@yC6vMZe7c}=sqXezTYe3Oa5*8M(CCV6yB=M3+omv zqN2#-INaYLL&9hPuNlkvl5@+i$QH|OGbP;l8o8o#$*g_Noc*^TS_*gBbQi~~g#RX8 zh|Nq|8-iR7BjBeMhiuu_3LRCRsZQQFs`K3teQk4^q_*K9VA*U%6!HQS>4HNDb5(N` zSH57doXDvn^-QPx7TE2AM2N-K!7i_}G-vI#c9Gbz)*E4NIldshJT$;d@c1(Rf#s@2 z{$s-j@PBr~KLQ6Z?|)YV{Ctl#et2;F{|pfaTRj7#|FUOTDQrmpmP67iS)gx(M(u-Q zK|l_Y_QQuHhu0TM9F~tucK4VyLwCxRyl@mB9AxfPGNx#u;V#1AY^-CUF2m(_!WhLF86W~`X%^`!(Ms)BWE@Qf1}s*&R1!O{{`x6HH!=%$GlGm0DXVcN`-lbMxrr{X zcaX%Nme3?gmScO-=F9rVj{eJW%RI%r%frcuWW!Pk`xE)O(X`Kc)d4+62**oC;)&M} z$-a86g*4AhhKOpVS|+SsKA4c%$~PZuaIkypY=B!g4WDjGl3F=g~6wvgTapCTV7(Wdek%5-yzcq=P4q|^yS)=RXDUeit zJwRIBL8{!@f@Xb8p1)+3nhJAa{HcvegNvHXa6WoRKLa|95q2HT;0YooDmHsCGdO_Go*Y{Bc8}S~Y+ntSuIocf#+MyQA6OT^uzJ&*tG3*+;j6Q755w6L7 z?s-yuSee*9a%yNl=BwQ6G?x$8iV)G65K)BT9$+H^kq!WPB*aW9v=c*C2HPoG-DG`T6=g0IWyW* zD?+9ZP`Y4hjH;!`nxj1*|mjs>RUASn7d7<3!Kipv42V7C=0M3y%*2KyVS z<4>;m0&L}K^pN1oo!-hhtg|$Fy)Z2zw9&%jP{o-cX@57@1E~V%*Jd=2K3vb zE|}J<8X~*Tp=%14QL|CLDagVs0!j6tj@a6IG(kQoIIaYYIH^HXphu~wL(eZ{x8N$D z+b^}r+tVJGNL_k}kJqVnvD3d#j*}WPZU?V?4&S-2fjwsrW^z-+0m+y6Z@Xv98u#Kr z^J3Edv#r^X4(PRFa0DWl zmjM8%{x|3d*jQQFSpPeKF1x@~l~fvNJDoK;YW)P(7>B~cK?-pOw`J>mK|BDF6p{D< zEiUzMhJ&>hb#Jr^>QYkCq!@<>O&0|Vh|Tlsa{o?UHuy#1xph7F%zW>ByK&!Nrzsg% zr7>9;FIPG+pKyI&?;`Mv#wM1}mg_5}DI-*n0erx}5R^t+0sbU%{=x$vj)oV4My`VN zq6pU0fcdotZmw@b<+u7pbQ(nG=H>>(>1L4UFW7{zxHrO^wH)&)NitO2j%8=5nj^x_ zejH{6nQnr_+Apa-6gLDla-OiPZl8S$viBTi%!Yr zPs$28Bqu6ThY-&+ox&o6M1UkOV2K|tg)FaN8Jr}lDepkpBs-X_Pazj6FX}~y!Dk_4 zNzj}$=p1T5SjWZe+$%2fD+}IHcvc9hgS@av6`7Ak>@vC)>}fFnmt8#?%~Rr#wmy*Z zZ-fVwA@0$3n(?&2BJc239m(N&03k^Pg*rxA1h6nORdJO;Xgk{EVA6eAJ2Y6#=p}^k zmpE2Li30dYVP=Ea0aYO^lIW57Uz*y)Q>%-Pn*kCLDzlNG0bpA%7nKxJJ?m%F#d}t6 z>Dir!3fxr2SW+eh#>Fv_O$BBV^3zgT-thy9W=8MR@lxOZOx`TzMxw^=!W@2PD*fAf-k<;C3q*TSI=Nf3S;j1-Z>R+UO8ZqvrGOumn0%K9%Cxj|7U@sB$N+LX$TI^MF17V})*W7WpvYWl){Fr|=|GDXN!75&K zRd{9*{U-c6+f4D!F`mSclV>F$KFPlS{Qzy{aD6)^HNr14%WOB`ZO=aE4Pf=Dsqr`7 zW;3BV`{~#&gQTsl(P=HztAzw-Du2#HLUYt^+`eFrN<-QujI%aGc#E3tdMN5A%iFy4 zyRU*}dNEJ#DT5(>QL{6?dEDD$6pyoo%u0zM{k>_s;-v9N=%()il$wH1m5E&sBI@Jy zq*tk8rg&jA&T*?Cb$5Yr{_O5-8dapJaEjZF`|_|#>8?>NOFJni`?NWlx$EO-MQKy{ zCRgg6y{DbEa}s;~a7#r3R}*t=ju`i5r$I#2u0)D_9zxPOZpeNrEG$0D(>; z`wD8G-|PTv00ZXR`qg^f^)ex%aVg2Iv95W_V>KK7(X2pf1oR<{UBa{glq5K03q!(m zpdv&jIUTsKeGj1Kbq%cvv%W%qLN~83--h9lb-S0xp;EilM?ajZe&xn8@Wnliz}vii z>5)KvX2ShlZ%o*`@%m|jM)~U1int1s&U5+77oEv0>qcbz<9b5|ZjLVXmnx#Ox}!@j8W?WnI!DORZTwYo(U6YKfpTa;R&BrtvrjJI16c zCrQ9UnoaxraCt_{Y-)bvn|+>rIwAPRdU=0q;Gn|P^-$-irg8?Nn8}(dhm)qoh_H&T z)$Vx2`^&5`SSxDt2s31>NUtJ+LK$P-4jrbU*|TG~MUk~hJC%FeKwl8o{A%q*BFFsd z!0a?4du}0Eu}4_IYi#gk&Z!Y9g9Q~#*mawi$;b@#!fuCk z-v#@}0}%{PcgjxdYeG2VYCPTf@Ra?9*)01=OH|I$Vjdq;4sH{r=_eRW=VGp+*>leI zZ147Z&31!8%7QNo!ldscBBog{=X2Ff{9qnqZu|}93EzyC>7&fbbnC|RHoAJ()x^|w z)&7LS_xn__lhr15^jpkadAIvHZOB{4rj}rb7M0W|Gjy75gZoh0VvTpi4SfTayjhb? zw@=-L(3n@FdXHB3y}}50?h;x{9oOGx>p~^e&C6u2i!`n(b*7o`Yf3y{Wwxh3HLv?m zPNqq)F&)c1U&f?W9~vvLKbdOPjelPpbgoiSQTQl4N*&IN;JyRithqKkb|4@BJX$qU z9Ej-;;hGiQ^ec1cM^Ma*15cPtwGsx-iGRE`CXrZQ79giU*H1e`n~GC_a+=#&Ok9>V z_Lsq6TdTCD3sX39k!oeunX)~)xgRc^3^;Qaa3?%nuN4e&=W%aO@3?lUIrt~p#?Cbo z044F6wj3`qnpWvqsoDPMYn0r)qpR?2;VCZ4`T00;l~^-Vae3WNPOfEaEX*67e7?Q+ zCZaShZqH3*@`#V+7O8tvs~#8+E8J`V&+B+)*!sG|X|2XxturLLbNp&o9U%VZlc+Z9 zU_6-*w`w$u61ZTvaYW~n(A4C)yCiy+F%1h0c5!%j9hR$6i5cM8Rx#pvOiws!dT=Uf zSghdRy107;t18M40fKYlkvpb;v|KRpEE+4ikdM(xFLw)*dXkTc`+aQ{ChjJ}m3hG> z<`&E5-+tn_PwdvRHrFHF`=ENba(9&ISVkSq!tUy&GG1)I}5nsl< z^LMKvi{`6P{m4p5gpJgD@v*^=s9JHoE495@WuHog<+6kt&O689kDiCZIeqohAV^)( zgaRr{gsR?M;p?KCL)PBOQ_p?LG)$IFV>?NQY>CapYnrEi}Rz&l#4Mlwr$J%KS5 zFCPx&^Eww!GdMf(>r^%==uR$+MCPcDfA=e8p1AWLy&_)}e4M=sZtHWZW^+^SRhs)z zbqLRcg7v0?H&>w604Kab-Pc90zB~27QGx>}PM*fmENdddCg`yeUC+PYeNAc7R%az|U&k-#C4h?f|-bpm)!`0YcJ&R2k95 zih0f2P<=7E06aYa#o7T_Z9zOr_|1+$GuOh+Zr}iz$pNxE1t89WRe7K|y7~9bWZSus zdQogLix7N!VmH=MMKh!IYXP`pg!j)#XVm~sMgUwX07lgzcUh%rFOVS>Atbs0CAT67 zjCs#iOaX9tKy35Llg9y8Q2}9Q}8t7xNVNit8XUW09^9EJ~0pKIpi^R)BD!gUAE82$!~@OZ^#~qcG{3w z%g_KYuwv1{HD$p3xpx6@7_fcQC|#%lFtibhkFituuq&{=tgHv<9*lbX-Etzqf#re7 z?h%K3s zfN(CcDM*ew)F9@iWN%7^R?L+I-@a319)abPCLw`6gvDJIQ=<6c*m-d^;PK9^Y=CK) zW32199*15<$Sc^G*CwdyCxHj+T@&-mUPyUe%&!K}154Zx2~X4$SVlajR+`ulih+ao zo-i(zq@H{{Ix9}at)C-60E<83mcwNi-UncckOeu zwVo1jom-%4ig&MT!r8h83J%Gq`4w`2|;v3n~OL` z5np}5D#@>xO6^ZHKa;iSO$sHgap7d0zf++8XUs{ytLb5Se`efgkUQsCzbUI z2$~fVHu&spV&^@Lr3x<)JH|vb7S`b zo7e*>Zfn7_Jh)#zK+F)j3%bt58~FaAy#!^mW<0*Rkrt$lsOQdPM4zT5YV2G{3Dhb~ zYq2?RWbF?4PUj+9x3DD*&@!8$iUQFhbQWuQKZ%9g#6j?I1>qf;$n{WJ(KMTP1dX`3 z!7QpLj8G6ExoGEXK%qxbNnpa~r$xg~^J(78BRjMmYZYW%@9HRs9Yh zH}J}4f!qEH<+T2@E0i>BQAO)lXQsY; z4Bty@#!h~Tr+9}H?FL5H2T`{RGuBT@(yxyf5qxbxZ9hi8n=0hwW0f+^ifnwUCsX9`-WuVyf))D3hhAHp zq+9)6>IovNSPr*kDfK7BTgbK93^v3VhqZGlgh@3-pVX%D6)9FAYT3ES#o?SSv6ljEQ%=*y%|DqP` znNqi}WU1Fm6bdFDFLX&kT%5oYotohn)XXIvE~BkQs61km1$T3@3&xQJlJcA33$0~V zPDte@p@n{sht98F4Ri$QudoYDeKooqx?vD7m_^L9i)T-GBICy~_QUTwLGcK^u8ex` zLIqCp;BsdZdvCClqwI*11s|)=b-NtqN|$y+mi^|GKmJ1&#OW!FB#76X8&6O=W})U? zCHF!8-9zqjWNS~*>BcDS6hsc;n>T-|1`PC&giaX7w7n@T!kv?q3iQJtE6(m6O?}$; zk`M72mX3qUTp;Nm8BrQdJwdf|gJg4=5iFJJ6_K_05-zv}*a{kIO=gEnbM^Mfi;?Tv z>>w~YZsIN=GEOdMMsp8FqVA^=Bt zUeIgz<7g))K>X)gT(ED&mqlP{b{qVO+PbdVm1E`X(!Wf$Fhy51;xxJ~XS=+aL&-TB z6=|DA&!MI?YHVCn$oP#YQT@4&42Q#7Y#8+&s$>K;j$Ki$FS5&)Ah~It#RO>i1iO^R z+|kx3@At%cK|ywU`xSm@*#lmuf6UC|gB`+#<2C1d;R6AE{~+pGP@_M-f(s_E2chPK z(saGEvz$=vNBHiM$5)4;gA>|vJ5zIr@eyq@=Qxk?H^GZjjW|4u1wa#r2D{vmjmz1) zQK=N_%m~2)oOTa-Vk32jVa+v%NJQ0d=3n-lBR)Ys$3)9u%B=$D`Hu|qo$YwCRy_WI zWU`3H7WnuhUy?RdjTc&-^I^&qg8T2gjx1h%Y@)D$MMvfRiGF6puDkG^-jP|qi0wyJ z5HN_622pdE`UYbjki6`m|M``j^<+8#;NRE3{_-+N6i2+7d;tDR5+S$h$x|qk1tJ}h zcc+IN_$I=8VMB>H`bsWmj(DlAn7n}G@ybj9!ZTYliU&RNdkYwq%11te87Cl|PWoaP z*X(NRhYoJt#UT3kqn}907GgOKQ(Q_`ixpJ9Ba)274%;g^^fj2V-*^Ynz`F!{sU5+h ztpz{$L2YtfqxeT3d6Ow04#S=u7Txi}HNkfLQkE|JrU7$bqJ3LVbAj+u zhd1O9Oy)@TjZJ>xjQBLV3wk|lgif5Z@II>rH~Zq}ock|Np=mv2BaWk5Tzl|5=X&QR zap2h$*W>L&{h++fw|zsuipz;z*uyJlyL91P@8H(Gj$j7Dy&#lK67ejEsRce>3q0d! zw=)s|=KaX_oQy}`JE9b`f{y&*sfV;h(h4jBTwYnRO6EkyW^&0P&D@k*D7QB1Dl@Ow z_@Hej5+uyyy8F#?-mr%56tD7sTfdKlx+lL!cHg?3_X)x8?0|tlV*3 z$h{VEyuf=G?&`gxGA0G0qBH3)M)Zr;g+N5_tH}CW2PP#+Yy?rg93Ftz{>E8HYo;7DZyhYgDVDjXIdm|=ag$YDFZcJ3Bd?EO8K`|xwN8tF{ z$psDd1S6$(c=~4lLjXnpBRFOzPDXhz{)4LCmQD6~=rI|FUFc_5N!{*A56;(bM3?F* znex}Kx>aEe={U5`5du8%QPJniRhkZ)e;(B1H#x&j1~Fb`s~ArRuNetR_fp~amE$lX zt`GtKi-d!o@s?4`T-BQ0zaeXVqboZdVHD-{wpBrn0K&#z6W1E$S z){-6p2`MgSxQe*tSyUX;1{ebwOHOtK=lfwJsqM@;imU9R=S=Y?9<6mFd{pcMfjQ3^ z3ATDz4(Bk#BBbI>CShzu8j3569>C39p%5jGdl)VE_NV$;a%CXUx*?Cbh z&eIsQq*^H?1RNY+8Iz$2!T%rN zQpB*#pcrS7NYW3XXoiunMhuz8g2|>u_)lPsMWR7J#H<+x{4elts$5zGK1B?N42u5* zFq&Z~tq~=svBI)w5jYhw%rhv4Ss+LGS1K*n(9G(Y%S9g;WeiseUQTjM>xecPzV2ML zl#2Run}xPxM_BVWaT`ghXc=DkmwIKX?W{g{bc<@O?t7GC=ERx^A5*sj;wew)vafN(%}yARCKXfp&Io=6*4C@J*VC8yok^%G|b;yEw^q-m=AY-@n&= zx3W_pHvrt&v^jRvuO zV99zgUIQLQUb#_U)h?(p&3pD@{4j^j}}B`VUoCwTAM7a++P0h9hFR`^%;Y706h- zntmnnUAGJl%Qg-5O1DfFD~t9xas;6&nu!-zP}`19rdq?j3Kn7k+UU%m+D<@#Q4lgL z$v~lQhX^AWTdqojCuCKFSlzBh;k=YU-R_41DMMv7HB%*aI0J|=Z|Vr4+7>fkt!K7c zUPe8wt5QR^Dwm0=IG^DkG6Y>aO1SWv7z>JgPAOpj|WFyc~Wrdk>g)kzNQ)NY% z355_MSW{(%oAHGRA{ zWgFnY1~7jy{6Z+;!QWtrF&v~D5W&_kh8PYq4X9vG7-5Vv=>}x56O1p$nM?yZH~xH;XPzHq-5Z1nzeoG3}4Z?9x^yB%o+eKVyl$C#bA@jp2LkkD#R%P ze3_bU%=rtl_gou~HDB$9}Q$~@$KzK!g=G=D)=g&zt+p%Z0g4e(|k&mzJh{elbniDosz%I3RBK;=9GmOq??hChwO%yyJKYw zWKD?A3X6%oKn?Z1k5{!fE6s^FOFs$qEytH9)Hm9O58Z=DQ&Iw$MVY!%z1K|$8~}@I zoEvYi)x=RNj$bJVJ|n%Eq$b~OnC8uYKtaRO;_|!x?HgJGZ>7WvD2Ag`g$XRMGjMWp z5QO|1I4JeDWZ2|#>(!NS*T=cs)a&=gVe8+ir$7TI*1Pg=`E_UETB;R^Wf6Uace!RY z7hj9=X#{k(8AjGPcT+Kqts2M-a~KVb|N2}tN$Wf>-h(n(X|lCoZJ8TA(#fUA!=3C{ z?Reqi)I6=rs^Pc8Td0)jen>+6hTE?OXSoboE&yHx(A`8Udm9VuCeM zMdk-WQSz*JJfLj|yc>ce3A`(VBMH4bg5?OFsG$>it{9*b`K}0{6M3%$pcDD8V4!V? zyo-bB3B8+wD+s)+gDVKVyMq7yTOMpf=-n24OyFG~d`$Rc0X@fm1qIE{b43Ns&gYU5 zoJrta6`V=v-5IP);9VB1OX%Gi+>F{YI$)35Gdoa7ATT!Y7qtgGK#bZmF_4SeGcsU^ z+A}k-iP|$XAdK2GHPDUPGdAFh+A}xsit0Bo0FUZ7J`joeRu!B`@KhNr#(l*JP0oLX z2wli?#Ry%Jjb(Jiw3gRub$?^pp`C$aUoi{hRa382Zy;#}vhHZr~C1ttOb9;OToX zIpNd4Lob1x_?}+qVXy|xO!b9+=j~tZ`E)Ke5B;Gn#4nfYs;H z0o~^%seqB576wpQ;8*(x&#e<(7q)298Akhn)^|t+Aw{O9->rHp&sWmfrO??UO|xk2 z_QZ0zM4TX0L7*_DG!5f_)M$hO3gl7fqA8FTby$;SN||UMFbqbD&ne9(aECRTCY`9P zrQ89wl_9vIPUy*=e~6^`$`Gcdpv*$VsZ!1M5Re!oYD-b7B&w5gs7jhGt@yd!-~Nn_ z=AlzT#Zfw#)}u|c6;jq~KVbcvlipK3z&Cnh;gX?k$ikG0EzNjhHL_R=2SU!f6w81A zNr3sX;@VHLK^ua^p)5~(xzg(F56exaZ2rw?TpN#kmVG);Fg#7@D2=ESt2z%LYKpR$ zZU`l&+&1Wp2VkVU2w5L~ctMLNsI-C;z=|l1<_h*39Olp#SAd_9Xr7`gaH?i@Rk&Fq zXkG(1`r@j?sTux!xp@R1Q#M@uXaTSE$rE|K${^gAC1Yr$iz#RJeZm!-v0Y>K zd;?!?G5mW4(*e)|coO#wYF!j;5A1EPtwOiH&zSeK7T_O}!egnmNi z%J7pLO)iA^O^rQ{odPHTkLy};`AC&>vSfoRE%EjN*4*h3ugT#`0{X+t@LOS)oXM87 zOUbq7-;x}xG4zK}sQ+f^A7EQUuFta23TLkza9fiKf@|q3vg!^{+>`PwW|MBGc?ZN& z6sMuxvY(-^6mL*(GmNYlpEI<_y=tjDXN6LUYvDU5GU&w`ArJTr(OqDk(;cPA8uB3? zDH7LA4iGnU->Q7w=ooJ!yg7YJ;nk&+Z3xtH2;RvlV<3&|`zsIg zONSQYxAoAd{6Kik&@v}D)#DgMmh&d2&bz~OQey$y2V?q?Ibc_~hs|3h&}iYrbHF95 zqxbw08 zd~K5_Pdb_{%~4;9ykBoWmyS@`>qTRvORP)2tnR^^!mz0`G?)|p#bxa!xCTh~uDiF_ zMCGcEh4T1OgzzkeS7YXh0Lb~nLpQfmD23LK-}}L~5y+nKo*0?pw?3BQASHfn(d=(T zN7>+;J|M~z>aPX+S_${C3%^MY^MHx;0EB%-fPO`wXU#I8iK&tk;)n;RUOo5i+)gMV zr_8ocX=XEUMS@Tpi&%$)2%5q{s%Vg+qaM_z9KXO7-N}EISUUgR<9<~V@fp6ONzCp$ zU|mYw&4P>@FXcj;rYL7g9ev^=R5G^azy_mO8E_0`qfN^xv0KyJ`3<93&~ap6{q`7e z&jw6OS|c^bWlz>xm2>{h&YrfmPH-B!mTr~_;*(~>f<%z0aD-VkMzV|O{yQ5>_8HN^ z?HpBcad#;X$}gVp{dF_o75mj$rlnaBh940N7Pf`>>U(s^ovCZoUm4O6_H9Zb+eO(B zMA{D=WNU*f?;%Y%vVIb46EyDbc}};i>u20wjNX*9M|ft+7OPy*U107n11h@7;#q;X zj8?^S^fmU>$lP;=GO6L(adZ7MPVV#(J(nthhHHUt6;7im0K}ynMX)B`QXfeZRU`}R zRSk+ryA6&O>JP~Uti8M2pIm&oG@Bw{)J?rB`>wdcxewS$5s26Sy)4P!M#ooWdWWZr zP@LuMKCsuoA2x+$%SL7E#4~au?Kq$}o5>xZZ4Xg&g3jDRW9!5=a^vqf2ymHD1=A*m zD3ZZviXgK22T)OdAKrqk?*q!fX?(o zxp)eD8+k*#c*;x8##aIz@oFYdSiR{bRE;1hLF<@P>4k$Ps+Cym=kBaYv$a;Ev%z-L z4s9^piL4{FW>efX>oL<3ZA9*I_ZG8F64RLu2)C&ARu>JtS?~@5w`p}VSZ!>I>n{$V zHcZ20$7vm4ZsUgo@~^MN*zJLyzp7EDst=i~f5;y~nbr+7q2cSl`nEOQiTDC*~aD*qt6K1H+@#jMX`|$FztwkTiw+Wqv zNh#j93rW75cBBYUPSWwfJNa{@2VnUn?CW5{ThQgh%8)lMT^TJTl8ksBtPw`WU_@?l zsIKZ-bo0wYwOJH6B>FUk0XRH}@!==NQ*meNDO6Vh4e+-IB(h7=sobA`Q?!kmUJ?}_ zyaOlfKV2v69()x?gMbV4EmMgEp5&GBYKq0*6CYR92itUdfB*9{JK4Vw`#YpeL_*gI zK%I189REWs`Jl2^A7<5!ogGhG??7^Gz8}qh@MC3-25b0%8g=cXR8Tmm1*j>HA{^#n zAw~r_lV2<(RgP%F9=G+xBAip9)LaKy!U^Y318q`d&RCk#@}-*ApDl&EgU)R5lS>@% z1ZUVNkJqdYkmc$6&2^K1tUHVs{!A)dSEX<^K__bsPF`1zqwWr81Up&yt)D9i?0h>D zEr;zc1i^Q3`v#qil3Bep(q~JY5n6NjCJ;^p%*FxPIk4B*vq5Jv)_A_r`U57w)dt;c z5U0}Bppo9X^T4^Vl-eHNMm5v0S{--@#275XW+lib^>u)4lDBjfa( zM+L&S(NR7MgQP>X}oZpy3N1W{9U5w#!ijSP=n53Me}jQQy9p;C=iv< zCNHImjVZ>l6WAF0R3s84c2jr@5$S@6j@?Sa8be~GWVR~DW6It_LCwSlxI zsd{}@tEcN}P!stF$CXm(F^z}dDK?$bHbB8n!R*t8F|ym)esRuU_)FLDde^f6F_@4z zSd&%}5*A}jLZ3q&8SZOF{Kk5B5CJ@%8ZmVhh=x~o^a#Bn9(UTJ3RG)L#5}lGtauu( z*?E-Mt}HX78C_mQv!tZ~)*7jSqPIproU_i=<56YFrfbW>xBU*Q85o51RrH*vE3C3> zMD19^FqXz70%VH@yPgrs>Z#F?@R0wzB&%HhX^;wuOFu>Qb09?U_832Qnmzlt zeSVP9!~JFMlvf|;>Ne>}`pJP+U<+pv!%3n(>~Je;+6M!FHr3n3WH^>tnaTYyN=&z4 zdDl-KMmM=-hbfhzo+)~_wv<>mmd3Re5LnMfIJZKN-5FuY_A`rRFDI$hh&yFSCMDj; zy(!mTF~NoNK=fyH&p}s`QN8f~#0V#Cr-_ngJ^E7K-?6xTjVvW64EJE-NuvYV2HcLu zT6X^6{0U{NV;A@JvMmu$SpLFa)2xVycAqBdpV$6x`Ns}ne#BHN|GH1(${Qe7c_%dttHs}tx z{YU;xykoRhc@@!Ud=k{p;;DQB7*D~k&d}Dm102`@Y~v;Ck1G7Je=LQ6O_D?QqtOn} z%uwD)-P)e-MjkA19T|HMNKk0_)NpUTU2PM`c2HD!u9d3`oQUuestDmz>kgHuc+i%$ zgWP~Oi2j~Q>QK;8F_Qzdqx6yk7EATZwUbCl@`n^!1`YVYch}WWawwZ@uR0T`w--V8xmSx_T44+0@y+<{EGh2||O^_iDCdRuT8mS_a} zkB}y<%x_@9_)J%?Y=~scBFekb;WjwnLixeOZUl?OF4Y1O6RODbgps}+=H>mnh>V;P zY%f#i6XFUG>^WsliMx;Os7fzsk)gy7;=31d_9XF&_)+Bw*SQMdN03v|f(H>laeTMR zelU-Y^NedTb5&BQk7`_D1atx$C*fpBYvav`7{!w9*AW8C?%DEK!jwy{aJ8>x4d^Sntfu6x z-!7Z|62y|n4w}2kcfj-y%4&_avngho~V*jBobjXBcu!Px?338 z_F4Q6s3eFfg&?;5#eSQwzs3m}`p@T{)96@ z9k0euNjG=f&Y!AfSxe)8`s}ZM@cG?qFe2^xXZ5H)i~lo>J#Jmg_t=fmUi{DB_LA`;-&5+5 zP3`YVG_a0fOCgcP(FW>-h!W8MbO?z-#nDs53Rvp^TOeu=58f#y48MZ1c$1ppzU#sZ zy(XGSlC+AGZE!)0XN*1ftj~t`=zFOxIC*b*Y(wHr87!(JFEar-fmu2WQ1OV=qY1FW zwUw|aOH6A*qjsXQ=x6=t&WxysK-)hnR~BsK7|c$3-<#aB3SHKiu;MiTy6dxWWQwkJ zc5$k#_~nfr#PgwVM&04X#wV-C5tl1+>C`0s#w^v|*$uIm$1ro9hBFLDB=rF0Pp7;& zlDlWowQ1`v-Qk|r)SDT6g*9qTY_x0e8=Yyx@hbg^=)x$vCgaBIZ}q&V!!ul06#G|` zp?>alkE}iV?`>a)pk=SJ(AvD;3cf9w{y-FP+$T?&L6>G}Q-Z-kbrA~r-V$fONDg^1 z@>D}^O|Qc?IQ%clbTC7$DkyR0TWC9;UI#)6L52J7{QK!15e_Q?HYlsmSY}56aT3LH z01vvT4#y*Y9*VUrnR)FHp<#+i3GI8fM4XOQF|DNl23$gcEhD#I9v;s^I!rtvKHeE# zPhnVC>=Ur`fD)=TQh;aCiW8?P$u0$VYc-+PCz3s*OF@2{KCaNmwLYgyOaDxCfMS|z zbY!1g<45Y2`9sd+<{rTIJ89u*R0-6Fs~MbVU42zYDAvcS8JY+@y*|&5@ROqpz8t;V z?dE=eBAbQ~%^(~f<2>;b;SRf;Ksm*lxSf~=h^BXrS8)D(22anuaU3Cj zVx~?dT5n(Pui3px^W_x|^6geMJ3i|>pa-yRCKk@2?cz7?KWm>^2Jm+0nvRhjxv!PH z$vz+laKGaA$G>O)25%pGxs&uKmb^*SV|_B}hJVJ{&ypVtUDJ2gzY$(ge~|Dei_Q5@ zo9^J<;CJ@E(O#egW_J$;4jJ$FANqXwnjAS_F$KnY9XsEeyv_OXevp~w2M+Kb2JYwH zsy=ytFcwaJPE=e6UTZ$%zm2^q2Jn97m`?Q{qF-M=A^VX98k;>4L(Pd{!+=$aLMnDB zv@l4*?LuS_aPq>5<`<=}@C+pE>Ax4x8&=ZLAc6o! zWC+;dkg$g%B+CgHm2kQdQir{PO<8nGn32euBcMSZ*Ln`)X*}yF;xPR^YhZncVitV? zjwqfO{!y$L0`jo%pyYLSgZwluo?>+pZ6|^v4LPt%OIwd_1usJ}J}g}Wo6^vZwl?`2 zf_<4ZFrP>INt%fEK)yNbeh~^7dKcZGzVWXmoq&*Ara7o{QrjTa#c-D9gxFo`JLq&$ z)*v^D{V<6KEIea7%k&S2cKf=UL_$N7JQQBy=Dy3_8SkQW!AO#s8isv?uv;pkBEV{c zbbN3!=;M=p)!8H4L2-%KmxPXpe@H!O^_+Iq>ZkoA+ec}X?u__*;xUZ;uwsz)nSHnI zO`)Ua3F$H2ZVnazEMMS4|kX%7|H(Nu_`};q<7h`-lzXJDe{$dE10?%PuTN)E- zWvNHGr-GN=k6}bt1?SUxl%j%3@zXMtva&SHmKLti3{BB;(a8VF)>0sLmw~EE9%Pl^f!fZ(7s|r^ug6O|;pVwX#8!xA})Vv6umw$+N*Lc~Y z-xJ1byMuaO66n^Dc^06cJmM?4zd6@-QZgh}oC6VaN*6eBlHOR3MC7ZT4d7t|ln|LDC|c;rDVjtP%@ zgoNVHcrYl^3&AV^&~`myq#T8QeaFn-#gMWQ@+fO2NjY(d^bq<9M99D7h+%WdlED{Z zDT*b8~<$x4cK#ub@J#?KE;-d~F4=)jh zZ-NCly`+WFR;0h94_V{%7R>2i3`mBn@z59MG$c_Pv@k+h`phe7Iik}^8X)1lKrY;xc#f=o=#g`KpiL%HOirLTK8<|i+ z+~cXhacx_oa4lGp+oP&j*u$z|+*6>BLQ+8l&0K=y+&-!7_<2(A zJ%94ud+o&Qx^l_=I%`Ssx>U2kdm|fnPH<}Pc((eftU30n)t#_0)m`Sg+FkoP$Gzw& z-#yNIsI$gc``YD^){5m{ynq;YQtFZJ*;Fi}=2Fr6no^pdtQysSB|t@ge`@6XRc0Kz z#|JgYmL}&g#0N9q=+&k0NZe-9fxa)|)D`e3+B43q3dy^-3V?!F6%A_dQ#0(SOK~>@ zK&^bnlM8r?e_I_u&21_hRp;rR_K{`18|t7!Pa~nC{7f{EZrRWV`eMa~<4M*-^Icg6 zy|G)#;#Yp%6Sx5TxlegE@sz>Ct4zMoS#534peQSV~t zo-aSawZv%c%n1X06TgqGk#>pqCT%@^Tu$zo3TQsbDLp-rJ}lm~R?t3Snee_$W-59fq|_R5v1QU6rts}rf!L~49Y0O5bKv=FKNGYvMD|{Obd zF1L|BojTwi*KK)#l-eann<*UUyF;xS;4!~aEt=O&_j4&dc|b}v3pyol))M_P~}zOk!XL`8IeMz}O61p6qn zTt-3jbf^6*WB{%Eh(e4OQ7}SlpH5BMh)frHdvZsXG}33Ntv=Sp4kJiD)Wbe>&>y!A zzsx>6-(Sr{SN4+zehmFS1?mROZ(gJAw&D9~?UO#A%4{dIdl$;FJou9>++|WenIuv7 zIWp{SMtJ6w2+Z64Sl<*C$~N;WwtP*s+H7BR1PbwfvZ{0seC)cRo!GXl_buxvUs`OO zI1@qvq9j7dS@7p~bl>$jd-Xu{1keIAChq_G8Q;d`fv*Ky>)k)p8U2h`Y%!*9C4SxM zROFkC{Nz1U@)f0b4yD8M7X+}}v~zXI@{A4Yrjgv5s=H0U!pkUgo=i;5YsP)>W)m4n ztN*$ozU`OQL^c&*QPb8FO+HTt`!Q__hemY8{KPxiqui9gb3VRn$3@1?_#8F=KC0xt zq4j`HWOz)8j+*(!a)}Ttv+Uhe zkFvLN%iK(LGG3dt4{=sa$%aQKL)Qy#Aue-NCxGU5kK%>0fNI7n8wM4brq=Sb9I4dBu(+%a10y{db9 zq>e*gt0Mzi#&M8^Ayg^VpnqdFv3+rN9&y*HR#%L6*n`QhmF@haGFlV;`G4B^&Lr4j z1yDVr7_7AZIedz=;)zU~SG-Ie(+8EOWu`ucTldoh!ZOgsn&%Wt1{cAyyX9^hzM=1B z%3k;0^=l8Q%N(}z;>Tz;1noTHt7)*m$BPES;$Klqy(%F?TPko(he!&7H1HI8;PqBB z*M94f8(lrn^^IHGFZ_K<=-zg$p&J7&Kkyb6M?*DD0fiv!D;(bEf?D6&Z=beL)wM=rusPM}sFN{*;3{|0WtAh+{=Sx5`Xb|0rTQqYvberAu|Gq}kO zxgWv7_;YWrBUQepgKb8nTLkpiOv`8(MUg@}a zq9&SM%|P}K*`GaUjCDI9kViT4*<*W750nxzqiYPyUU4eU8)gMoK4b5c&zM=wh+@e? zn^Ryc57Z}-L;Z@jyRqaqLrLIx1I!z9{g8$-zKbjB$AmpVpctmXnqL)vCSG+u(jIom zqG83hnb*>eVg;m%KWk=bKSK$?`wQR5kN`=pD}p?O+x1Kp$1{bsDBIjDzh2sD-5w$h zp?@W1U8ZPBH$EaFZSKgEx zG(5z(lq$8hnE@|ZkymMJUS2QrD2|G1bZfVsKaWuuqM--+Fai$`r89J~@ChZ!9f~vG z5UW_6DL!swHRQIXsSa3a47L@7pf1>)>0NKo78SQ;UdFotVm{=A4CHhtH<&lcemP3P z0-{o)a;xK}NhHry>kNT150n4gesA~>I{d=@C<7JQrhX?g-+a9ZeS>}m^hubE^AqZS zL^qCm5qLebY3h80BW7N5-yeu&AKjQLrM;zqsQb;$5BZgf-x3JvjycI0QMgrhvj}4b zrnRN5`=~e-al`e?);M2re2;qe#*H-cvg~8H-3?u>+;I6b)O+-*(=4qThc}WkSM+h~~{W%-u>=;Cgktrb33+byfw^2b`U`f8co9 zGEraDt3(CrhvdaD|7xE7Y9`hWwK7~?!{{UP^fsfE#b8ApA=eWHe5a_zc;YgTV>~F6 z@?p1i1(J5iE50&(FSU~yQq31P{Ir0re`c$X7?Y~$I2Y_z6puQD!_5jrm$fKIU($en z`c_cnrAh}wX%l|_R!G04vq#(2t*?yJ^xwp-_{7joQ`3Fku&gNiW%Y-h)ta7uO=^5- zS_uXM^ufQwU!bjcKcy$|qMB4(G(<5Km;@z_t$OFB*C|?b_>j)i>Ll};j0uX)z%3#A z%97hVWAFxK*VI&Gr)qpRFgH0JN0@<|;r&JH4`3JzzmVN@_~%t$7+76O8kfl2xYTZ8 zlfh3%GI=>Bd^xi%r@PwHyMC@42-(>SvJffGTBS^G$(?H4r-;h9Ir}{a^!6IFTCJd% zn+OIM`Wge-f!F-a-{lM)%j*|@KLCzBDt4dK3jI~Wf%8fmh8jqLUrW>K-Bk?(U@bl} zfSrV5>?w9{3L1YR4|H7~&D(St8#9*~LEn7=zd{6nue~&fnp8}3(Wy6tu9^v$=!ZO2 zrFpdJ>B!IhnFl~ds)+7Cz&AE|?afPC&OY+2Kb!}@0}o*&Im2`44|#xMRbElcmuG;- zWH??K)viLGT1FoQUjTK@8KWTowjvdUaEJyr!>*~xxKEBlRY%73H4f`<4qt#KO}q3N z?My8aPPI8$MN^!VNelblQyGjhskyk^OS6d85HsFZxN?;y(DVD>IQtE5UQ!NEVaRk+ zzShc||n? zwiBj)r?OF+aM5%3u;Mc=&u7#VbAPhXql2gACr-mmKT@AJw>Wk zM`fj`W%8+_PF4B@Tr1Oh`AhP<9fV*pT=K0Q!m|P@wOA$ZxN<99XU!^IVCDUUVJqf- z86S|Tn)RMkg(ij!R^(RRbd&u=T%TVBqB!cypAcsNMMT9j z1g&qM%>?amN(AjCB=%rGS=_5QHWhD-o~khqgEJ4g$v)T*ruTx;g{aV39Eu?6#Dzve znpXN;R<9L4c|~BacoZAGmHt}eHEGfg3sLhm8O|!yx8Lg zD4~kI##3C!8)Av%Bl}c(kivIIkMTf6gkSdL2es!8TPEMAfeK}=#%6`|M(e29BIUF@JSe_Dg2O=2ZD* zC3aFB8SC^4@amnn5Q|ZbGsq5O^U+29>T=^5r( z|BGUPt{6T0@{fVEeqiOd@J7uaTo2VBRiaxW=lA|h`HDmeou%=Xuk-?a?I0@@WR`Gz zg8`hf%h0BcfaU~q7~Mc-uIgI7S)P~~@|DMTb?4YPCiWMClGUKr{Y_a;@_*;Y$IOP| z$%-AHAwNj}Q;@-zesH53W8H+B?ZIhyXgl9~J(DK=TrrvBb+I(qUw?79PXuIds{S*_ zL9ZP{NBR!wE}ZgPQKK2Xu{nFvKcG%p$LT^y>t8YIKQNf!iCh68+-E|G#$vsREZdmf zYsXvN)4D?S3t@o9*rG5%46T6r74Z2YNHahIfWxu}S0rw`JYsm*8HokNMIrq$?e_pD zvSY9x>}X+@UeO-rzX5_YziNyzCbf7XO^Gc}>T*xeNB2F8wXU6M`bWxRi}{EVHpGS* zoS`x23(~uZc5yqa7YiffJ^q8hmF{KfUo~blUGqhDz zEjECZw6@IBj71X)fX;?!%7((GYD#enG)6`pwm&PyFr?hBq z@TNeO{h|O>wB*v9r$5jG;LGf3!WH=Cg_wRxEdowVQf3trX-zdzchV`M3aV5mHFuUN z0Sc;=CqM3lXrR*yWVzH%PG~~Ywu3Ai7P;jk7{0_>RxY~BM=*ZLwCq^Cm6v7sQfOJa zn427@@eMg;LBUyuOZLQ3ew3*<$TDwnGc`{48|4Jd{}J|Y0U4y%Y;O_1a2=49@^zwe+Id$*3b*1X*>Z6s+-*?Jr|3(ti68rc%)fRDk1`gcQ)N`&^-{Sc3niP@ z%ta(ks60z0{*xw^YapBHT$r_2dDdJClO~;RlRC!Ia?p4-UE)s`N^z^7D{W*}dX`-( zmd=}OlRb9Px>SAkU20GECp=x3HW+BrJ@%-pQGCW+N|81gYLhviY2gxfd#~HPI`*yRUj=@Pj_}E*2hm4xHm|uvdJhS%OdL%D5*lcKDRg z$2wZvU;PMADWx}i+d#+sTBK^vDpgr2U0L_6#qCu($?uG(yV9HEZED9XbwUMqepPG9 zU3qTpbLe#!iqE1;v?=~zx6(QE#tY?VjHS|K|KxkC;_ksVo#SE6Jf&wRb&cc8`U|CJ z#3hRq|HOOV;ym;9%DXttJdJ1krB6MTdjGvR&t$#y?zW1B{tbEQP5R@c&QibhN6Nihv4NRj;hjyD1Kk_ksZ#N#sh`Sm zKtoqCO3b~T*_W!}NqzxkU8{=SyNSMmB> zWeLVpD>GH&H${A>DpGpN+iD3lyswlQ_t|X9n!+j)#7nnh zQYLS@_{UWSbUz_a)5b;&-=y)is_>E%`n{F#TdNEhDC6!E*>1GDl_c1g98zY3@A=J| zj618MxvDl9eg@vdn>AUyDdC4z3Df_?I-MRn>hu1NucsBDB;m1SkfPN0oWK4tsm?9Ta**A>(&@#Qa* z=z1hr9b;d{Ki4!ADXb*udMLygW9i@s=Ak6#vGnK&X1EMXGuc6LJjyr){Q2vdK}T%G zAz1-eRtes*^q9}xHTi4@I|Wg*Rl#fry9F}he@U1Y7kALlSnXA`vu*yGR~E=fp0VPt z`pfEu|1GqVoY4f{qLunl$q8h;+gKf7aM+iYOU|@}9FmBduqp^;dlP#;U~r^f-BDUH z?*EHO!rVdx&(BaqA`*;C`EpdVUSNyNv_wJ3ADW;XZH7Sl3DX89rK0z&qd4BQSOha$ z1hU_{!SUpDpdb)1d;xH%BN^gAXNy3Qt49dj)eeH`xe+ipE{q0>e7>-nA(Ln4;skyn zgh%JJh>GCc+1B?wYE}f;z&epqo|#fqA!B$8#n7!!(|mS#0XUY}3k)P_PH;`jG-~Ijza^z1M!)mo>WAoav}m_;IXx!l?jA%_<>_qQQM%%X9t8Grva-G z>~wH7CAivn2a&8vCv*i@!uF77kpoalEFuu8dkJHVx0C!q4PcK$+@W{6<^Y)J;||!1 z3iKmHLDTM4M zu!IASH(3i`e-o96Pyk-Gwy8Z=Sd6^20Pv3dlT6>!f1pDpaOeVR!4V-NzvMzS`jz+w zLPcwP25iWP;I`ekW@#i4Bmu=M7{)uOtWK)VZzX_@;K(57{v|CL@b7-GN%WU{O2Fk6 zDu2UQz%ahj6Y&m5hoWo;G8RS*%r%MZ9&Y{-o3DsvcmDtnMF%NOcF+19Bm%9`4mLt5 zMhUv;3=_F8Oy8M7=v93>4<(HdWC2C{gBOA$7s?ZMpbLaAT#pxokOlG^11PymBzg5b zmClbou+~tN6R!sr;u%yyZ|)NvRiL^|3Nx^reX_v}NDF)l$B1mb`t}IAzG4!%%OC?^ z27)gcz~drRok4Wp0oyNik)%B6)s#j%l2hV;bpifj$^N)l8lhKF=}$P^Dz0{b1Ap4k z%{}urB&>aYz|P~h9RgWh3#>^S)bc7a6l&!tRr=QG#dPb zMKc$9r2#gymi^|&W%SucId6(p5`lOPi=bi(k&%8+h)@FCw^b|pt&nqCcU*^d$QWyCR|M#iElZC$4-Y(#83CFz0+{R(`{H;qAVpV1j_^Yr`=$%* zvyqr_ot1JiI7^(fPcF^z-fMyppk_}roC*Tdg)qzMJiaiSkG$>4nuVr8;PjCgZx>KN zqh0i6&-{ue}ujP7+Qm5xaz%ehrBCcUSPL9T>A^C;X3%a|W<3fUZg zOY^Ld_-?bU&z3aX?Ov)`#`IPy^-*qIfW~M#MIo~O0fD^+QM9dIF&rpL3K1XsWs;8t z!uC7QC?(8{2m~r@Jb9ojMAI5#{5?0BrMXLJI0_6IJccz)V6yAq7w}A7QsVv)SaDKI zN-PTsa*teWU0S?9@z37ng`BRRP();#k5 z$%^sC-#v?2&}A>F9~il~1SM=KcG5XA8Y znT#1>A058KOW&ee(K}6ISxpFxllWx3FR3~`QWK2nn7jL2T6_;7k2{f>g`1Jw4DL2( zBlj=nbGME>om*eZ`}cO*r61ReUM?_mj9rDzINB7tG}>5t2M?7$bIbm;NA}ze6hDe- z`|QpUc7=@Ky+*#240F$U&_7QxB=;nfS3~;SzXY3;o^)Jx^Ls?&`fg)97To$D36z)W zdIq#!L4wCyFr2p~owj$U#=_8(do9@9gpLAS^=A*JZ0@$p7V>D6@ELQ^ds8fIlNr+T z@!z^9u7$AOm#nF48Ks<0>m0iQl4A>`u8BCZXLIx{ZJ3Q!`sYw|ObHc}dw{FFEs~N43T* z^iqDDL2zd-XDAM7V6H*w*#`f74RWTAlWuw0mA(sE7(Dnm5et{gIh>PEjA1riH?>b- zCXvK*@if+mr3pSzZ~xo<=|%q!#@2S1h?B0LQx*j^dTmzp&i45{HsE~;zi9inrcy>n zq4Tpn#uIa>A%d_Q<$1;3eCgRpz$-^Rtbqq_D`)OOUMdr0^E}sUlgVe9|03X>&Qb_E zH>$o4>ces>t8XoY)QYIU;^RefnzeiuDgJ>%Yp4D^da>@(?Fdj zx_I>Nzo4$pk4uN~Bv#9=32<<^2oXduJXbBTxPh>x&&TB{7fI0&*}He6_S19aUq3Mn zzw4Pz1E9L)ju+JOH9?nWI=V#L{G)!{>x<2G59#)M1<~;GM!o~lTbx5jq(jHxX4%9z z&TyH;rsvB?*EUN1wPWq@<`;35CIo*z(x|8Q2#=Y5r}y?tfw%MZ?sElCoB*FV1qVwr zhc0w@FjB_;_j;8FWIul~q2Fd3Q!*Tq?ZCXeyLUk)H)%_2yV=!M0khFk!G9{J+|PR) zLQdMhwxEAP_+1silP;8~RsF+wUn7zJ_{aL5q~c8@Ao>O~(inY~73}CgrX=+b)#@2| z5!%?|_jIXSpI7+ziBQ1UpMsKxr1%C$yQ!LDpmj!|>sqvHsxK1(wiY=@{vIFW7tSfM zR?L_AKyY#n=B)sr{Eb!Oj|1|Ki`Ru;Pz08+Qa1`lrpa}7^g78c1I@&0w5dU0WE9!n zR?EcbIa6q@*-9%FO&3PrZ?PvdnlsAK79z2MeRg9J0rgz7=p*iUIc&W8NRfnrV;?f4 z&EEKL*Y2XP5LhWC2s@IZuP|6{;42rf;!g^!=h(1F2H7vOBsBg(kp@N-Ua$!FtKi5@ zKuH7M;DDNd#k0Y88rNGD&PF!fyd17(Q;CdeHE%98Fu8iIGE0XMSe4W{`}vv2ie zWHj~&JLqI%dC*cAi*N_{*!-bT}Fa@&;oEiTi1~gIsDKw1pMk#9Djzc zJR#BnVL(q)kGb8j2r#1o5PshU}O*=9Omd(q{>jclwR7>~g;ULR@X(Hjb7{K{^;BmY-E7fA|uc`h=c1rLn! z$1K%MPX~qm*#4%r^XC)(oJ)l zyCB5xRx3^q-&k@kX+D5t%G(8Kg{m3=Hq`qCaf;_Oh*`I)u=@-;+y$3e{^X0dV_6|w{LsN}x~ zAAJSe2OlvzeH~g)b`ncm7ac0W6iW`>;dn+v3D9+$vh`o$9gPY)>U~r}LgUJgP7OYa zG<{4+$tlIt#U6xa-RC8fxGI6DJrn5cCy~Y|Ve>Z;FIhchB~X2F09XLR-X5-JLwGb9V|fm(_u(Gv6wr(CRu#iafddp(k? z`Ab(c8me%fsfaHX;b%X|kYoITOvP~UH?+`eGFg%M2od?f70>A}^RYRFo0dPw#k8FC>LhaOs3O)vH*IOB_^ix3C z!;6rJJF_rt>z=y7)Tv_5szQvzIMPC-fB(*J_9!#CPHi$j9@@emtr;tO25k)MGs0qo zUfglz?x_16oU&tt!=}Wh4X6wPdy;^goPt~6TbU(8ISc4w(#K(jcYqVaZ241)=`DCl z+6^`Ie_2BB6T$EzbiJb4Sa_&dDY#h1;wu9o(Ob~?<5mwuJ9hxCcG&B0_N8aa zqPEzdF+0Qtm;*Fq;X+I_Bw>-}z!f4IfpA${(R30Etnb_zGZBdLYrcTjh_E^}1cksE z3ywaH_ogE6EI{-4N>d0xA$(_{6at(hauys}3Mef#GUf)b@?bk!lgrCj%ZNnhka^4l zL%HB~w8WLkwF5Pd^|W=ME>BQ@5JFw zf*pA}lGD-qPGzN@5JD-_!%SRyZo>hw(lwhf1(xYRdJbnp`fU`=A9Rxg$^BO2VSbF+ zV2?naDe&ASul(#Lo3Xkb*X%ioXa@uMkqYCoANbQdn1{UeT|_oJxz~!DTs{n=)agh& z79++5f3}%^s@uu%_@5$x6fy`_x@g`htfdE(J+EvYP)~}uBkSq-OohUOjGjlaeCXJB z#|$0LY=VB`v*+y&iK!GW&R9At2=yc@kd24luybQLxbN9g(=WqZ$rc`KC1NFmY)Bce9Q(h1b(3Ic3?+Sz#0r7<8dww_s1=%Qskk*G9!m4Q!3?$OC!5wLz57OwLE z8uqPnIM5@%q>_c^iG2C@3*a9fS)qgAL@hwR636ofh1J~TnVca;CUyRc4}ah(A4KrVuPZoLLjS>B3rGM%vM%( z6Rjjlv>V%6c*DWZ_NM`=e!)NmqEOCd)gj-Ska;3=SpM5K?o%%+)NEE8CdI>pY#Gr< z3N@pYPsJk0uDU4z4!k0X#A6xJdzL|nFhbx!mVHD-6SX^XYo)-D(K^AtzyjdWnF2y1 z($f$ygd!Vvg3887f*FF!;DBz7vV>5*hZ&(|ujyo%fRZDYAh0kkcNLMT7H9k^3`MB? zPBvnT(Ho%=l!cQLmWY&bUsFXQLiQjp#`NfVlbroZbt2f5RY?b-Aw^jr2vANAoO6h_ zTnm>|&57Lw5)sqp_Q}v1AQqwlGT7eOE2Xoqtn095^#E4EWwasl^kPL3yQ+B@o%+F1 zaM2^YNO-6TNW9p@H`o9xXZ~OPO2PAHRV^dH>_TDjub5uoJ=hK$z6+O|wr^zJgfztK z@nGBRHhoAk_`tan=kA?1%hCd(Q}wh6dbGHakZ2-x6VEzx00m1&O7Qixbsu>3btig0 z91j@Fozc$$i6vV)dK%mVis}FYjS}S${Hr4bWbJ7Yv;hCWGXk&LGUzDsnv19dQ3$y5 z`H8sfMo+GwP)6!1^>4FwNdWDTZ$5YksO|^_sIm)tz$R4MU|Ql>4>HUkylBQVcr9W; zsaQJL9}s!;8)Ux{8+=3+d4vL!H^L4T5#UZr5jyow@EATe&$exDUajd}|J8_Pn7Xv{39T@m@^Go| zJ8EPSoebb!5g1c=EQ^B`{ig6xc2;bfaMpr4cv%$5YzadH|D*xLkQR0b77Ct_11TB_ z@;`3`plped_&@M8P~wQJG^Txo*wx7xw&Tm*ddn?Eh`IUWS(LA8Da`0X)^W7g;`RL zpz>D)fO{4mS#XHJ%0yIpY->z4#Zu^RfwemaD8(0s znuIHKvh(t=(!Ty`VnHTG& zABxFeM{d2Tv8;`;xJnVRoQKIVDh&(wEP(Xmumy3p*{G{bp^ISU;T*A^vDxyq9Kd$* zZn~ey-zYqt_r7E@G@2hlJ#(|54}ICc@IZF2;~E=F)m@w+}{k`ffsJfn?!RMXy~ zH)J+7m|l=0tF$!V9C;Gz$)XcAI>+Yc7FJ2QuGs+afg+P~gU-bPSX~B`W@u{%O=M_4 zA~h1gW4AC)Qag8<1IOQF7ijxVx8apAHfjf$ZPOk+G4|PQTe^or>kCScF~~=vYL=7$ zCt*W0Ufpwvj|_)n8=H)|eO<&GXrvS1BcgPkaM_L!9%9Mt4V(d=5uh39p+j9H`Cojb zx(i0Bd{&T@kK9m+u2`r+UDH)?aTp#WlYj3VC?3NduierfX(zdbhlyDThN7*cBD@ajH z^@|TMiTRQUf!2ZrOQ)ix^kTmG1u;GLdhSY1ojj|p6BfS_M?1m7sMWfDx{AxRQNo4+TVh+eyqPB^AtC(V; z8nKfJNTlj3ODt!F9u5+&n?F=XjMiTZL|lhEh9VP8<_BV=!swYL^x+FN=C8Kybe=vR zJo}Q$^hFM_noY5EfA}o|2se9a3L)71LI|jW!gl7!7ILG+G%Gn0Lx=GG(8t$mVf}xSPc&z$cL=2p+9CN5%$z4$g6tsf6 zw6noAUb|*Ur50Qo2@;9ylVXZxePMvpm+b8NS|kbxte8l{2!z@6H!otq6X!xcH@N+n zGrdPtdqxKmMoypQ(T_1y)3i@VsZSMzz*C9ry^DaMoy8YsCbH$o+l>hD{I{lq3O@P9 zDsMiz0Yi3Tj|D_cFZ+W*V|_lj&S6`KBHxIBp`VTRaD$o^tbx39jns}e%%IOGKRgm? zvMM3E#W700(n$^zu?j{`^T&1~&epIh1(Jd`A7);L)>l@D{OS))F_$3Unrr^Z zP0n`;#1?a^$n#9J$lXjFsj+r*oWy(^nnb$gDjDTo&PFL?y+%aP_hnm<@+c=V=xe(< z1}NL+fvkKd(+{+x=K=t!Efa|*WL#Wwcu{ro9IP3{C28Ik!IWYH3y>k+~kI(#}H?lXj8v7 zTCpp6nOx5b#&*f5c2 z9BMO29kk;{7zWv_8%%tRE&L)e(>v1U*TQREB3W9~vk^WeuDRzsHD3MWchP;DF43T{wHew zuUS6J@t>%LYL*Q7G2eAC?5LYkW`_!@gSklT)S4D&)FrbFZ>j3wR)I~NcK)rDh;~d_ zzcmwQmkt819ZK`%zUvGh46ExkS#b$(oD|4O>TDhq{Dxc&=Mu(XpE187ZEP7mpo#d{ z0B7mG+nCtjv{?1k*6+E@Co4#2In8Hh;kI0*TIv+o#WbU?Hd`XkG>fm1*ugi2S@IX2 zhc>gXGFwK?xPM+UxT+Z_>7KzkmQFr7ikKaL6hKz zIah4zpFxx4hdP&P`Z*IT!4G$?*|a+oE6ERe4s80IdXnIWJy&g-pOKg3hd!5WYMhyp z;DZgtslWmD5e+(USPM%?Aa&mQ!oJ4e^g;=F*(PL z5G4439xUDZVMlIJ+LMv%l9A&}tNsF4JxMn&!l2GRiG&)^Cbnx@hlX8&hSdy)VibkM z{Rt7J6gWuNbMe2hr|bFO)X?>OLV<0FfmDb5->@UqeS-DhP$JcR0)W*7L!AZw7q)Rw z{~_YPU=)GG&4*YkglL`I`&bXp3F9KPi=EW@9W!%q^Fr)y(&S~CwbHSc71vxo`Jq^Z zzj|P)vofg^^B)xdgPhWT@vm&iSJedTzagn$MPFR`@*mQptS7#69uyJ~7W@Yn#TeeQ zAtF^1t_oJd#q==i2{BIdLIQTBn2fR^6jc+rihA<@2C}056QTdWO1zjJYb`6uxg`D{ zN(u<(6=ST*hT8rYd}TwQsH&QLtzgAjOb@n}73Ex#_%CRF5+o_b{8EhhRYYI|;-vXs zEG1i4(J!Xc{TG_z74_k&Cc*!WTlvt5a?D~8K_!S&J;l1}>!M~#MSX79aMrWzQ$VoE z#4^b&hXFEE-?9?J9gfxGvoz&Tzgx<@JEmAyKN(8&=hU>yZ5@>hw9U`HO+Uh)d{525 z^Sg8K!#{UPg}d_@q3t!&q;r03m+ni;3C>L?1JX^<=6DzTJIton2gT<157^Cp5ueSJ z9`{X7{-MWG!HvuM&3j2+)Ys<5G1Al5tvHs=!8}d>G-2v5=L+btcNVY)kB8+j0mz)g zo9a0?c40;dvzGVd5Ig0x#=e59uDBMZ~aJWxqrWPiu=bhaDEdYgMOG-A^TuZ?K~F1-lfz7 z-UNW7yK$~G&Pf&33{VHuD)FVtnyKP-&y~rly(2^a(>YK%V1>PoYa!YjMQFW%D?iu z{lUiz|KYgf<*d<51PE`U<2~{rd zwQyiBTlHVz@_9!$ty*dHKiQLU7{5YlpEroIRN^Pj?d??;;aBd|4!EAwMfU ztr`nMJ!3+GD6X}Hy0mhGzqFFMmUV)V7zSksgj9yVys>^;SAep*wKL+3c^zP6ZcBu; z#m+VwB^pH*g{)_!Z=`3U2Wqbo%8M)$75pd2mIe+D;(wm&T2(_PA|eEY9smM@`Tyly zosCRv&BSaSj6wE}Zmue>&Spk-|2vQPmxi69>N37R+F8Syw|*_@^ZS zu3{Qvu$XGor1zgrWDORN>x&vC!k<>gVkSvLz@$t~mFkpcR(2=M8PIBa)4Xiy=6TV4 z#{04BGw*yx^Zapbw8~4Dg|H@u#dB$Fw#$Xj=JcV!rO&qHhu0-E1jBU+aumQ##H9d& z6;J!ynHYmaw(H#autVv`^}Ihk8g{>9Zg81&|wcfd>7Rg$BuYsy{4E964*XS%o~>ueUORM*m5#5M8c&sQ#Pg< zu|-1dG!Pe+2xJZA!oj{uc&ebC$tRuaBgIxhauG#)S46@MOVCGrT~C=RB#?+wYip&2 zcaehDe;$sp(K`q9j7XiS64&OKxPGXNSTGmojK~@-wMTR5=%MUYv}kGc%a_S7qO_+; ztjPFVPC#G%Wg2+}-o44g6=#lGG~e>4{mCdi?7_>83wo$GwB0>FtS#|1U9li{QPyhn z!cn|AYMD43NLMd{a`g*s4xp@Mjb~&jrE#SF-*-@eatzUt(r^(s;)zmF#h-=Z_h^W$ zkb;_KEhwqhXkE@VWasb6`Qz-r?)(%_xD4w2(J?~5&P@Qv=DdeF+9JgAWRq%ZggLoz zeSOeNpX+TCYL^H#hKMJkC3X4(B7^l}6Jo#`#!obxe;2y}$8n2uJo#i6e}6U)?bre24JPNx~C z1|?J4ipPOsr^&fmy}eLoPUDh-*uq{b@W%u3;kF@oQS+xElR7=eSM_?^tYCi>I-Zb5 zB>nAuHT|yOMzm~|D*}BDM-l^S=BX`kFtVq3zU_e@mW^pRHcHNW;5>cO^?>eU7BfC(fQk8CCEk zQYSYw^pD9TrOuT1anYs;lbAmbsh7fx~h*}OGIt5z}pVxyv5Q?{|mQoYf< zu{dH)rGGocrk@Gj)>5y#z)h~D)+LZe#^w|S?r)Mc3}V9XEVfHw%e|;da20RhZ5h3y z99)jJtQ>wu5x<1;L6HAj8I2Ad-OIn4(ZNYo9^BGg>>{JM0Tr721pdSZ#vQq~<|cG* zc72T)U#;V&ZW2yju^P*oL_&jaBaol|Q74jKD@8FdNDpvjesuE_WR6d5AwJMmrx~z@ z1P3SanKNyS4E9dys_M$^At(&K1zP`>QiG1=Zve7ptn1%`ONhdtv6aXBRdLzAeFo(1 zW`kPkj0dm;LdNC`j@fREA79>wTQMeFHu;XKVA5t zTrbE#SZA(Kf8WEy>A~nq-@?R}-BxNwS+r=YnagKH!kLZ=lVbLM&5a&JC++Wr3i}Pd zhiCq=UE9hBUNo&I)(d`T<3D|}sp-F9$p$6_2oWVYa`{FlW+FR!>sd_w-1BRJ8$Z;I zaGu}%7Ku4Wp99R;cqCU{psjeR!ZLj1s%Fc89K*oOI_`Z z{kJ5I3qBal6`644VG5gcs%S;*ov0~I$xHw1^ksEZW%8D5MsdR{ot0I3)C!7lfmS{9 zw2`0#jlNSKA8$Ws`b=}v>;;DUdJkpI?nAgLZ@T~aJJKVjkzZ<^e^{M=N}Z4g_fn^a z$$G^3G4>!Lb^`WOQUKEJ+ht*}|5uhB?k1eh@I0o%&J(tZH(yOh=*6V6o5nN#!6eO* zh@>W-Zx=4O+#ec~9tEJ2{oB3+py5&qepo zmf0ACEi5Q22)(#GKXT8x z(IFw^NwB#0;}%OHP#9D6LpJ&ex#CL0`-5ffiSUi{%426nnC?V4QuHGg5%*`EHcd)e zQa;)S$R;A&Q*4NijI2>kaRBpQ0G_+W-7}ltZ(F6*wMQBImqzXq*4d|xv65rGDGuzW zA6|4gIGSH^M~aZhrAIFfr+j{KkgwaYCu+)`<`M<6YC)g|q12COAInz~GCt}_c21N; zXY}K<=C$yb&TI8yNi8Vx-P2+Ct42yJ{GeHg#IeL?`m<1R5opaKlx0;pX*xxD1}EtO z#|Eqc=T-^c@)5(gzH7T>?|9oR_Q1&dl&UR=aM2#}`PBGSuurm6({C^7p76bda%>M} zh>6Qz&fV!SioWuF z$17FVr;M9y6)_$SJCa!y%yjjm`YIBz1SYY?T)U1xDjgLH^fRW#H0FLwX@K7~W|5Ej zHWlU9Lie!S0N(lm-ezKr_834Y87PBEI@n=)vi)5*rQY?VGGRv1c02Ryy7o6dQuO@P zWW9E1%X{2xddO%_NI7eAuDF$F=23Z>WGKM~jSelrtgJY@L){M(I>7KYwt`WvXXaO* z@S1{VX#6fJw!z}J z%M_d64~tm=>A=$-CsvV9aviR=g0k0Fj_=*tT~EKPwYlY6RiuAGDC2kn^a|C1sbf5~ zO4JE0r2?ONNCQPOVGynpde!|8S7MWxrF=(t4}}iB{t0#;dd1%M(hB>)_c(Q&_3NYj zt3&T6nDV}^Lr?iqUg)UGY$7BO>_RZ)SJtOdWGcpdxX(tPCRzMu;_US|0;Z&>tAPAi z9BE!i0A@Y{e?t0}w>%{k?^cMTZ{aHR&d^G8CLW`#p<#48BP0750SpPLkq8y^?776H zocbrV-SF4#4Wu$3(i58KuJ462*zj^V-jL5Wdc8$5m!tV4P9jB3l(guf@U*B<@i0BtVul({pY5DbB1E1iddd$T*(OS*7p8)oo~= zEoW<+zoVvd%uHKNO#I>`GHfvmym8&@g=-67c(CI4n{8T~nqu0YqwoJ}vh0MB=IVr7CKA?*Xi!_mCu2y;VKYPd*X>}Fn^UD zdw3ljTj{AZj6dMo5o!Y!vroj$x|n&)^O6NzQU@wrl6{9FwQ@zHN-$C5|*f zcm3tz{wq%^`FCRUy|4j>m_lDW=% zH1f8;fG8~<*4$IyPgV8?S$`V|X%F~%ytV1<@b8WMF0`ky)2fdqm}3p6B7EffJ>ZdF z?n7AcQ-*igRH*`GjVo2zw*f{>2a)012JxC`QEtk~XO_WQ-=Zl{nh=RMM!&9^igWcf z0PO^=SNk2F)N;qCD~`nw=YvP{hBaBG#631@m6z38Sobe4x9(*U@uXm&`URAvXHAci z|L^OrJ3kbm+_iu0YC+Q~&H(!n+GRo{ct37(^@YF>WOce^Sm~!m`y%pL3tGf4pC533R!)HxR-!wh_+_!f^FN9`#h+TA?o@nWw82 zdx&*I9B>vPr_aq)J*@shuS%3T<9O4x{2=hE&@-yT0_W!iJ+tONAi>r_bL#RV7Q&-? z0z~f;D-b}(CSz|+e1itl^I!HB@5Nff1B9#v|w4aawYfhO7*={EPA!kMvk9#^aPIM}F+D5{~TN@({j>C|~=ttN+}i z-R!89dxp~JFP)g7XUrzayVZ97W@mVKB^+{n^gm{Wp2k?8k=ACo4<4(>_ScJYG<5E1 z^lxPAAdPu{X;lEznMZjM-M!7}ikzHXMSpSPo|Rg0cS`U+e1s^e_+OKvDR{^G6TmdrVNA>Pzx*^f$2rZ)cj&Yz{TS9j4#@)dZ1d z1aF@od0Hn$4Mu~W5IwZw2q#(}_#LZ5bfQ_b)3_IApbi1l&l1XbOWzw(uF8uRWScB)3+xoA!I~{G-h3 zX5k$dWydh)`wy2#n-hPLj{w8a&G?H=XQ+T-=l9&)jpA+{#zQ*^Uv#UJwS{irTjfHx z#9OV(2j9Ix>HFigq}tN_OeZO&?w3&^`MvI~A9VvxB>OYgMA{WrM=bKy0*as{>3a{b zJ~qdgSylXp5%$ZLS!@cUhli0XnjInGs7G-J-DIqHPO8%HYEy=a1TkMVX*+)@!L0y_ zGGUjdkG}SRs|RtR;sCRmZj7nT*|30$*N!q2P}wtXAloTsPbs1T6bjDs#I*mLtX`?6 zB-s@0eb@EX(3B@sl`NtHc$)VLkwc#Y;XVBa5=>}pzN1O))lOj9&fe1ug|$pNl!uA) zXh6AVV)`D{NNH``N~Oc#pw8DaiFv`neCy}|Af=oaGz58`4E|58P$oto+@O*^yYZMoh+EbDmlRBu#kqjrM_@cWdQOJ!)u8 zfKL0b`6jtlcTtBD@)BDWE+rf&YtHzQBGB3($GLH4)2UTu)48(>?TO&!btG|C{zc#A zi{Itr`v>vILu1?pY^c3>s}<8GGk9%QF_#{;qfKa()tAHefQ1alD`||Sr!6uB zdOLh&fT%|cb8})J=dXC1?LLq5*Az0ZQeSa|=@)EYi&B1N%c!%}%y9Vjc9^;sPu!U< zTTa!_C#hnb`8Zj6k_kDQ+A12k1<=T`%(beRe|4ztQ{xkMzmfXLSNI_wfDXEfz-c;C z{4|w%mrXRP!Ec^ls(-x;-H!%!VHeJR&_ZZLY)(SD;H2m{UP3Z+cTd$EX_ylbd9?CgMfcUu7+XDhtpyNJN)JJeR&Op^?d#(KQYkp}cr zMKJS1f$Nm>ocRx-1ig*lGw>x7@;GWstA9-XVQ>Djns1fjat9AuSErs@`kT}2?iFQf zKNJe8xJG|p+E-s%7qZ$SN&Nw#x0TUK$Dfu1AP9Z35paE{laj^h6 z#vtp+k>r87q@?p|$8>|sKPTOAkjmRBlPNNcH}lg3zL2lks515(iqG)KQ(68TipwPG zO0bwRd*fJkGflO5751i{SP|Z%j8Ck}Uj)}!G zKbU^WP9NE(b~5Sh@*LO(_m>+2BPvmeiL`_E!2P!_wh zhkjcFUangG4(W>Qe9P_pQaxHx#ogzDVEnrv4Tq~mp?$kFOSFN3NCX`=6()tDEK(sQ z7aJB`sV*&edW+0~U{m{Px5?{k;T|SVOt@1N#=6+LUX{K`zb{Ck`b9`Fbs6~nO<|nV z8Lrb(Uiqiy#;kqRX6bk zin1sOQ{x`wEL42Jokm}8!`sFUt?ax?+1B57#XA_;Wq30-x7-SSKdDc3A5b3|)ag)< znKN$M8ok6m#-!C##vq}^^ z{pY|&SH8>4N8p(^swFbd`DAn8rRjlsx*iHjm2cNt{f!&8d}uRP?%g-}&kXk%301%N zLF3P0t=I7lXIb+P_b)xSx!X)dqu&bwgDXH~f`%c~YSATBaj3s|Ad{4g&;uNF#;yIUQ%q5-{uutZ6%~nZJ?7Y+lMsP z)w^rrdDOKps%w~T{1vIM`1^K?7rj#pcgBWp3Bu<9TAxNPgny6*j{DAbS)Z zy=UQWB4)#wykg~0t544SYK4>3^ZD;W>+Wk{gp7d|OtNt!6O?-WPlD77vD?cGMIj+^2Bk%mtbTL`b{bv&=!ClYnAp&F z=59@Vc?+mrX7PPv%Ua9vd+-W4$oP}-r}fj7*k{LzVr;QE{mA7Q6U&cW4>Pu#d4JRl z&Wd_de=12$;uxu`Gm*B^%Na*_-#W=P#ns%bQ(QZ{aUs5l(6>ig5R?tH=rYl*5f*k(6b>S;O{_EyH`U7tr( zc+!h!Lk#WX?H**V?cr#MfESn+{dNx{S70n@*s~#oc2eNaXp)|QS2nG}l_|GE?%t@1 zfLA81k7q*~?dPF+wD6ucCk(cza0(lHu-CXBr*^p={Yf5PH@QmQd899aw*i)kLW!|gailIGc~>ZTH{C+J zqlW_jf@uwI_86GomIeNWAHJlf^?1DYJpNrkhdY+U%AqCR_wh#>HV`H(GKik5{oA@J zJ9jxpD)4Wf?rl)+b<*R*B>8=R%|zmuXEXPk^vCr%=%=hi#zQ&=iIgCpj-bgw2b!UUs9bp8^b`40m1H&o%Y^#YN*AOQtT&%_Zd zLWMH{&<==A!P9j-$8#=&wp`%2FNq`9bsxl?>v}k9C2-uEz^GX~{vdz8Q z0XgLET@|4#ID0wsDcpF@rP025I>RYE-5(MT4zT>fO1yIlV7ELyqzi7d;P4>qfj@3W^q8V_Y@ zmq>lonwA*>N$Tg4h54dX{ZHu=hMVG)-@)o$JQY8d2pn4m z=Kj1hO<7LGQWu`r{{4Z^?{8DU!mnf7wO96LqOK$r<1&G{QESx&>MQ(X6TcrH!Gs^w zE%*b>4=ff4vh-w_0I~Mc-1|-hX)i`?GlGmXXnU zk$7)U@DfIUm%|cI8zkVv~o$c)W!|y=8{#vf9aiqZ>Tx z>EcD`3hay4qG(c>NE`~HfrZ{E89A-niqv_(GTUaw&( zS^u7eqZ5gn@s;T5 zeN7R6vn~_=#32ypC9pk~TN)3V7x8r7XesNt$I)<{5B>3#RGKrn*hUWIP33>jye$4x z_eHV2RHRXF`p*uge1h>GBeYeVcDNxQW0m7}g`H!`UlI!Di_lTpj4uW2j>~}-fCr>i z<6oFRSY90s&$aGU{H)73$m!ZAX}&74oH8`jdKSskW7y05>TH0EeEm`om=GLQ(qQ>2 z21{e1wMCOW1QvrkQqxXpz1f&xYbD|EM%mK(tL;;VuH#QaCdIEU-Y=KK8v%IgM5VKx z0GORq%QeBL_ZpbP4B$V0zm{KEMAz4M-ec5M%voL@&?&59FGDBRs;+g$4!Zg%womUy zUE|O!u$pwkjeNBnteqD&FZkLT77mgSme$tiehc08VAE-A(+|t3p%%|`-#Ttnn&hhl z5_jp&KYTsS&a|@2fu$NXnIzVGGFauZ=FPEr6fU?VT+;0%PQ&Y^*@`I5Zaz-A9Cj>n ztcGg*+1P6QxuO4^j%nefWFBH+%3x(7Cg1GpaEta%kCH&_dLP|5Ui&p)=e5bnwJ=N;Vqyjam&OsUc@;l+E&a9dKG`1W}1 zyteLZeUIc@`~K+$|DV!@8EP%^>$V^2J*P%n_n$Uy$A0dhEjx6`*EI+7U47~D@Ei^# znp;y*EdN-L_k@}1u@U#;HhOK$9-3^$?$XIyA^RdFRr}ssaM-AC{A;Cy7hyMDQLo;O z@BF^xFh*&hV>tWfGU@ha3c+@l-**1TW4$87UCUtc-(y=Vqn=vPPj78ZtuJ|M7!{JA zI$xAt9A@^`lywpaog@<4ugqU}2%sTGn3tjNuN`JAw#9#2jMatT9X_qvpSS|Qmj0`N zp9x;K0b?$O3=3zQp0(t6B{T*2-NGQFuN`abV_^EM1`1Fs5m z%&$XTnPQ%kfe!jt4m(z^dGJU;rmAA zM=0S$BwFBZ*o7(!zbpR`q{ z^n{mEX6bxSg4)XUh<^wAtB&yeL#v_NkUXX_i1zS@cndZ;c|eacKsAzP44vZL-z!%t zB$mhGmh|nTpO!A1+Xub<>UfhH?2mHPQh+7Sv;&);utTv#L`s`e#jIu8pl&hiY>iV% zwrVHxRm!I?Z%)5I{*)4%EDlMY@)Y#`+1}l^Q8h|)&zxgFzqxbM|Hu96Pfz2Ml;PQ( z+PR#iyx>o3-Y!{k4{Ayayo=f=(?EfD&U0g^gItSo8!1(Pbbiy?f&y%;4gAhcXKc!y z=cT%-n)JIZENl7kX2Q!2sZLP0og)Q8qAl{|jpV?KbMM-yg(t7W7D~OFKCd~r8~xhk z@(rQ(yd4q8Nx8q^`#x62?|VX*iu=)~Lip_o8GoUtCe^ zZ^}4weU8V1q+0_!VN3al@ddQVqMIE`H^ctKFhlTOlDLVReCPTk8CNp6iq|v|W>c9I zCuv(k&Zf2H8vH8>dSek%I#^>1FA{QY4<0rXu)Fs%hzfM^ZjE>CwQ5*hV~|2LPx?rG1CC8ffA(x8q6TFK`7>Tex+-|p zA_4oHf9)%L`#GUOGgla04D7;Ph;Ht8?{m|>{pQkhd}-9}Dkg63{3fZx z0`DvR%O>oKt#jG(s`Z^3-Sq(ZDA$D^rt|TmPMU54d0Cd^)@WMFVCJEsSsB(|Vmhe` zi-C%NtBZE=r7~v?+oW<08Z&IKP&y_dCT|priA$$d3-vW+uifP{UfcD2XC4B}%diZ2 z#LQyjGD>YRkSKO(D*hwho_7cjW{bS&?|*#xZ0$MoTf0o%@~Ef%>3Z~B-1_X|^m_?p ztQ#vwk1~a=h>-Hu%s(a6DTDsYyI9dEF+#h0h2@cxIEi_A#!Zn+c#|lFhO_h3WMah4 z#}Wg)#lwjvmT&iLxXZ<&N4;gT^j)IW&f!1UMn2z73-+|t&6sqQhkwaqIoCgvjSJoX zGm~$1ApYh6cH&QmZDHz}B&l1~p?6F9o7La1=!_0+C(d#@N6;Gp^z3h|{z^TNr~;f7 zj_n6EQ$EJ^t8bh6X_WgM%f|NCFwxvD=8jb6S}a1+r0Y@(CQUnvtnN&uJUl$;O{R+L zC_8Sx&Redkl`|dJvTg$uxvr<>zNy)HrZ00}H(q-uhJFu?XKi*>!!vmm!@7-Yu=jnB zkcR*9v$5X{3(vLsM^d&A$JujsB(+|X-70EZ?Awjwh54}=qtXLSzFPIXwZ;#LFT%g_ zC-$24Yn1=-L<HGJgNw=R#G5Gv6+wOSp}7dxjxMX{&5}{Q-=Bm0bRyHl_L4OCB$>!Y?f!Rw!ci_9w(jbX`RavE^lD9IGK0 zGBz1ZIZUGCvJ~Gex9VCfuLWYI_kL2E5AjeQ0Nf!9s~f=#UHuW(8XtteP|{z`0OZ#-wnepq5J6D|c!#W?n!D@A~;DvJD+qh!Uu ztl3W?4`ss_uEbo|ALQB{!w6dq7ZW|HWa=AuNT(O|Zaj_Yg*`0x4)>`EuF=%OGq8W@ zTq~&eTyvyIL0jR8tOGm)aSW8TrHODEVvVpWnbFGe_`Q+jVV4^%9<^}Q@T?4*swUjp zCN;IJ?M(Z@9jxWh^70Mws)li&n}*&I@eqq}gN$vBh}QF!pNvjaYR^jQxy1XyvGPCK zLVqYS4rx3%-qo@KhYfp6TWu5JwCj!IrEN775BN=cd0x$|z)>RTo~7Dzfqe7$b_+G- zgSDF=@aN!_e288K5K;wY3yJ3R;kh=t>tsdz*fQHIUBym><3DL;0QW7!9ZRqGKBzqx zhfR<#fD~7{65*Vx{EtcHsIWp#1k@8g5^lB!eBeMh1G%n+@48r-Tz^tLU_2RQAhJHQ zmS+1Urn2{e9EF;**t0-cRXA!jSs+T=&lD9$e~pVkqMEpgzqwW^Y`e3+9O=pl>l9NK zvsQ8U;M5g@lCp!jdbqgJRWvP+ZeK%$uu)~{!S#AgHTQpU=IIV!Xt2GBcfG_cuiWzf z%?$;=Dc3Vp5~#cfQ&~{?#-_7D)yVD_X%cc&}NGf08?;?l3vR?7zzCyts(g z{E{eOmxuDtKOyn=%SC#>0JXeI9rMc3IWje?m&MJR)Mb{L=4Hy|rN_0GiI77960V!> zU{0RawmG&BxvmF1-m%5N^$E3Gv$iHM5^A9H;~WEd8~*?izqH>or7U)-J%lPC1_e7BaGK+0BvZtKRG zYC_8aqfJK^i;%pIksKzO4@vV>U-3*Us97Az1(yd(c+agK!lv)T6+U>mi?T+CZ?Q4? zy!X}@ADS7AHtM}3#d?d;Pt^Tq<~!4cz(}qFSLt;C_JC)&WRtq>qfCH={cqW(&T?(r z`$R@|dz<;zc7Fi*rF(~IM8=W1S%Z9E$?=wf`6%6Tk5sNveOmCZ_|*MWELVpx`O9N# zUPwSio1b!rhBJK$@3+Y}x}$C4T*&`{$ViUVb-2g7@do`9j+ zRa=_Wf{(C0L%|yP=0v^A;|9t!s{5hyu{ERa&Ql5|J@{b2m%STN!O@??k$KRE&&cT& zS1Qx*mnOyV(`b+QUlWn34W}~??`+{@%AoGGhB8JyEzC>MOB|g}tF+Jbo}5dI(x><@ z|2VPHQ1$&-aoT{ts<3?P zS$kprKD{$MMp4Jtyy1IqA(ld%0GQ`<(Qk|Q`3-bqix$((yZ`u?dDNPyl#1{RUMvz0 zX9@)VQ<-A?{d8n?HbP-vZM}HSfY;WLwiQehNSw81;5htdXx#mG{JI5PY3M{2-0Bw@CHA7U;Q6 z^(mlP-u>UMYSHqWtfhZORs&uBX&wHA3F+Rr_78uy$j?*7FLg2PIzjDKY>gp&{7H(v zdUa{1)`4n0RKOtX-6W;n89I~MF@JB5A5V!*pnD0$A?fw?&ujPBTU7!pP>KDMblj&H z9d&nnUaR{b!2%u7J9Jy|%cOc@CXDirmwGFs)N<_?iT8G}*6E2|NO>eB5r6z=-q_IzN`>7`R?rwPTi5$*ajA#+}Mv=-X-%suR=hF3}QO10PiRo)VRfZsMTB`=HkIhW1gmyH4UZ zYvPv=K|!0rVn(5#&TR*KnRdLji(bB!UsHSa72>HN4ZimiQgrf>4LdW!V?003#M&^O z<&p{FePv|b1^E0NXnl*E59JBdwn2k2xf3kN_yin1+pbaTnaxUP6)0RKn*Jjse4>+4CIZ^`W|lLYTmdv@pi z8ozkC`!8i7rU;P5omf4u2-AuGhp3lGb(bh=aTx3*_Bz`2^L6ljEM|8em(@H-5MWz_ zQN*4z%Ojk|Tj&A}gRm3|tpqcx(JYKGZaH}g%P{D4>%@|KOcb1r#rF+UmPga(ahFF| z)uldt$QRbKST$g(8A$o1MVprK@HTPA?WNj45-S#+SDZ^?k(cP1R{vthI;2mQ?OQ(R zk@g+CjA~ajpU~^DR94aM@)|A|Y|E^!o%*~#r4M@(S&EL<3Fm@qcY@v_FRZaUIor>* z`psxYlmeP;PR*S=rGG}g4EUT%auRWJ&*7h%%cbSDdIRohXvHY4Y)13L^=L_Z9tt67o z)Rxc~S~tmm@yKm}$5NL0;?Gk44nN0P@>z#D(lQHlLF#oh;RVvlm_rnu`z!~j(n z8uv)eeKPa6ssX|AGT`qEv8l}WKeKg8XY>E&p9F{;|MKPJE*T~uK!^%W3_1;)-wU#? zkAzW;{bg^skR1NVcx!9373+Ix7)=u>sOxW#)~MIq<60>tr3A|Zy|ultbjbbLN~-^= zT!+W8UREMgpS94=KkoaV5o#C1b+oZ$#3|!fc9B+!paojSs<<;!U}ibx6{0|+4`M_l zHyNu@)3wgFnD=fvFV;JBVj)zEXgY5PT7}Y2F`UP`m{)0TPa+fE$KvwF1wPvM)p4p2 zQ>%ZVige*d{tE_zf~tI9XQb+*g1k?jag2Gs9!MyF=nZqGntQgyqUE*MpsmYcaICLb zn;WO@NG|Y3Mm?v>Nl~I$gm^_v)}UF-5?l3rOT?JN#Y2s3h?wr81y7Kf7S_mARBP}P6e z*9V&ttIB5a-~r>8wS2pcdh{Q$eqZz2p}6;asd&|qg7=fq$&bpXv^D6a()zHc8DP*s z2M+j_)&kZ#t!oQbTm#^)R5JWvz@p#y^1dcHoT%ROzE*e@o_r=xt0h~@``%Ahb1b>i z<)kE*xJKM0E#B&fpo$U6I^NYK2mbf8-Bk%~r}a9~Nx3X}73njhNoQH^v~!Ti9mVu( z0~6_W)f_KHv#+kTsq#8{XCFIeDe!dK%Nr$HVrtz4p8+nXn($**gadQ{_ql5@ZLGKt z`>gDa&s8xIMv8-ClplbE5ovUv5%DCv}gm_ z`dHlP@O;P&8qf!N7=`eI9!3r*!muNNT(I~^gf5giVt@p$1`#A0-o_0aAo@|teVrEt zWQB1?0!3goQ9vx1YZQX+{Myz>wDo;{bV1=Q3bzfM@(cAPYXv0x@CD7zlC502SPG5J(R5!9vJDx3Qkrhk&jm&tgj*Y*(&H@cSqrJ?s)2 zfer!Uz|*1-!q7_;#2*N<#UX@XwQO!2#){syN4i9;fj$6YA6ElSuqM)Iu`85{=CJC&=MI>=4%C9wdy9c zmdH%)WOEmCX-Jqfy-@r3UMy$AS4=gv=Dl@a$O2!0FkK|u^N!!7x~vt1n~!l|PWZ=m*Q z&pJau>Hp;OfZAg|pAG`$|C5g&Vvqm4J_y8yEk^@YNuKS#1ZwOm+U_Am#U31BfFpGx zMarjGpV&(d|2~9Zhuud46=B2?2xeF*HUb|4l*R!Poz7>#ZUE0+LkI!bHag-7g1~{7 zMj%X}K&Mi51MxMLLb-q95qH&MXzhe1V3`23(E z1H5g}p6D45Y7qq#fHe%-qd!|gmm>#I;d&6H`W(uzr#4jNV-Ac1xnUMji1*NDwEqM| zfA$k6ukjUSzljWP&qAA=scysE8T}0u62-h2Vt(v7ax8 z5TY<3Dxw*JK!*b(5k62R{9(m*$D8=r43=L?xk7BC@v$avKC2XufVf2Y3f>R%Wz$n> zd~~=nrOE|}4rkWM@x}6t7}xRerJM}+7@MphMU4L{Dochad%}Ev@&BeVf&fa4fnbIb zVSb8~W>@wX&3?f+mzdW89LQuj6un>~}%i}171r&kxygh`Vh9OW90}w^hn1RnJ zCz^2AxAzCj^y6j3oJm`Nt6))%6SlgxEtULW-u)v-E{js7kBNM#cTI;>YvR(9&sb88QSE8}r%bKQ|PFJw+l>#Eu5yz~ZA6nc$fJq4)-xhCKQc znudvxg63iEFinrS!MCGJ1v9>B?)hAOBOG|bp(ppV4s-RHAq^g_y_|l%lW->U=Q5$)~}B)gJ$hJ!Sx& zlAZs^7~@cU`p-K#U>4B`9w;*3=?8&qNOpnzu;oagyb44=X3%!_HMz=bQI*&DDv&K^ z7NLH}t2B}aCQJkoR5BXK2`fcGm_UGZNO*xL@R8ZY&ZyZiEnIIr5x8t#hG9;C_o^T7!6?vB}V^`Uesrm|MXskASrwWO~XcDKn)0n zfkcJK?nNUJ3GO8d(iC|Ik#L(qkQRJ1h?GYLDjA9FcBmtfIX{Dq%z1m77@)_`T|ugc zW())pUphE4@q?kws0cmC04=;L3LydA#(XA(Y~wsnLy&%e>}U9K5bdd>irRbIsL#a^ zM*8G;}} z5`w^nA_)HTPfi#D4Y3VT#Cj%&Akqqw`EU@wsGi?@eWY%YrJt7Pq0Q<`Q*W+_IqMVa z$sdFMURTCDl<)ppA#cvJ^6+S0k-%P&pR67WO3ui3O9nNmCk4BU+K#-b**SWNLA)C@i*eWnnQIOhR?lXy4h_ za$=uR2wy5kPt3lS5&Miv=%Rv-Emj+Wl{5QVpM;R-m9s{DBst(26WN&|VJ#dSpn*>f z0u^9+(Fj(kJ;C#odz>$24t;Y3mW5Hy68!l$qJwx{J!W zU+C5owF0JLudM6n^xz?+!Y50P6HUGh@ZREIV}um08?|<#sm*1d?yMRg1&?D6d;&D^ z2SvW3Fk-D#a7FwyM3FT_`HuV;p%{QrN>otKR8h|~Q03xLLK$}lB2YqUQDHo2P;rdc zg_g`LD2FZI7`RbJ%}B}qb%Fz^2x16=6h6R;0#rqLCL(-RL3xfw zfm5T>cv00R7B6SOMr&U0U?rmsPmsL@!QP2-#Az5GzQcEpv*zZMi+evp&Lt?9F*$7F zrXIw}Lwu>5v*T_`xrKD|?!2FpMxx~6Pse)cu7m=p?ONhFrw>@O(w5Q1zP7noB& zVqX&nRc)8*ofbR+IcX(P^?t{=EZiVDjV%ZHnrxh2k;gWfQwUN#MEEP-AwpL^H1IlVH#FO_7oJvTvCa< zFUzF-_28V(&dBG}ffqUq=OyWSa&P!Gyt`9LYx7@Q`0-7A+^vT37*Rj(@D4+Q(49l4i_G(Wn~=j6+R2|l>;NU{x2BkQ3w9qmNJ0@?MaE5rT(^BQF;Rv zt72vNSi{!TH2ws87b$QME0)N-CF)yB~safasRfp3KjBpHd1*={+|qcSTgH)XB*+JmW~zN0j>j)PpwIg&-o5I9(8@d9 z`suE7C>$*s@8#E(mOp-U9$LxWJV%)(N~~$4Dgp`p@c<1LutEBftL9%>_D6iOf9MI% zQGlN;U|{+Y`?R@VyAp1NT4G5q&rZ7va;ubD`J%R|EC=0h0eMVzIzG)xKep((=r`GZ z+NQyowiDH29PzE$Hgpl^LREtMysn1jb4+A}kpNW|u#jdpae}%MNJUeuwU~^uWlA44 zA?_2ILrYZ=euB`f@gxh_OVboH;XoP0qiKqsaKa2m(`+Xp3E@$I0VR+<3z+FVyY_RV3?}>atMy843I|qI0LCZ)VEhI^vC8&_i=VZm zm6gmLrE`QelS`2`7LQE^eDcC)fAJZ zI9rsUkx}CO1AW?0KT^^3BW3TQA#02QSSW!O(~s~p{Rr86h{$Y-6W+!Fx|Bd2{}T$E z-HJFtqTK|9>vhY`Y*fx=B+4HAf=nJYAwU%*pYEo}9*jkH9uJsN22nGElhTjGHIcQL zWH1u8VgNp>pg?Bu6HWdE=d!s7uzRgh!)5eB=A`Uq>nH5&&{ za<+RwWd;=>ZXTpb&YzN8MwwyME+SH3t}%wZzt-7_i4v#{BY|~(f+Sx{IKwiVCSUJv zTp^n(U&AuvpWA;bVk?1^)7^yF>4*}pS&UHGd7=PpEJniYJnl7s`Bm|n2!Lx6*>o)6 zhS^A*y?{7@N(rR?A2Q-9AdYl5T6P&GGFyxUfjB^(5-2C#jgq|wjm&mYKS90C(*QN$ zS}j3B1vH)RhR?o+m(ZyUI!`}h(QIcRlgCR4Py)GVw$qcz<0h0u0YX^7;hKIZWDH(i zfMs{GQ59AN-_HI>5<-0XT_tl1p|cYQ za}$%2zA|RDLW1RgCHi=>!wuAnn$+svg+h#Ded{t&`8;mv+GPkDw<64aR2l-y7qJ(3 zui5C5y~Fo7XOBhcXdk4_G{Vt~`>Xadknc2QD5}(y9-WMr9*>Q0%e9O6Htv?288qdX z)%q@%idcPAWVPr>Ok`Ef&UpiR!zIjTK=mJ!O|bw^X7F_S5!L^a7oDsz9zf6hU-C+_udV4P9DMyRy6Av}k{Cb; zGuTeEotR7>KcOTZAgBU5WC8R3UowO7$@&Nrwju$Ssvu$(utxe(R)Drx>82l^W;U<( zUrzQ%Y_fm&38~7UtZXWNBlGrDtk<%9Yf2B`9a9=_&??xdomr-UO3m8M-H)&FQ)*2P z7`I(!ZR>(%V!FooyS&jXPmdxk2-`^a?`!R3MwPpxommfz+e87-(8_@ZwQ5b9yOSTT znMPW?KDpaRKWeRRZJPp)T}9efdSo3|c#XNL4fth?cy9iiIjQ8jKG&l{{v_Cgw4$#!zye|zcIJPzeY(^+$8&m zNz?BIS#bmak+I2YRKStk%7^uzK_?|#^W#xkvAT7RYUA?>w~v$Q=|g`sj+Q^JQeZj_ss0p z-?b(S)el-|1L!g%x4ZkRj7tWzLlVAZ3;>pD`v9G(bPx@6e)BGY zgm_~L&9Mxyu{LS0$hd4mkL62~xcwKCow^lrQv@eI`C6)chjTbd(PLITZcWaN(_IU* zB07yco`HC>$^qzE`8fk_5A6Pg*Q_?X14cFSk<$@UHe#o5WqcA(V|$w{0%k&L)!yEw z)aKswX?ygANXvbv`}u9~z8)=YYldmVB5h)} ztGCMTUsT;U^lkZ0jaUQ0`MG+2x%+SFoL5!;@LSjYde2nsxf)kCP+HGNY*exD(1W=y z%QxK)zV5aXxupot{LLPHYSiZSI*@L~7UqfmX~Z!tD`r@m)3I zeD;+0m(z&3b*Q2;R%LCEhyC9}lS*c%b2n2%MLO0=I|mm2+eNwr(ybH>qQ#rEr8pN4 z8x3@?o|;lIqJ{5&mz5D>O#^y0R7#aS-qkN_1@h|Zfo}7zOhGt@f~GTyNu^8&AH!3B zK1{4Vc;KqLGf{00HtLx+_MLQgzUnal(MT)Tczf59yXQWAzD7oqR8&S6GVSf<-XI*N zIhH&0`D1U_*Bk4Ud=-(-PmZa#5}mz^pQYIysRv)dq+R3^zzDrDe#}M%H z*Q3t#r0&3qpAr{8BkR3{pr@>Qi0|{8^!atIxm}obJ-x!%Zq<}9+thcoUObmS3-o`A z&z|Wrj`VBn>C^Agke@N@OPgahy`(nkv#-{iYH(`nO|1{ZNjY~A>+}I1=LXKs_Q%KF zg^9H@m6eB;dhjtBNAKhCcZI6tSt(R`@|PNkb{bgqmxbjvA8|}c`mJ2^hdDi@PUQMn zcJE_Txl2!y@hi6d&b5CPw{Iaqw62xAy(%_U`pf;H(9HVTA&C#sD%-N@B>ns1EBq(p zSF(_e$rVxags}MY8FPlGk$P9oMs+P8!aP3ntOcg^a&tAF7Ip24MzC@IBI|UkRn=6B zt#?XJQ`<}JE=%t@tOnbj_4@vKi=G$}gY@aeh#&Bu2$lKwqy@S97uEZ315ZJW%;!Q6 z(tJ1B<@*nLewb?wXA+L^N_zKHANWUpFB$7pFIa&eyDBk8EK z1NkymV|`=evzND-x3_aP_!*X=8|)_5EX;f3wG_oqu`e z`cl|)`+z}*e<|`eb)6SC*Pexn1D$o9oeymtdL13p-ly!N-FfDl=QkyOiXlp;QhyhM zhnBy~5+S;LOuIh^k_@-Pd^BqrVt9|Vr2;u@E8g1jkJHR%h$j&&y+~|7Fb3WFX@5O1 zay_N>EAVIDx55U~E)9td2EQb1C8}{>VnuGO1ASb|K$Zh6r2A6gUguBH*pgbq+t_qT zUzveivWqk4$M-hK+;lrj=8wmM|)K3*u1&gi8u=}dzq@c&xWT^;8v}( ztc>CJN^ojLi&qr62KDkrsS|&IrjKQdjjr*nEsXYE@|Q!jZDkiv>D4be3!5jE1gBn; zt-q_vmw0$uN;E3I+?clGWTu%=aqT7n60xnrkyDoWyVn86d|0E#hJ5Iw?+tBG5-H2N zaVV&xcgYNGs6I!*3|?fN*3b&f_h(A1P{!8WOwUK}vrK5wAB#P+(02X6SZ4CVZuEFK zP1NDoAW)1rwCEIIkxvO+`eHFW+Q2m&OgL)QtXj0GB>zRym?>0Yq=)LNL;q>3HZ%%E zb9zl|uRX!|*7ulfx~g0t4=boAdq04C^cH(=k>8G`Z}NP_x>3Jwp!7{2xxROVNg-sx zMXH0cXA?bM0!(s>Zbx(rArijB3CZ426l8B8;_m(8w3K{EBRu zkhcQ`|M&?vCju~U57rEOKhkdX68R7f6-q*;3l(}lZj?$Iv~2D@M^ct_WuABt(;A1$~&lE<_&1-^T__M75yL{#~y za`nTp?4P3qfg^dqohf0as=YwzE5=UAT1m+`2;qfl91R1vu!B>Iuwe~N1+mZF!;Oog zEXhKlczF;xst+G@4A1Ayj$RS5Ps!EgbX$Ss)Yr5?+#Z*1;GWh8Y)N?G+Vk%$(y{Z< zlL(mxYlE~ir{rS*scTT#+_;k+x5D zVb}vj^YcY2p}bci#Do}@ja%Bv^|G4UKjCh47PawZNeWKvVjt)yGca$L8j*jn>=fl)l4)bXCn(nCz zZ?!O2H7-}RF~vN9V!l#hwDQJ6x4CsW%KVEp^3XN9%6v@s-?3u*>D9v;qrsb{Qt?*( zrn}pP>nc|+0=;!{k~ceg{JnKIJ1N^O(!aK#+oavLM>s$DDqB9QIi*^%t^~F1KXJ;O zKXDeMWV`gJinXGt3&adihtPgZ>O0@gxCNz{wfJJbxOybyxg!dZtZfgBV?Fmz4fz%Gc=f;H3`4&W_j|<) z5)bFa?@X~NWJ~YP6sD~kVM@g9PU{D?(QnD&`jo^;hN#q`m9`i}2e)xk_>@FS&WsdN zL#B102hL1ep$FTAGwZ(FeX{LO7c62WKIK=T^!J;AzT06lKf~_ZQ0_McSMroO)?Oq6 zG?>Az=|>+l|8lTDPR0Z5AF__{@BC%i*T@P0+p3^aX7Eh4!#ET&e$cPZe|t*ZM2}Gz9bvPMa+lJK^SAQaV_9CrGc@TA`e9K^Vy; zkxB5?-1v>-I2}DUD2NH5_`vq~jbUqpI#E&!S}oeE6)Wiut@h;Fg3qOvYv90AVLs*XX-Uf7z{AbK{hc3}38(Ioy3k;3 zg*EY$eA1gYNp(7BwReGFpeqoA(lvx@H#t_Sill~MS2s#3E9}!vjiT@K8zA=W!H{8Z zK9SGwSV^KF6I36bu%MeXMW1KqpHaa#hFn{wLxm5}YOJk=p+ZcBUg?XOLh`eLvMsq6 ziIVs`)5bw<1Y3OZlGHHhK_!z9d*&-cA4c5KLLJETKGcP>_Z!*Pm$#=Wd(DYDt(7<1 zMT$HUhszbx1E|vvbb|B_nF?HB$8wTJbT9+66*1_$Qu`2g#t>7+R|eZbhVq~`%&iS< zpU$B|Y{>K-Nl%1vw-erp-UqHNIXs_$;X+&J0d7#+dc1@SaEr?rVCWNoB*ZT0hM@N& z)s`H#Ps#m`UZtWBsPd?6>kP@81!S5f=mX7GFRstl^-juYsiZmg7*H?B<_j)U*~`#R z1@C@Lsehq3+#Vwbr3k+Mqq72An^N!1hHQ_$1&^h*_)mi(o2qi&G0oFngpoV%P&&~+sxSj zr~b!iCW}BuwiLbPpUheln^s~o<9~H?YT7pj?H26X=tdSK{`ak5vlFUpH+wDsE%ON` zXp8v-9c04<*!)LY{PGs(Wct~#R~mhbAWAZNXWB4G^jEy(@pJDnw=>4=ffCnNa)cz? zj-GI@H2qdK4El2ZQk9*Xw^ni{W_LO$NR)I-H%jtwu#j7!cjE3+PjI?$-Qm}#bD{g- z34tBYx15EZA3xt(_LI#xHZ~r3JC~ttS_1jY(mv zjhPu5+i>_Nd@%0n{LwV2ffkzHV#=EaYnf=xn9X4qdL~#C=SUa> zHeM#Ctn0e_TAQYwm3-hgP8~Q7k`gPWsD=-2mk>PL^2{5;tOuwNvDIkc#*T-*o!cj9i-I%w1-NtEeG!N$-xGyZQlV}!_iJk`@2Z;z~9z??m@pzQ1@%s5n_yHqaC9Y(49?TydI>E ze5yv0Nj`-ff~!rwzGpFH#5kePRQk7WcDs$s zpNutJRsPPM#)gh4?^?C)@r-ohpKMdV-8QGdSfXO#-zyHT4B@S$ua%Lg$u?|s`50_j z4o-=)J1-~($2&lz*vZ)=npO96obD}(Y@y&Rw@NzogAvWf`vMMkO%%4}Bz3Bx@i#P< zJbV&(f9-zI1K6lX#yN!E=g-Ezpc@=d0cA8e?9tJD`yC>jBE}byAr8vu5Nah-e@mWR zR7X28q+r)oVS7oo==|e&VN?oKtXJC`XkrSdx>OUJdpE7`Gp%phz|fC;J+_U(g|TuR z7T-rbp!x9p8P-Y-9{=+?7){pzufeVnbH_ONxea*`KBj!&5<06$+jItE6qoVCB)h^`3XU*9v+#o zjlrgdI*i5w z{Ov`0{wqeb4U#gUD)PtX31ajr1>IJWzGVVp+xrd^# z-6yJ>501wQ?e?`FA4aHOkf+$-vLPemaaq%gTDa~F$|!uj=R#x2OOsDBnDwN_7C1DH zMYFp1Pg8vS-yc*k!PqkHy@}Isz>uyxihXC2dcn?=KJ2>t9^I@C8C7gGwx`!lipg?+ z{=G0Qpcx!j1!d$p>`~HuoPN5h6621@h(~HaIR0Jex*xjW`yPcY?UTAfbjFOsp3aWL zjx=iWCj)%)@R*DWq1}I8thxncgX4~%i~)x|CK~CNa(nm-x)&tL?30xS3mKVQ3WbGq zgPLt_>}2Yo*FRY0j0>p-$MwOV2-VMoGWq0i3mFH;1;Cn;G{;12@-f)2MA2wSOJ8%` z#bvypnV>9rJx%Z$5E_#sMWT*1G)}TZy7UD_{fFzTgjgYC3^uk{*H?#FLf4gUPA`&^ z<1>tRz*%e&q*tpZyJ9r?L~Nq5t_G3GpNLDzTt~)V(A1GJD&!zzs3F#hqJH8~X%ysQ zN{S4?EZ0>ijU^GA-KAq*k9H1f@)=TcBDRLtd)hmeX`&Gs|3De^ulLkxzG(#kL}eo~ z&_Nlpubt$RH#i9R4>5$Ulil_hX}(dbcjBsV4EXQ=2#Y7)YFkslxe6+d3%0n)3Pj((^5ch+Li|49VNQ;4s*^Vj&j_djyC5pgNKfq-C)62T@Raj(&{aHSE==a8; zVRK>t#Y#d1!=>x;N7QmV@)Y*;tz6B-X#pBswA&sxPQu@Qv7(!pvdU#d2?4DRHPmN& zIP*o3!v`&Hm5OCpC?4srD`kWh=t0G3Qle|8gtR*Y?YWX{;*tz9{ z!kG>83a%LMO^F-EJtO^vyu@XQL5eB8($2ja+w#abq0nxJTM9$&#=u2R1Gm?$p;YXE z<_S7@j^VYH0af8Lp{5n{Hz3oAu}JM@=kaj?OuStm-ecD`ugkPXuvQpF(CCAwU2a;G zt-ZO}`15b`xq`^rMGek6x>J|D`f(?N$4%jI4ba4Ti;^5Nt!NzmRD*G(L9=IU%M*UN zb;(;xW@V@BtO+g-8F(bBZ{FM<4iAp*c{E4(t!&hAB@ZAp1YM_2N^JicsY@U-UWSf; zj)I%`A6_u4=04W5->SWC9C(pF18kb_#O}F>ZhGS03P1_li_Z24DG~7!G%h*kI7u6b zU$d(+>RfgQos*cY5t-zi^ILg@#G9{dEtZ7Db9h`9BtGR0_a2&FSE}dXFg)tn{ELzF zT~&zYu{TaW=jFN2P7v3ndhOiIvQ8;!PgXH7R?l835*14xjbkSQFTrPDV?gUKT z3@TRd7~2O+^pnoyS&XRIPcRdLRY4obS>*HVbhm6Suu{bTyMASgl90#@*3>k`NcbHG zs9*upXqw_BOfrK3ntnv=1$YV7%Aox7EKQHhje+NXtc%YY`B7tCT z5?1+95=(T;x5}Ts#Im1~um&;%E>u2w0X}WSlB_0^tR|9t!)CcgQE`%0*;9@gXT!<( zNx~{i!uoxUmNlu0gMk~6`iZ5L7z3Mxb%q&G63aNl2C!54)SFE55tHRT4$FHQmTMxF zJ=>V^5S$ERQdSKTRwg!p0zMh?>Z%&0PcKMS_hiSf*;Mwp*dK6NuIW|w3}VK&aWWK1 zS&?_*Bw&)D;+*pJZQHihv5k&x=Z$UK zM#pByw$1Kn@|*k3+_|%6%{Q}F{ZZ?js^_3qt=hHEKF>z4kz-jrFCKFb8)G?pkHa7( zh9?1HD25e_H3HVC1jZF2rK#H$Xv`?w3bKpYCggcy?}1)Q+A3JnQWK^3#Rh5_f5Iz) z3T2(eeAY7O*Z{Fq=}E;vl)qXqiNys8W?aL7BT*n&BV`U`jij=M3haNDBo?$L6!8>8 zrO{DHlTb-deu$NRA7o4rDB4jd+F>XiC?w9PB8SEyV`eaklc=OsD5O=vA!CqbLv@&bq+w&R2}kB3WAq88 z^dg7umcEoCrr;un3L#@#Fp2aqi8U~ZZ>XfmKg3$e#E2v!_@Yoe5l9-Fa!4A3p01=w z?kjLey$go@LdHNt##rYLxb;rNL&jub64Ovg>&V2ANW``!BD#Z7Jh4gcK}8P9LdH-- z#>#|6OoyqNPyebRBs!2xBEuvSlZ-2ejMdHkLk<};{C*JMkAPGxj!aBp?$R_83ozMC zr7bC&gxE~VovlHUW$ETD)+I7TrN4TAU5&9X$SQ|1LR2!VBl&Tj<(Onra4fzlf42Vx z{Xdh<)P85Bi=Zn|WW)jiAyfka;r#!VY(~@B$kEZv`G4e`$;pKFP*cYmy}@OH1*G96 z)czmz$w}VSNK~6dOQjpY%)!D7;TG4j3mrlUj%b zWC6m(fUXp0A`2*LJT>sBunn0B@h-cnji0!skGKr;Xd@CZesmo)mg3{V|VC7mg)K+YX|=n7<&ngMV}AKC(4q-Myu;}3m+>;UWpJ*mdj zLsDS0^m3w}h%@!L86Yi5Pq;DnPzHzy&`i{mcSam<0jwnIDLR7-DAwYim1W%)INJd_ zG7hmi-D$@ufE!ZwlpVo`3czW=uf$DxXXNo7z)Rw$Vq@qbD6j^wA=R41mwvRKNdMeP zREW%5F&N&Y*VU*OA8=}LfgJuJI}kY0E=W|4EVlncB2CQXbKUWWzvmWk{apz_6e0e; z_wIa9xI!d|ITV5C&|JWc1;-G*5`)ibZXAoNa{wD|Lvw0vA}^lLjG~KMUIjW|WZL0h zA}Dwn5Ai^I(4Yi}kT=Cvdy|2)f#X*f|H0#3lsM8Zh?aMP%n8ZUsUy^0MZ;(Cj!AbO zpqm7e$W4y{I~)(0m{wL?HR-&{hl0CpsShHy0#pJhEvxkbP^t=lT=rPH+2xZE4cIs7 z#Rr|P;zW2GGyAhfkllN99;b|8?)i|7S$46KLKgfq%I8qKK|V;g?C|pU(e|?`7q&np zjAH<0Zl3<68Ubm9jgS}w^@kWDL7FNwZJNFdaFGHHb!`^G6Ml4$(AG<^9Nma}?2ded zp?XvuwFAd60ZCd2&mhj)C%GIYMiM)JX9m9#^A*pEiFECp9vHI23NQL>cadWrHZ_i6 zER4J*x32==!SaMp$+)VS$Ek0~mQ7{xq?sMx2oscqs?-6lyL`s)h3xp~&BAci47x~t zBk#&#=pdPkr}2L$R7CRDMbzFem2|m~QAMgTM31nU7-Y0hPjryO%g725teJP2t2x`E zk;x=!U{)%2VNsV7+RVc&)`(j@g?4HBf=3ux>9T+!x_a@Nxalw2s%s`Uv+E`b@ezvx zMQTY|HFxBKwK64uf)FWeB_}iKO{=6%Gf!y`O(v`Qd@})wK56X8_ySl3gM=q(tpAmP`ILyKsOK(lldDHBIKWrTk5m5e zOw^HjfhdM(v)_!g!FxFl!M}C9YQl>;ej`PcSBnPobAddKEudemNB<`iHIE7EuiwA< z@s!fQZm(fn%op2IkgzuSl@PDE<&W-zyzZ0w*U9!aJE46w*EQzZ8L`WBv`d*jI>dUu zmXcu}OMMvwiMNg}uSxtINABP2Cf^QIm&2$pWqIdw?>JSLEc86%Y}uEY29wdQHx(gn z7-3$`&nW%b{s?g_<8+r!rJv?D+D@DX+Il}nJP0$NGN%{n=gbVy(i zaOH3m-P{qN*K*eyz|54GQ+l*bN|}o#JNW4-3awlb23L7_V1q6Bxl8%kC<51nZ8|c| z=ZK6m1!;$x{YI=gFO?L%nbwGHD)0>kh<<9((DpY#)~$iX`VI&@wN85sFzi9$G-s3) zIsM7*QD(N6nb&H1*k{S*A7ouyWaa~Qv=!?V`nA?$z!yU$fi6H6?J+yB8T~?PfYf;& z@rt8!F+pyeLa;v(?n-G;EV0s`vf#AR8z~nx*LQGfkFiL6m#wV&7Y9`x%=U1Pe@Y{3J!Er@Di(u_8y`**P)>xipnD`u!)ztpG_@dik% zuDQ*$+NiXjD>y$cZT+dP-Hqo;*C4E6oD(;S#J)IwWqDDU)HSE6TvkNOSlW|ah-Foa z&DE#FRB4lWU0s<%F+o#+-V#Ttf9EFGrR371<+4@QAwYZ8OcB+TWadIQcLtUe{~ppB zE~eXx?7(Z(HloGD+yf}CoZ#FzC=epO6&yl?{?2{ z;uLs5&}`;W+Q2~8S{dJ&VU3>1W{Q)x;iTqRvfRLb=H%cJZ1n{i1hoi1c{C(dou>LI z>Jr3eNQT!&G6HU+JPRjujvUzH{nEck4;)Q<^JbdtQKxf{K~5i2!p2?gB0@Fxp?rMq zr^J!UoW(udsZ`RAyb!ut1a=?aNKv!lJKf+2lG5nT6?PKH`&{s>*@ZsMbnI6D_0n{) ztYcImV&K<$L>ymK{$=(T75%}H2~67$xNxG*#byk^`P=8iN;&Mk?@KL!LM(Ha_^K79 zI8>(MLm`m14}V8V-HTx;eb@3Dc9@UhkF_InhkciW;g9K`wC{Zvj3F46SNz)bsvYGY z;SYQ#9j@CqRC%ZPq#wT7N2dM^J^&9O*$qMh;G%6NNCU|W$XtO5h}>uZ*VMVtV%ld= z{erBJ>s4~sa3VD4g0c_;$B2;aIY|-2Q_2ECgajrOq!dRSc0m{@SuTPwDI7RSDK4}) zU;^|Y03jR|O=5rwwur=V00-E>q%h#Yr85A*B{3kD4lrVo`yCii0a(0!HsTp?@JM@H zjDJNZ2=5cm5N44N3K#G?EeaRF`biL#1`!N@W8jdm;&8X{8;R6=|JOoc-N;K}KNhS3xP(8;qQ*wGZA`a;N+XbX_Q&{9PbOfy1I z=+YeFLdgG!iiu$00jl#8aM*xDGrVN)dwirwJD>o9M?rmQouZ#L}9qNOc~XF!-KE#f!_9`K3{fV_}! znLqClVM>WOKF9{>vXmk!Ah9YS@k|ag<%}IM0mLsR@Cl3F0}#iF@PK8OQtpeEeDaNH z5(l_I3oEJIBEX9>@QrHxBl*xz#+jJG!NXtxo^6$JKo-C#>j7zya*Nl^psyH#U3?+E zLUiUe5lY_&3JvI%zQ-Eh066sX0@{(bLtg;h$iz~w3F~ht0>E2lAJRQlor%1?1L(X# zY>anGAft4zNWswqlus-J?~`=hU=Iz-qQJ>5B7H@0K>T&|J~@iX#;gv$yzW%CR{n2d z_&-kOLQZsQ2Uc*)F}$VbQ^nLKl!~~#1?CDy>eKDaCZom~axJRk4y#Ri-W%JatDhBr zM?Rxx}jWD6qxWyK(>YK)sbe)k-!Q}&=cm-DB01NV8qmXUb2M#FeiONpR%En zx|O;hJ=|aP_dC>lJUaSczFc4E_kv~jreSVAhBIGb?>BJq0y?8FCVV5u0UIM0mU+9M zwqPXCAKn%vpv^a(5Ky-e&dh-Z90Iag{X)4y{&GL_7eI3HTww_&&~bub2?}mKcIWQG zo%|r~i!gGb#0HV~-#rc~seG{c1=Al?6Z2|s^`CTi_p)C|4U6yRW@aUN)%LnB z+HMPcKIg!NS|&u1^}i%Zr%2`bb8;yST% zSHvBU1%d%D#0cZ+BXBYg7GMl|x)l^hJm}dBlCK5gMPG0*>P$orLWLEuZF&0Ylr0Gl z5(Sx`M#AIA_g|OuN5u(dK0qgE5`gps&EKJO#Up`WKnpoIxV|%IOG1N0f#+ij^7xUS z%!3B(gPi6h#^nupx`O2M1Vl1Pk18JX@qj21_M4^`9+WX{ha&ZtaDjM@mmHKi3qb#! z;qcRG4CuP+GX*8yBrWaG2JaB*{0@Gz>juyzD2!9=-*@jwb5QN)cHNrZ z(5!z6*^I&DTcIAS#zt>;*=&W_!9xG>rVrnMeA^zx#;#B@Wl`26p)2JGDdQ(;4TS#$ z=g8LyH0IiF2n6-OqB=sf9fGn~#-AfTnS4dD9U*Dg-LnXq-5*z-i=+*I{iHA4ByT0Z zlM^oMwS(hu!XPtXn2B(Agz;?x z!yPqOGrLRw6irthLsvmuvEL+)wR4P|sJ?&@^AS)!pC7$;>3Uk4PZ?|&oV$yrYimgi zsUKuPYw;+?@x2$F+LDlHJbONgE3+(LmZV(RhKpw;jA2p!a@^LKS59RWg>J?5;$&+^ zX-@S=wQ!oFYiZE3s95mwePm8izOv<9zFYSSBwVKmFE40ZZgoC0-wn^V5lZJ&*oa#b z`eD;ze!YCX%HkEv_V*%Ur_737#4qpGf!Z*0`L;>VHXF=GHNI8eqB6%vI7oiNnYnzU zID@i$3+s8Wxb4b(i{EQ_Yy-+IW4Yib)^k*nOQhaJ*>%GBT$NaB?2ds@`oEQ1MhswV z+-yikRzh@48H1wPw>a+Ymq@#i80Pbx;wr_TRodl(Ih@q!8^1rFc&_B%F}jFq|KwNw zCkCQp3Y7lze_|l6oSK(qOe=)xnAU|}ux;f|bWSTpUp_eoL-EHJSts_O+ArjnxqOGg z-!n(_g8ENa;5RFUXAjGDOgVqs;XTs*r!n_-(cs+w1l)$rVn5|3P`A0%*Ll>7t7Lz+ zZi(i{cJ;ycB|D~bO!iD`&Uc+wKaR*Ccf&kXE=BBam(*O?pAY8ms7yIGM{J zZ7otM*|rQuzw?T_n|rDR8_X(kuFlYTvz;Q^8gJ!%SC_G!#&)k)YflnySJzOZhzLQb8D#UY4!X;0MQFy z(zo?rwW!0%sh+OycAfCe?x~2b?{dK}=RXcrvz;NFE^5?`kKu(_JOf@e>q}m=>+o%} zU8~XRFEsPRHCR*F&5YdF$31x^`QPwlU@w-cyW%;I%yIhHuvC&31M3Unl~{%&1TBn2ObrGGkhWP#wY@+os5??nwRB5FPRz z>!wI(Pjp3Nbn6zMu4xMQTZ(5R^x2J(eZo;QD~>x9hkbS1eK%e7e=ASCYZqQG-XfiX zN_ZaF+f8^}n>qw*e}tkvaI~zHWKZ921I3BVyh+_Vv__$wn0=~tiLHstC11gxf)PK) zteQ%oD?=Sxt#Lna1m<1es4h5E>5KBtzb1@1y^&aXBeSOnLcip`(n{loE)O=d-H-_sPT5LUdRJ%BZhQ$`}@arNxCDK6mcaxb?~ zBgWtdOHhwHH2lLiKjF52v+05v@(NOVKr22#z%d1ilmt2ecQO!KmSYq9i5l9z2KRB_ z1~N+Oq4#)CBE7LzfwKHF?je2q%ZO0ibGu{fS17Y~ZNf_fkp6>;46j6=#+wlRdHP*@ z8@Rq-@c)y8uK4DlA>^XlGrz5Aga12gTG9U}YuZ@Nw_j>Yn4bzPtem*^QeXhn9|6LN z;{XyNPbrTKxk9;Y6aWcZejFz&=Xk#(<#xti$qy=l%B6q(I-xpZ^mfC`80cE-92zOx@Ms;j zlQFf@HZyfoG9XxRT#Y8exztfhPXn8!i*)oQDDOT={f zVP1VCwXT+KrqeL^y~bMUsaw zJn>kJv{ALVVoZV6Y#n-9OUy{YBhP8hQVwTXh%9HM26V07Op|I8&&uxFUX==#qDF1K zet}aXS;JC@sW`XpW;odf% zmOr%N&Si~Ma^PC07Xqo_>HfQ(|$|5UmnLX#L= zVdooUbCz9{F|%!Q8EeLX`-me3ZKGvnOKx5?pGrhiO_OS3C@-2+9h1pwH3N9~Y`88Q z%Us1HN2++!qo10CsUjTWhU!91u_-rAm1ozolhrE_xn~&-qhV0}`Da6k)W*1sZ5MOm zZaHOcJ25B$l>FYJ$(9(rzL7Gus{9bwzT5tzOyM)6xo?bo{|kXgdbmi!*qV%RcF&VA3pLrOY+!-fJp>KbrC*9|13Uw~G$ofW-qL<$J^+&k zuR&#$M!RN2)75n>8vC{|Zjq%MFvxjV7?$Sd17COQf$8m<{ac%GXT*l5H`s+|`Dabs zic@a3BS%{IuPwsdO~pZcp6wxBp5AD9o?c4)r>MM}18AP@5pmd4!qAR5H@-ET^Qq{k z@Ylq+Ewq&`oYcKh^voHO2euWXp6{G2tL7oPMt{>P8#&(OH)7;1HFk_f$)+;`$Ijgn zQ`*>T*5{h7?Mx+YI49kfXf!6=LNuwe;Od(kh*jC?kFSM!J*jk69;CY6dr!T7Fjl}l zNHdxM<>ox z;h7I4NDVo>X@Qd9{aJ&Gc6NrU`@13P9o%>#&w5zCB!%xQF=5+uRZL$-hG4}S&jv^PzK2`U z&J2Cw3PfFQ{PZA2ZOq16nx>!bCXk!OP2pEK_<50$w3RtNxzRQG<^LR^^y-yrTm1p7 z_l$lVtwuUBq*AzDzUVqO}%-eqfP$^v>=mX@%yz z!>c}7Qie!#MXc3Z;L7$?zs|TC%veL3hNxs5)PG@?sWcRIihX(1p85xpyFEEK0>)0Z?+q~==y@9_ zgp3iFZ@S8zaM_s56gb~LAJ);14nMB|a$`JY6tpVb&oeI*%T0w-79=a06~>zkA44lx z$=g7WpW>BaNQ1U?174I)=z(1Fp3)Onl`Ug1{07gR))$!?KzFS7dlMDxl_*M*IUdIS z&x`#Rl@cRQQ8|wA(U8|COeJ2eK|tI1lH<||9()9%zxaJ-U#0S^gpx*khfXW6;^2!C z^+n}5`|Phg8YS$JF9rv(555{bG2vW8(Uc!5c&F3{H%?}R$5l}hlFqAj4AZ` zHK?^Gz9LRx4c<97IQaB4o>g<7@-+d(^mj81@#{#aw^G#GYb$azs>!|ly=}m9a0qu? zR|E13X&@U=ZXYH0_?^!-TRe(WHSE_6Nq6wzD~RNsYW6|5}17zhNcDnDC)VDedAzZX0y5on=r#&$C z86(u~ALH9Y&fTFp+XXcWW?28S^Y4vS0P9F`x;b8IGenR>K7|B)ai$>$TdNt18!1&n zUjt3)WHF4RjNhs#GdedIpnN$sAi4QmwK;E4KhV(Won89_w&-mtvKqyjA?KI8{ho^) z&d{w};(MIQ3n1z(M^%d2T)GZB&t0T5gG7Hi%rzPv$Z$ku1bb4Nwr{)-{T`V6Ii~PH zS@>en8s1lr@HN5mz9Htbv?#POylHVUBkAIF3k*@(1d@4MT{e)H&DIlmL57fzByF~t zN6tHgYD_0b&9k7Y-g*6M#Y=HOu?_U76q7*zke&SS3o}9I2Vy{Vb zsU&`?Zjf$`MW-G`R*5jW1eR@DNTiw-pS5@6ZnSO$u<^}t}U~W zgFlh=iQB@;FV8IF1`kPZq(-%dN^fQ3E|D!EURfjUifIx&%1(+$RzZUsu5XNnJmu)= zQc-;4qK>29G)|5-gJLDwP`IpZJjq4>+GXdImp1!)^Q7QKTOQ9MkAs73!Zv!4FR}R+ zDYq*43DBfa{R{PlwD#YtPr}EM-HgM-h1xL=gHiI$Tl;yI=|PhiyfrSH8*P*ty=x2D z!;%c0T2+Hujj&LSc#%%Ln>BcAIR(TLg{|tn@=ln(HN2M^>vJX6W?j&!>bqp-vuLxR z)SF4OfA+KD;wR*KUcm?VdY|~4Y%_7m2j+VG{AXJ8ms)7{W*Ae~sbD+%#_@4jHpdAN zBfNuv(v8hscx>r$Nso4@+g(!DC4y)=WJvQzfo3L&!5il_X!@|LoG0SH`u_7^>7yM?TY~4oiC9873KYS z`isvE0|GMs-+AT!2j%@gdF9&KetYHmDHy-;aB|uSoVVKRTXwa$T~jL9zUmrBKCRDX`WUh8a^5RnzFFR%X0Z zjq+d8fvC@oE;~~QvG4#gi9jK7fY}-IV!3=Cr;TXh^|E>3 ze!*qE(7aGp0Bh<5MTxkUP(eHAT{Fq9Lb0ehjor}S{cIs7JQ;a8?a0J=xkn-Wtv$=O zE0%TR%z0In%(z^Zg)nxjp(3!9L}p)=I`*eSDLaP|8Gs~?iXA^;T(kIw&cAiY36Tm@ zo+3(C3s+W~_C!EjuPS}PvoQ-C=t`m(OCmST?%fymKgTEBV=S3rSQisOB3ozUfoRxL z8FEH)`IX{uOr%`UCnQIm$rj1Fm?S{ zjDJ46tza=GU;jTPtJSGe$?+0HFV_)(eydx>M@^hQQ{rOs-gm<@WTa)`Yxr~dMiA#&Nbs$)6rN{bI7c)oYj&& zmsh@wg#^$yn_24!Ct7AJtrq?w)iW_UPIwe{Q|1aIPNKQnAJ3Mnv}wM#He7)mi17vT zzabG7jbsKFJ;K=A_Qs-~a$~B0DBV_vMSCa=KC~C_LLwUej>a<>XbxlIVe`Q>L@%c) zZiMq@2LrefwqKwF>c`!aq?T$i-{N#5EoI#SUil7KOdJTONi@ zu*ulFuE?>83G6U$5;cE9^)@u zE5XcFSeORKQ39VY9N8^4r+q|!KIZiSYG@{|HqjYaBbD^E=eaRIYsa$8GccuKa=~CLkgfL>7Ym;ugIJ zCV`vXWFvT=IIg~Jzt5oVb;@%v{$dQ;gtYcx7!dW@o_(2|ZBg>973H6Wwl!23tNKF- z^Y4!hO4DOp zBmRL~-iVOk;(Mxre??j6J70BQTTzRxH{Hx_yHD&-LACL9swOTAkpc#=&B)^EWz zh#JgSY`uL}SBx5Jg@|vH%TQ|pSnd{gMy8Gd9J~6_i!L^=_@^xWgM8n$K#%yY>T66i zwP!4XCQ#@u!5x{I%~P?Uj~q_&(KcnG`cCoJiWyg68xP`m7WXa zXC$+rd6sWb%`1E#Y93Q;AKJ=J`5SJ_mx9mN538>sX`d(qx^*$zAQ#l5j@%t*8eqFZ!(G~OmyEMwXJd_TKGF&9Pw*Ad7MZW_pXsMLU*AygdI{CGfgAV2 zS8M2??c#_sLw*|#@cSVH4uM(8%||&`_4J@+uL7;u5-a4x`zR|4T~1w};QuQMQG?pD zREGlrIY9*hq5gl>JAR`O6*D8#|3l&UO*3igebY=xn?~v55HL(A`#(j{run2`<`W=9 zh=gqWNdTZp6w2df?foG}P$#JJK4LbiEjlfD^5}NecY!UINfRK}_>~Q zR}NR?&G@2;2vJ%nrP#CY-GQ{zIW@1}?$DygNF+$E+kUu*!g4P5hic<(5W0HfEt>&G zpTfo+nKD0p*6ga2hHbCu=%o9*mN2}yF+W^%P(wRW6b^f&H!1t{@3>MZNKFSt7do#$ z5tIWBatD5LSzpQ^KH=OkNFyk& zIT?=Oq( z7AiZ-(f(Ox+tRND!k?pxmmVqQMZaD~2Bime+QyGf=%QABDMgWvbM9EKT8W`ow9hl! z*0aDvLgrNL?P>8*AI%@~oA~EhjSNMn;vgVLH&06*R$p=gr=0%4NHgfDsDxzvx%^Yq zg9?Y?W3WS@6;>ooMzlo6p7GC|o(<)7XzW;Nh$g0qH8mfkMdTpj8;S&oI zFz&L)cX}@WAmsnj-yp_SEZJz$ev4=DYtQ`>t5H%a9)6=<*vJ!0sU|UEzD}}r^i5SX zXnzSRZFJ1YVNq zbO5mZYY*Iq3iU&!V5k`_ZmHRQ>i$!+ovp`ogxjV9(l!J0;qZ37nHEECBNxlVK03Us zt?Xad%92~%mX={xMX$T>%XKP4tCJl)?cbO`LG!TU9`{COn0g^xlXS6S=XNtLonA_Pi$C zeKugkTzMdsXx^#rSy>4)>;7ruiHMQ81F%oT7hYdKw6#uhXy(%0IJ~q^;?(hp9&Xd| z$tszRTrouR$r4LxtM_@nKpSncW zxXtb{i00_yqn7ADR@R$A;*ZV2ig-urr72sfDJk{B_FX>y{Ri0rSL;3U^^0X4-Y;6- zbxP)BHxG(GW)0!I@#6Z+sGhP#6WbrD3Djp)8BKnNI})Y$2T}JOo#Nl zD3A4sTR{~rP~CYiP(7WL?mfS`AeSnqN_2EH^jew=f4d=po)P8t!okmt%UlIxLu;k* zY6o_uA9ZCk4NfI1)DYE%y_(-H#`gf35A}{HrsEWNJCmVCxHt!Rt6^4H1b97Bn^cD{ zU#li;d5WgYEBdDlf^?)w$=OF|1TNbyyCeDh0_?xIX!zVRb*m8c?jIG5$M<-$cI;ei zdJfw6=xn)*?5BwxZBoZvv|P7ZAGDZ@+@OwD&SLaFx^y2N<7SFa&AFuV@@W+pTFR6r zZW1SN5mFDh2lg-mpGlGSV=|DSo%=?dOQP&^?*xPPn^`?c$8di4tABbyV4 zet(IGZY!WMLb3u!@jr~EbNK<}2U-$hV|Rt#x#dd><;gEDx3Dr3AJFBrK}lZgJ_-J# z6=`(pcCHZOS4&A+y*5u=8kdIrDZG`jjbT|4=^P`gBag6*gJ$ok>QluJFy3mF<$LrR zf9+~}qw$?U{kB^!?udTHH^?rCZ2+o11@3N1hz7|iyy433P-o`XZC*px`+ko$zrhMn z_5|(hA;0^C2_D41!VCHjW1CBNJL;9-2Pv6B_w^Ej{muCj-qtKvp?x z>0`Q;zHQBV0!FE8>U7XxS1(xsMLpp?HrD|fGL0~$gH{DatmzD;^t;3{k9jfohPQh= zdS~XyW^>&cdWl^Y2YY;%>oCombWp6|hcpDJR zta1}AT<}FdcZJ?Y_dm2awxO=qI52dMoupN^JPt8JP3Ct5XS&8o^68mo!o>~YsF zxIscsTs+ujlHH;aezl;us|Wa~$Ang5M5o{rsmEbff`PU`*rY%|S(D?bledSAU`KlP|AKlJP0v;Tng9q*~%OC7L7XBCce!-&`Mb6wur;cVrCwJ4V z1Qq@{H5l@V{9hT$+3@NtqZOYSVu+b6+dWtlQG{hvs^Dv?Rnw}`CG$t77p3J>MBYVm z4sO|_0{!~}V-Pw0GEYpEOJwEh@d{nL83zL(1IxR#$L_davyt#|r5Of19m(J&QhhsY-Otu@U(1aXapvUE726t$xG+D&ESq2 z3&!*vs_IdZpFA-=gCe53D=L4TT993jin6A!hN5}B^NIR`dY-dwo+C&OYkMqlS8LXx z^wkyU_XPS{L-3!|e-hyhD?cG!YodEd>Guzw^YfLCyuLBTS}Z{?i(9?H8C=n_Ss4~8 zp)_00^zY5W!3*n-L*l|$$Mv8TOIPIP?CP3ySZ=4Bzu30S?kf4S#Q&IbUq>xiMxo7P z*08!h?9Z2F$F37T#4c8D>Tmc0{a>*uL;abM8#D;W0K)$VY^v#O<@$eOQ;iRY|D79q zce={jV3R&*J=3#%4mBxrQq^juD6!cuu41J;JFnK)1GqRP?Ea=W9I!NZ6P-1OXd&v@sae02UD zhIZHjt;aT8X@IvPBut;Xql>fRsvXqz^;8&){K1xu;5O4L{PT8ZwQ_4)1cfX)3JZME|@$QQ`{Q^&N!tY-t!sY3Zm z3acfJDF>-ZU=4DGY;C(3=J)pIH@W=r79&d^8K4_81S#vz$K~p+*`Bm%sFw0M94FK5 zc32ksRx8vP77>cXJ{%c%69|ZM2=KO~RgE@STPCIY4Pfb%QISR9kw(Z(P@rF*A`QDl zDBsg4#=hnm6DXDJ9MZw9PNid#vPM0b!Bl2z{kZp_Z8KxmK4yObRVI0OCvUYfm5a-M z@`pMl!6n3ThPwT+KwNk*BRK@km)B8bgd{fJ5rw7=w-BTsAB zd(I#2muSiJ2FWIUk# z_HQ=dt$NMuPi5C}<9pse07JIxKlpTnWut};Rq+u=6*$CT0Z+-8+TNbZrTpjh{Pe_^ z%FV*|8|(DU=x$3>7i`)FWu#1jmFGf9{xD~u!#c%YyMuag~&vkah}vOor_gBNfmsG*1i#YUpAOp&(5D4FTH5#4SV6Tg~dIUP6t z8m2$k)JNx0^zX)hkcH>jl8~>7%QPk?n=(?5E2uPfQ5>+3_wIL!YVeuy3J6o*;^g7a zO}>m;8G8DI2@Bka66d`w+W4~u-qPft zd{X2?;)Rab@G^(h8*{vh#&<)qTHyb%VfhZ*O=&;SMo_Z+#nFrpLr01eOD_`dPFKi` z*L$TKf{OU|&}OxU5$mPEP-umkRkSD0CdnUd*-`6wqe<+BTO+XDnOB`_`VNH~Y;?~r zrWWpmBK;ZrV>n}{C`ZB*dP}t84h3Ei`EX5oc?V*I5 zxapTq<5}hDrpd+9MBOUGj!)a9goffKh6#=Q?LIjW2MCjk0Nj3neNuWPF|8-Qpn4SE0bftHnUuan!(^KSA!WT56U};6QZa{_5#!9z9+HYokPq!I^rN6(nl2oqvGAK z^tEb@b-I%31wtA|>J+STZi(K&`PD53pxy2nRaVyr?$q!iA+(I5_pt_}VHVZ7w1!Eo#vQ6(Va zjUP>o6vQO^oM(tMgwic{!lpQ;87a5k-a$VgP7e`O`J!C^nj!QbQFspxey$^^@juY| z2p_->DAO0N8azz-HV2S4_5!LP31ez0)Z0)y$?I3%ol07#aZsW#1a6kA$h_hHpLz0Tcv;?!V!c zT+Bp`Y;BE=Ol2*n=_PQN+aL92w|e)~18N$oen+f41z z@dbpVaRNoe%5Xj2Uo41bHwgQ&lmoN_5>PN3Su{!~^Z-WK79-BzI*SRBdY!ff>sqbP zu!?z|s8$Z1alCD((sqG{Zc75WWl51ST1o`{=vT$lpS2oezBPK5+-xs06Dc(9Tn=8b z_5a?Bo82hs-x4XN`et7t24Fs7_y%x@cAp`7$wKl^(tH1J3wwtTj||%Y5Rk@p5DBTSu%QcxWkcnmz2bs@ALuuA!M z)@bOPJnr>`KeoJYS9Q;akJS-knYH;L9V z^RKKjucVWRU;j%eYg)ty8oTN<9a=qkPrlgcF6nGz-Pb&XO<-qcWs>Gbv<>1%OaYCJ zWzFiFcn@t1(XBE#%qC*6Xr*OCcXk%aTf=nmdW;+_bJ}Xeqkx^h{1<#jev0`$-PCCJ zkn6%+$Mh97Rn`@imbIycaq?{-ZKIM5iFn^yZvZ2U zWK^}&L7GgWKCbP9%wF{aWH+KdVO4j5`7DiK>tSe5VwBR@BE9%oyN=DuUdyMm%LZM_ zl5$VM(gyCGQC`Q$j0(mEHw`IbE)vQ{oNNpiu3AXUgU^-vwuWK&DC01Sw?AR-Smu51 zuc@IAX=86qbk%E`jKnGge@D#b*TM>Ue$c(pn)vIM9}TuhDfBpx-u$3y@9pcD)bDopq&`a%s_RidlLk zXclV|wK#?~Jkrk7MjEt^(B7po>R{AH}9N*`M#2IGZNN2_by^DM*5`Cbbh-vEf&$%H zPkg$fmcIKl(*|x|zYfB^hi@#|w5pJ}4ZEGBoP&e7{6-V7KBV`YfhKQu^V4>M@HAs- zUZ>sK(7{G*C%DBe)%UeJ&FcCG!%eDahMY#am@FT`S)!pBSyGqisGw9f}EbjgLld zeA_-><&Nn}8XAl{+?FLR^p77!>|$H|AJpq8eHW^a%XL(BHFNs2bWOVd(&+b6R*ly^ zSD==zelBTDA@&AP{vjk3mpOyt-EyR_T@Q;IIihEGgQv}$_O)HnWb=ZuuoZkhZ4N9A#@zlB%z8XfcnZk4Xk*otIUdqf0xr6wEq94D44etndx<{1^L1c<1 z(@F2j8utU2NnsnBXx)SI6Fuk4@R0sIfc^FGvwJMKundiiwYtY5)AQnk-l_%O0`%B; zsuh2EV#IWS%VC2s1##84Fpyx(H?x6Z#JYB#H~f|I7R$gWk&kR*znZaVVm;HiYW(a=Ht5qg2CDD%zMIKGu8jsBU>V z)=fVWv2y5ZrH4LCM3&fe{4+eXcs@(hg;998MB|`wRWXAhzj)u=>awh?Uo+;m8DYXv zfOYPJa)O79XXyS)!AAj3ncgo8YGIX{`_y}*Uq*;<#`*E}Q}gkY?2>5HKGH1E(#wp` zcZtQ@mVWS_UEpxQ!=030Uidqjy17xeReV&k*zcOSy7s?BLsHi@jtK*JbpR8QTXt`dP-9NFaH(oVVq4oGv zue~yk$7a^SHjk1_pCbsbJ7(W%#U4{&wv3`QrZ2@EO6@^XsHrpW{;`xX?bjr^_joWI z1y{<~8Bp%wr+0SJNp`aMN=3?~ek8VW3rGDDAXzrq3e?&osv+4k1 zZSPfnN{}8vN@nDx@NF+cq(G2IR>#JZqqR2ykx23I6_U)aHI~Gp{Ihz!C3y+LDw;ki zwr(WU&o4zXt7{fEoy>%qV~*QP6n1ITHqz zc$Xmiyn-@;!{6$i+XR9>%8{~DC#yFAT9vszNsTl+j3OJXl{^qUCnb zb2>6bQd*Uq{3LQ=#w{xzNqXAS6|XP~W-?*?l(ev1X;PU|&(y+pPSw=}<@Kt<>$$gl zUQIOeXlpq%LPy-KU;CJTdCtg35bWv9B)G=#iy!+32E!>g=Bvl`8R zo!aA!l0ud>Fkqolb(qZdbYWvz6zXzSe)-@Z?_5S|ajtt@R9eAy=-B6FVpXkZlzHQD z1Fzpvtc{fRnk6z7h^;2NA8D1P3MkN89IJRS6-et4BfiwPUt%LyPLw=HbaBw>C!5F= zb$zp@0g$ycZ&QnE+eMc|~4gL)!8H6nLf zcTYNY-_9XYHu;*R@8#!s#-6nJU@UHl^XC$!o52YDJE2rP_4c}6(m6L(IB#AIQlhRj zY(I-+uTMT#i0w4^6;1(7!sWCIALd!2#9!3$x2&dU7}~md)vq)06I+r-I5%dMNEcZxQBxM3qfERd7MikC1hh8mJ~cju&WeBEL8c0YtSt1)0p+j?{X!J!J6o z@n5^A4Q*1yh)0T4IFwJ(?3}087ZUTRJ*~5e>V~(t*NkqM@~$PgCPWACAJ&Z%=>^gi zPI6q^9eqw~vdjf_x(4zd`=mA0BCnf;5nh{U=qx*Oi>KON zKwN1j%WVq5RM=3wTPxAVL-%4c?4T#_@Bxn!X_KVWQtZ3&2#3=wz-+MFHN;Txiz!&h zYj*`oZg`szua@gaGK5#Um+4EsUyy_XoD`pMYrS4cksYiYz?~z?tDC-gWxVQp7)>Ex zGjY6R_&)vxepEDVT($G}$4+9?&`Ve!82re)iR@VxQGBMm=j3qJxXgX2-lk3HEwfYF zFA_KrsF}<(EP8E%>%_ocWT-U&ezCK{(ot=wP`HPSLxIT`cC)65^;)pT`cKEcNR0 zRk5kxxlI3h3NxoA-_@}=&gIuj&aKl`32NmxYI8r^Q&q}b7vXmMo6%3f!#~x_kv8uo zQRAN&+|gR}=wB;wBes8fLgU9S72RA>>Jod~V{eGD>N9L$l)U=XKC;?M#n|IyudyU# z85g$-1)Q)r~L~Jn_5zV4;qS%rA8m!e@Qj!Uky0AbZWJsNp*S~ zlHR8;JZeQMwDLG_)RO%13|WMyQ%b_H|7QK|QXuV#i;w0e z^(%RqT&V;lBixdDAh;xl;@}J@8qb+NJzA=gEWziG=e8%pxOsU%PkP>T3Ec{9r9+D( zYK6oNnrMVd`sGXOrpLU^U#>g|ZITrmq#iXNgg|;s-fUZ^KULq2_Qy$DG=HF7{AFZ& zVm{8yvrpQ#Pf8FxDDp)nNA0zU*(eB|aCFaICdV}rcYIs@n}zf$f_@hzV`YG!ury`Y zCh2#J-s-fts)F3I4y%i`@I=)!s$GD}Rb-N8iTh zpy|h+NB&dy>3T>dW9)t%8}5%Um>AzrRJSu~bGrG@xvC>ca5k>E2jd#euJzTiXy2bI zIECP1M3X@Fz5(QR?UAA#8@_L?OlutIIxm^DWoDPBw0_IGNalKx!H;RGbYYCr3v7+O zWsdFqxc_2t4Lov0VNMZjU0^W|q{?6#;Pj=yPW`qV^@OU(s=t7%5g!bp03Z^qkbGnq z1_c7t7C3}$TTVO_tc>7E3Z6ybG5)kAc>p6s1wqi4c7&n=bzoZ~fOrG+9G=`@B@iE; zZS7JF+ByQ%8F*)lQwoyeLoI;W z*tUK(a6~JxPy^s5j&18wJlZoN)Cc(87RQYy{F`C!Sdt!m8jbgkWH2ZKK!9g!^C1xp z1D*#NV#-d-$Ab%b2Q@DMoh+9 z=&Zh_(=I3;?MCg3=sud+8SNKBUg)XDq|xTJW*$d$V%8Te9ys}{&Ss1nALJ%BJwh@+ka!VY>(NHv$b1GExB{NYQ9Fi7e_Ll9U> zIke9|bkPQK(aVWUJCKhV-lo!I+JSLQVa`4%{Yy_TJGWL$%F16E%s8H(3h@DTB3%a( z;*dSUL9#(Fa$p8?W<0Li;J#rTYe|S6DT^gu`RVESn8e}t< zTUFmuYez1H8t74KF0g27vj&Km6A-On#Zjq-zK(GOTaO9xg>8u75IxW&qpEP_cq(K7!~x^U9PriLgu{~^d<-zEdR;1Kglj5b6OOI; z_JQOboG$ed(8#bLB`*Wg*}J$#e)2WKic)#$cB4_g`~V` zBoa^@_AwmjAQOi6i~w~3{=`M(TH_TPoJ<9m0<_>tr(YKj z14Ia`pD%%Asj4)lro^hM#M&@J@he~+wG1O!=T%x|aM}RvI9;Uhz?P&2n56mW(Uojq zXqZ$BWE&I%@XUXc1`b34q|690+i~Ua!~}c5IMG9JcH}ucnZaWKqsrHttwi#K1Cyb6 z{uD??uLNO-wIxroGP%l`DsaU8#kP7gq z`nJ1JpsYX>JShC_qr$=z=o`#6Yk;yPr=R6B9Moi6TAvh$Xmk=U=Hx376GJE*?FLB` z)fS{(pV$I%1=0bW-UL1f`e9&qtqyep5@J(R6 z)!u;(ZPu>|edPni<+7UEiQ3(>Es&2uKiHMGZT~+d_^0R*Aa{`-_QmZ`qd4Fs1*e= z0pi1fO1j|?wcTV=Nz7!BL(8k-Aq=J1! zh77^C8XEQlcf!;oK$_rN)eQ%NzadkP4>N&O4+8Q>Dj61|sB(iDUhmbG6X*wLPXn=bLnG3M8%DAM zWB~*s!3g~VHifUYKt6zC5Io5P&ai#lb7ldVm{9ar#PbvbqXCTM!EOEPhENuu4qR&p z@Gi`+1;PkShgr{kU9~erPb{z>if49nHkv3Z^aC&!4+?WZP2@`nK?51T$>J4%(IBhv zzVagD!D2Ai%-|{H>#%!HqDR6vU|D?a(FOMgEbzXXB7;GXRw!~^j@u_GQsAKhJi}t- zS7a%Al?Exi?Rzj6tSEEVj-&zH3L?Z7R+K$!TQU)#gjk>XCN3NZI#3t~s`qW01uy}p zsQ^B>$6*I(A{86Iii#bk9v|}hb57$e$-jV0fW8cvXh6}>)&%$$=F;KSejtN6fXB$! zwV#90C}5$gz)&2h)&(h%5at`GKwc+l19$@!cweLTo?s4G&ktZl^U2_(-!qddc zwBpAr%qYEr%ox@y%z$(wA3|M3SsdV4%F=;KPx|8MZy56?945dU#*qFT*%l_7_rxqc zG_3GU)qG&6<_PvmCDdVD@T#s1^@6MEwD!qrY09Z}ma|%y0K44#Z@_^l;jiD+-4_?4 z0m@ncv%Agz+%IBmsRE}N%kXv-CY`OKm*1IoU>(D~nJG?Ff0Sd^iBU_?J<7sV^|$HK zUkXJp{N>+GpUVc40+Lc#Q762b*f6@2((V(M_X{zZL@W=GS})W4QNQWwt`4s5%%b#m#MK@ zFizMblqXf+&b=CD`@p^6hBRIAYNVcaYEo$?(tdr|=V8jW%T}0EEGXb@>%fEQU?>VC z#H}Fs%CfwfKkS9HSl6dWbPsx0kdH;)?q$r>2=f?qV$>8o)rPa6RPDSl`m1Lv!w0Ec z*lfLEASwI?yFAoPRI=RUUg?^IC(LG=I*Sfc^^|-=3SNZic=I^K0M|6&Se|!@eRsU2 zhh&oAfuqcjZ!3X~lDf-xx5`$#lYL!<0*!KW8bNXPKZn0Lla2AeGM4 z3BiHB<^}uvAa5Ak4D}Hcvt0tF5`N5+LT{?LUf|16@GIcpU_Tr0n(Vl6ykQQAg$GK- zp^0WI21X#g=Df-uaezs`VJ@uM~j6S*TNNxmI({h1Qyw;iV>|KLq&kQw-kqQ2!>F1pbnr_ zJrK185)E>Ol}1$7qmOKXP=L{MjTc))z zU3XE6=u84bTxs~hxWH!=9!<>Ol2R}ja6E>AAs#tSFwrp5odmRU!xhb{f?#G)p*=*N zqn;a_3L4(2AZKXWmrMe^8gK^)pJ6ejDjap~XI8l}rxpko&<~(rDPhqZhXi2(?v5q8 zmy-_#-@@%8&E-h^Zc!xydw~`lu`r{H{HAd#dzfoL5lPn(4b%DV zPP#J^Jz_x4K`#)n-lt+9s$2j~27(@GzkiI9#D8oSX+0VdDZrMR+C8s4gYLjRvXKBB z50bTmR2tfffKfn<_NoX?wySU}Fc43Sw4q>c7#<{uA*|LYi}SQMT)i+@AER_%G7^Rt zmUfdqp4Xk9qaGKM1-hL9ueZbzLF|FM>GZYQlLwL#z)aABJp`6x4#W04&{9-q;et*G z77`DNnW6TUW`YqSfiT0DreGLC$$6lG#&li9+i@hY|p*>>-qfP$S?u3~em4 zs*1s$x8r}^KhpXHv}XWR4!HXP!Cj?=sLA#p+%*xni`UkLQS%oadGK>kUEG=~y}_=S z;r|3{N)Am#TV!w!ygq|L%YPkX?ZB00h$V0ph8F8O-nbRCx)d!ma zaezjob0fi+u%7R!FQLLM+9Ay{!ibO>P|Pg&J&_Owlk4o?Am9XSX+{@fJaWS94{2eam@xk0K}g= zjt1`b7(%^(E&yMRK+J8)H>U^tVX{y}lX5V)6Y&}Y%ueblK=gP@d5}FI-Y;rb;VJCZNrtzrL9C(E$FxPDzQm^f z!u7AX0oERF_f@0Sjsf@pY07_eDrVw$^|o+eXW-x0ZRS=W6AB|l4#B}sC_=sMfRh=D z{E>?n)CQHF5MqZrM%T6J%~k9wxLJ3=^5c#~4q$WeP(Wfp!_m^0xMKgo z>$gjFu{Xe`cBhMPXG2U%J(PK(Vm&P4!%y^c+1tBBJ{P=}{NFSk? z0Q-S7vR!{ryqGRCr)CMO7!LaZGqODys{*c`5`qY8G!%-7;7Lq<`CjjfD3uT;1O)_b z{tQR;-|%YzQ~a*5bSDyEgdXu69h;2j>6Q0$r*JOmRTS~X^{%%4Tj1%S!`Iqkgq{Z-{I3_u%**D-|CPKHoCU^eXI zr%0$b$2B|n9N=FiPuzFm~@0)XFuQmPe>mxu19;m zCj|$C0W1At8Q!k4F%>KeONwCYa9S+dUG8`Q55$8}nu#I3lc1QS04O27nk;%M^Y1TP z8F027)R$Y-5AXe?z4!q7$YCN<+G4$(-R|Zf&(}5sbBSXoei7)lyk*FMno-ev>Ns02 z_b}^GM5T?yCiF=xSQaE_f!wd&V*>+93EXv)ynNuH{Z4#nY^oxWp<*7YViv06&_Qzd*!>^` z<_Am{EGs>A{+0q#!Q?8|abD(B!T7`3MlN)@+Z;}s0G?69I3_yjP4*@Kp@yP~8>$}{ zw*;oLQpLex8>RWnbdCl;!m%Jor&yc(mg6CZAOk(^Zf`ybeOQE7+e&-4#v$~+Gd{in zuKchXx^!=RniMwpbo)xPA#H)XpJWs0xd$wQRld8pXb(&2amrpK-8xi|S z<#x;xMJuZ+{g`twbiy2ZObtYW%cb)DmZ26Yi0I|Tc6220>T3yjXCfYZ>R#tfsVsfp zf_RCczV2>$@yDm1&ps$duTPm!v7ez=+_!W*M#N%o&GY^#<9Sz+C`9G0QHXWLnYic3 z!H6P4-7p>_(6&owgUghOI*y*wusSfH6hKdkJF;7fa}M;#w56fXBQWDP zZ7idMc`*r}0ar-g4z4OPFhx0_RR>7yT3Q-{Eg$tG%)ZK{jkEL{98P1s|2|TjMwpvM zn3G26Ad25);l?Sa%8EVrvEpj)HuX#!=mculXZ^<;IO7HOg!visE$V^H@5k{52;7P@ z_p)->`}}jtUjR%8peRW?yF;Jc##3ueRBcVfi8vAjZg%Bei0JVg0%-<2%#-@Qg>C-1*4&rLi&RsF1fN zMEc@T{93&FC>Nq_Yb;16^CAs;c2+Gla4al0t7Rw^Y%w8{IpZHNy)!Ux{_7+)ki}rR zMnr`^{}}_0EZUKdskKUG+TY3Iv}|~7Q8u32Oe6d6>JP#{nZ)}q#!>G7OwXq>tHm|b z;#Utu=AW?=_Hu5m&Kpe3sg1so9=gX*#(!pykE_H!M8%!GnVoHkudJRj|A{VLOPlxW zyLu8j9s)yOa9fbbsTwJ|9U+-R;qiZjxnW2xp{!P7xix)-#*Lv$qu2bf^MfH(@xDzS4EL?u7SohpXH z*~+mm`swq@ANZ3vwrtWoi}_?ePeO1VOy(?H3yWoUb=UVM0`(Hg4?exB*M1NB_vRcU zjcde-Jn4BUjkA$iJI zzhap9>=jBm!yZKZ#%N8IeSc)Dl~a`CwFx&MuVvgwtJiKYEp;cKk$ zLnoffHj?sMFqONC_)aX9$GS>JbLKJ21sHGa56|}}&EBcf3y&wsUT)>`ZqBliM;)#E z2E48w7r}cYf^X;jb@y;c-*;oh74GYTy5v7A_nMICw~vDSbfcxE0;X->=cB*FnNmjF zw{W$-EAZ%v5+f1shUA}3-`a_yunW%PO*v9@0vQt zj1H!w84%S}CV`cT7CyOnh+vTw4Sg0<=`O=hvO-V5ZKglMx(`oNe4du4J|gU?Mp;AL z>KIj;uOQq80t_erMOk58SxM_Lra7m>%@g5_&bYB< zX-h~p4*slx@qla2<{3{?iUeohRm$@6O_37Cqb0(!!3Vf5aoqQV4Ba-2EOLiYYW(iz zzWsUag2mpW>HMASJ-iCZ-He;^h1rMPhl9(?rZ zK^7_RyU;JI-e^cZ(Qc0p?5kT~F6)MekRJ%sZDrJt{>jCzaNJB{R&xo9SV19dEsJqi z`!p_K;BQPBwgx6>gS5*B$jf%X4`OtK9aXTYaBqr|anv7y%flG$we39v9NFq*MFF zw3?y6H5AzSGp9)=8+lzaO(YxDQmnSOP2XcjgiYp2_|WGD*}miGQIO4^!McWTFjStR zFR`(iOZ+%xxuenMF^zG&Xo8JlS+6S@+lm)%8|F|q9hWuF{r5WjomJWQr6S)vV;|{~ z-c1q~S{n1*g0Cb}dkdervQ`IGHx`u3AlnK`5Wvy=XZ1UkbBaZ7948Tpv@~6o)Y+Yp z6R?;RoFm>3vY8o!AQ;5KJ7~>XvbVc2*`!?!YstE&x^TgPNO*JB_?L!^!Rp2e>8=Ns zqhFb;ZXV$=HqcUdnC zp0crag8n~*rrB&$A13oZCo4w?=n1TRm9>w^7#YFuYhhUWc%gXD#E$Xdx#ts0g^jzL zr~{8U+qMb*5c%D!o58RDV>_2SS8wTW*MP#fTxX+Z*2m1$3a8ToirG}$sTk{e9%e-K zpB04D1xz_sb%XBuTq+$67U|RKf|+Y7&m@z~({*z!&~?(o^r}t1Y--$`iWOxQ{p+t= zC6)E(MM%6*?mR%>jg`ahR5IWu-Kb;(6i4qJ7^EAHf&$yv|T z%kZ%aNCbB*h`EG$l9&_wy&9lVh=|VW$L6Bk7T)Cd$3ff~X_Nie0Ro$l$P)|wp}(W| z05N$7nZfU_Wl{fjzK~=O5m`QAaYA;J_2IaT`xSAG3%P%N(C^`5wbgN9T~B$9-UH z7HLcCXpy{Rp2}`kp_xC>k}=$WcbM9)AfKHN!<7=H?5XyQ9vjTisA)a69t?yf4SU8EB=^I6S zPi_;=KD*atNwbWpOfYiymf=bozEX;^<#o2?gu~4D*9|W7+x744hW&H+ZK_t%hBUD` ziqMq52zY{KjqG1{v>THt)@>w<>AN`c<)3tY5c{jR_Mm5a9kr*?7z1WOlWh;k-s5VeW@@!`-!@n>szC`(gL~x99m$1=G zhU|j>hq3nn<^F3g(b5V3>IrB4@*T=&wCxJm&agjxFeaZqw}IA!{yKf7B+Fi0s9ah> za=bXH9;llojGZE!Vrcw~h)|A8iCdlR3hb8XO+giq7GT>#-Zq1Y?GBz6{OxA8m~n4J z+-D`(&SA*06^YWN-|gI6g;V|UzTrpLy9*PVdWShNj`|^F739-&y*5JJR@8@o5 zUcAOsD|2XX&B%F__|@;YUV`)UuHZ*UT}cyuW0UXski|rH#B33sVOx2vrUq`)HP7GY z-m0xxw~Jfv#Qw&cJ57A@AoFUY$d-H=Tcs$tre6=2%0CFWP79dxVoR5KU`GqOh$0AS z&qO&R7K@(x6*I}0d7)IER~I?at47|Hh*!-e@9Ea~xM6kuT)uoKG@~`s*5yG+P^2m- z?Q#hJuYLbqtf#AxLRuI_IYguQ(8IHpye{r9i;y9vjtr5Tmz&HfG$$onL>>8wO}>BS zld^twGJCGyskvcyvMHHEa5_6LqGsr8MNs-}XOwKeEXG!1ihC0{?$&fW!(FtTzpDJ+ zSVw=!*NbXOR#9uJdbP|DTM`tle7HbjU1iy>#yJ)AaQ^}?H(`r(IB{TRH^ioonHy{zNm?3X zae-}RKVrM6;N9Ha`l}G%F~gcMM3ygL;FBC{I@i*uL^y8IBXUeCeoC5ybyB9}=`MaI z)43D_L+QM7eRdco_B1+4SH69?2-U3Z)QvW?trHIESRv@Gnl*ke=%)~8@~(Qcmd6be^otcTB^ z#0@M8#Gb>`Jf_%ag9@x`-W>~wG^tnPT|aT1@hAEtbTEH`LPvEXG<5gRzafvsnzt0_ zP9L}mD(9u0|EPOfzpWSlL3;b{XxZXt%+T~;)_civSU(siT*~)(!U|~`!Rm#70;XNO z0x4JxqPhNj zWdND%YFoCvlH#Ko1&RJXzIRM3aYQL?;Infof+@4V$8%kNxp zQ}Dpq_+c^L0zmj%i;U1L5n~>C&#g*DURPdPzAJ7*GFQ@Eaz_$ZvJtuE<1i?$Lb7rB z4}&55E-B5TzFTH>Rf>~y+=e#|Kk92aP=2(BT8ySGZL-cEtCrKJlAZQ_6wR{{Rm;_I zCQW8=XSF%RK9NtNy={vjUlca{X}@>HAqAb_*D4MNN_NutiCPZyX^Ti!^Hv@?b_^f8 zRXH%mrN1xufEzR5zkOfOsoMJ<#vA+cDgF;39Vvfq&=>aj;wdVwQa;4iC#?Y6IHuAx zQqm-8He!^;TJ7)F($$C-7scDhbOQQ(kB#@GKjK+@n#FPM-tk2qxRPP7-$nu3cK&2& zX?iiVqO3e3iiIQd+&<=hFyp!Wn(fk!w`ToEQv~-eIN{lDTiV1%!2bx?x6s^!b{Xvo zu2@YJ!l?M2`CM}*uZc)W8Pt~GzT(R#9o+O`ri+*Kjkv;r%*{j@jw z%WCv5oON^f_MqI|5vfjB6#^G*^t&(;QlWKrrH#VJn0><&MqQzmW3u$+LeunpHnfny z3!z^1gCc!T^|qEVPKIA(bTFMR5{mB~>lq(gqijQ~So`@bla`9FV5 zhaKZ5Y0Z|Z5IRlxXYPdxbG93B{R_urB+LHzEb8KPTzOyujf~_VE%VI%wz%R;x6AdA zp4NDTD14$u^DNg7*1Y)6eEXP!a6CKPjA@JhhfijGoDpfbJ5x~`TAi-c{pgY{bzj%~ zf0)I@RdZ@41&u0TL=n?1Tk;*Gk6BC;7OarjOYoaw)@WXxqjL^pB*-fS=OwBx-R zDvUMrou4^X?hqc@37JBxgheyMl{&-dohN%HZ=w}YCD~Gj5=Zy8@3r0Oowssey^O7 zL0vt=UU0J{nLFNI(7zzFftevk63D7=Hgi3^J;@rJ&s1f+A$3bO~>`9+uTk)PIG`P~0 zV8x9%&7tT0r^*?#Uq%Fd)y=LrcO8Ljtmm&wg$;-jexHF}ew_ydxIeV%-iKyz1G8BQv~67RQu!u{}s>GnjT zv(5Qb_ySnO-quh1amqu%KV!HiS@hdmKR_4?djdvt!}{XNX%u7Bjz*mQIMiM<5TRJ1 zYcZg29BuxR?xXJ}>_1*j!e4-+#H_j0%7!rHK@vmg969T%8K=;DNY53CZ|TF$b!Wpc{Y-nQ-$Iz2?n(tmSJ+Cb~ zH&h-3#DBB4PpUo&4lPvutaCS=oV~gl$}C{@Cq%tW+Lig!|@YKpG9opEDIEb*->aR(ZjG^2K|=h0;U1oNWBM5frJh0d{$ zE_YlBd^&n1W2Xw8VRTv;C?UNUjoq+Je~zEN;hXFhcHI#*zTh9+{hN^{zNKZcyZ6RHCca0SMiDLvG!gksNN|8z#S_SsZ?0Lyz1Y1aL=Uyq|M-w<&Od2)-< zhsiK1@!^&sPoU0g8+lT{?oaclF|O2XI{NppMVHI;V+Yx_h8gi~W)BJn$@w^@`-aLc z`RXl|rNm2Xrf>oF58U@;N~511*GE1&7A7?Q+)PSA3tGZolT|f7P^V2YH2TDA9jZ53 zi{y^hM!GbA2y5fBW?9%1`@IaiUY0Ng)l_yHw_5f1pMN$g!YKc&BZKk#2n4UhY-Bm{ zKuh%lBRmG81*@HW9%1Dl+0>tp_E{M}YF9q2}48O zt212M;+)hI*A*iYcv2E_DVMek&Z&wfYtW??lT_5>QdSCP&P6EA1$@(wgs&8f6R?ly~VM%^cs6WYUR!pbFaM&)%#{$$g<$* z%rIhqeSLqKx972aBH{9}lIP~K7E)I%#3P~kqCluQZ}q$D|HUlQzFRMf3-_9ti~sXhdIqAjjhXcd^4HF+YveMEpo>?D^r*dzOXSi5*JwII%bfdd} z@Z6HcKP66D`89|8A<9BBLZKxyftGo|6TMVK^#gOJP5!Ahd=u?2tFRSGVuM^p5yaad zGs7{Vd7VnVFK2e#v$Iz#g=H!1IR)&Bs|gEfj2-L#X13@?!AAZjD*CNP3WTDI^{mVx zy8CLKakK7+GeS}Z3pEZ|&VH+{T14!>ERd5LXO?dOM)2s{RJ8Y5y<06p9zy1TLG_H=x<($f@0Rf{yu%CTy347Dr(^Ze_t^GlO&Z?Va(^OMP z9sLPj4?$I+l(xI>f2vg z(V^Lj+=n!%^;~uJG5^n;E6+%hm4A(n^RXU2_C0ON6fy<4DJR%!I1Hct z+n*+Rh{QFrl>0-}((3_R{bT0W=aDX(G(THRMTR%y*yS5P|H)JdVsq9~A9kVbwQ&pQ z1ZQ)a|Kc=@Dgs{;Sl*LfibP{%NyOV+{Mrnjyej_VSN%C44Ny-Fj(Lj16NNSfZj&yD zykFaucW21P{tIdpZx1R+6{r8Q&S|qt^uJ&7yoH+GrsL{ZuRPal|5u*t{}pQfKX@j! zja+})5PaKMcc~lMM?*nTL|!gX#lB^-!n1`7`jhCGU~NVdrxb?0GGTqEsM~rH@(g2c zVBqk47^|&z+-;j9kQOnh`*{oLo^IeP=P8e`Mb6i!*7nlcYFqaP2md>~PaTvjG3JS?1;2!|*h+brxC z_6O#jpJDmBg6uoYNa_M~9rbLMrHH2%;Y*4?Sf0QpWQM_=32X zbw#Y;m6-;A2T1dcBmq_KM3dHe$W3Z{vc~u7WKW`gaDNr@<{*@}hRwOwq@nsyRN_p* z`RSdmY@jA(_9WSQff>I}A(tS6fry6u0RibuFn8Z!!fAUvw2(!IHL=B%C6OC9YCA}> zAzm5%lk}*ZcE1N+Dw{A%uY_-V{Q%df>GQOywY^Y!hDcJZvxCz*4#oT55#9yr(-Nr@ zGDy)G@uD{Lxu`b`n;JFOmY~7JLxu19G?ll zo$}m2j(+wFU3yFbYytjS9WaVj_;(3cT#S5STr`=#LU`8~wI=i(>JIK&0|W(%zu42S z;OzZXdnocg8wBqkQ$(VyO;JS|@s94FdFv$hzDrIOz`j`Q1ckugJ%N(=dN zie59}&f?z;?d89bF^@juuZB0rz2!J_lftP@XoWJ8 z@{okKV|4|e@)4P^wmUgzduBOc0D!;1X~Uiz8$IMM>%y0wBYxvXI!qQ{SHkeORfLNB zhQ{Ty-pO!yYq%u~!N+uh_x=9)Qh7sd`I4c^R@?^#9NwJWmdaESdn)lwHVM~#`#4AG zG7zJqc`WbfUp}L%g`3T)jQ#~|v4~ddUj&vmd36^AfO%E~9r?JV?5TPU?F*y0#CK-R z^H(73j%};=DcvcClCv%CJtvw2waZJM89J#yrt07W11@Hz-F<9RnXjzFzn(~cUFr=~ z?_0DIH4*(Hu&`z3xXardPKPEYF|w1Gu68u#sQ1HqOo-cnFmoAk^tfWLv0|-OWa3t> zu0h@|%|e@PPoJ5(QE6$ydwWee=1%pySvwKt?VXwUU!(Q{)|{Tfq!fSgfXlAvkmM${ z?z;euu_!8mo1-7sc73B=tSFpUB6L3lTBmiP772Q6&UnpEIgj?)g4YzVgv0iY zbE{*2oigc5n9uY<{YV_B_I|hjkR%3+3?97D`;d}n4!l-cgrB;4@kOCqLs*$Ui>S^U ziZK>`#E1Mbx#pQc{G31=gZf-w2v4;S>7^pJ^T26XoCsC=>hY^i1-tE?4d#|9ipp0s zf+v{1{)(7?NhxM^0URczCg)CGL0)DSySI#!w)o%xUSg<@tS0h7YRo6n%qJW_?#JPA5( z)=+M^BQH=Fm?1bv8)etB&W2`@IpMNJam%v7Wfw`6x(zCVu)0_^mIn z6z>}CMCCi3Ykl@&RY{3n6WfLV`_e5)+!9O-q(esU80mtiwC`1rqWh1LD5B_-?Fw;6^vYc)YQA z-ojLiJ6hKu=O2|P+&%o$doy0>n#=?vXkk z5?2DdN}ZpSL}R+juwM!=cQzSS42!>D4JB25*!qSwe`HkNG}jTC<}8fp=|$yrf1fh; z8yO8)8B5p%pk2cWX>x#VhMW>LE>nxtdf=-9S9<{KLw+qSKaI<{@w zR>#I0+vd$z``)|HsZ+Jjs#;a+$6D*pob}W*#~9BTEmvG`ayFGzj;?j#rxtMcUCCmt za+*7;j{UO`h6zKMfBLiyVVGJW|vLX(jqw@hy;Bndf9|nY8YbQny7HR!($yxsF$kxjNPv)wa82v z>8>zl-fVyVl&Q}6!-nz<5&4V_rvepwAzN5zPuJK?PbxNuLCF`cq z0x?LvRB{gGXiNgJ0#OM6+qnwgj(1OJ2{p)}4 zEu1iA+$+B!>;ZKU5XS$hj~6v?HZU}BG69%48~o?_zgqVTUIcgTMVBMVW*5?lx(`Fj z_`9duFcaxu(DU z(jvM%;wR#~OD>f`b9GI4MOM5V?XD&YTA^;2Uh@CBniEr(_M-&+j=J0~ztQX-ugkWX zD}k5c6ha7p*UZ|1x1D)ccSdhhh=8|oV1vD&-#b1OlKu5hD8K2xBabtYgKG$`p&bL? z4-%*bj%Ouqm3~r=XGd<80X_SA37mKGpb>2EkiI?m?(v-(?Dr;w?AigIXWXEgyR+?; zoiU7Bn9t-sPV9GrAUl?4FGzXjXDG;R!|Pc1Y}0G_AUjs~m7!5#0ftUe^1_wc@0oOh@oESz`BpfAH~)Sw)uXFEv21Cr0^ zzOU=EnF*i?*HGWr?T9*d=XlzCV4oGd@7Rty{BN^sKlm+urV(Up5)n8N+5yziBKQgH zHEfnpTI@BPWL9UUO8wRZ1M&fy&_#HN&TJ^ug#JSWS> zpn`F08W1y78^@M*nLn8MDW0fDj608UuBRgl|<1cTR+4b9fh z<^l#vDc)QM)@$#^KF(+!nEN+bX{2zBDR8HU#gT3fHJ0p8V=zmZ#_lKsxYzb`oZnBr z9fCVzm3vCG6Irr&Zsdp=NqB7(>5;%KU(5c9Ds(P?g=XI5a1#b$bLW@DTYGwSIl{>1 zK~x;-r0_v)bewQy;Yd@%vBB!lAJF6UmYXTp3l)N};nH1`zUua-jBr$LMW+=gZSSYrH)ldsp8efj2(iJ1V9xiWsfv~`VM67hobrMOSnHN{RVC*zO7hih1Fn>-z zTH8Ad72-#{?7jjSJ%UUcbWcwlt7C7>3IN2`Q6K5D7AObhX`k}L&8X%FV?RG)D~`aa zzc!EqY6Ibk%bwA5EFAHCz&G;n0uldL&JU>g!IkpZU+niJH(XD=5JKYV38*+wzoXxf zo2Srj(}nQ4z$ppbVJ;ruaK~CNMoU!0WQ-D5dKi(R zUk1g~mwfVXCv;LfDTs?4b?0Ua=Kii%v(v7K8cUDQUQj{xNjSJ z{q)(==O-fdWJ`b@DH@EQRBX|Bt`OWo$Y!v4%MX{3i}jopj*dopdf~FD=+<2PeX_h$ zJZ6_E=)=l3R*0ShPKjc>@G5p7RVo&8IlD7VLSgH4gi~C#S(R8fV8c0ng%qtL`<=Z; zq$hs772u06zG9oODiND4Ig%gm&d|bZ4=&)Zzq;B7YO(|vq&nsw^>A&)_{@LZkfO+6 zA!Hl>cZ77W$XgYVrGs)&7M1-98TKxq`D@zdAJO%nS>=`tR$LYqTs+*zkm1gOg6d1i z{I#);V~5?oygDC}k?<5KarEXY8u*bTtwBVT4v7Fm%jolCJdwfcJq5-6KE*KuM1hBCygmA0G>>*0QWnw}3a` z%SyS#XLbblJv^8*|ja8^FAvI6;7k9FKA7zw~#G{zx=GypNk}mPE z+*Uzq-B^aqwAeUrplsCmyj2@(ntQ7CFW=ssbv{`~Gh|UsWD747$kTo%a*-^@P|6k? zrHqtv{DSK3ij`{MxnsGNC$(OX)QNp?vT+tEOo0iLrZbIve>(`9MFLA5wHA~a;tA$& zU4^kpk4Sm(2$d+v7!?98jxm_TvN3E7c;JaK&#+UDlsLyqnJ-x{Fqlz=F@rW4(TrMh zdoif5w^p)AI#q4HmPJKt@~29hNo6~DiC8&`6*@Xf2>XCI3M$moOQ1m2(lye>Q$#k$ zEY|7MpVz_HWKYytUY0mL8!D9xQN=*v#u+tK)(8n~2Kaa`N0)D;XMgIdbUCrJr>-WV9TPsN zyw-UhNX2^{I)~f9TCDX3ls*_4BkZzZ25V7k5UuFx)pnZsJrp!T!apoC{wh`pymP{Z ziH;EMg{Vxa;c+{H8k+X-(czPIS4(H)q7sA%{L!7e!WplAcxp8l*e3mA@%IWd&X!^5 zr%fzAc3=lSSLoiLJ%tdPp;n}_s*!pWHFLsJm5w2v-x57cr))kzo?PO{Q6OYSpf1}N zpCEP?GYBp|0a4kMzPH2zVb`4-3soRJfyyYPgtTn*Zzf7dlA@EQm~Zr)FHL4Ls!oGZ z@cGVnW~P)PMWPdPO`R6EW2pHbvcfTYG7;6Iyfk>l2?RDegM&&&Msyk;mPDygBbbCB zGwf;eUuMzn36cXmiK9Nn=15#(GU3@XD*LU764ne$&Xe-1;?4}ZcSBNYx;V2NIpP*IIFR1sagMcOM;a28dc|lt( zEF8`sJSQ{#B*QO*oFI@vY;NeSg@O|9m`2*^7FcsO$iKD>vB`Gc5E5&5#95sJQF=t> z%-LN6DXuiJ`^|%Vo$#D7R`eY-M|7?~8?f*N^CBvjR>boVP~Fa%CX0&FCCxaZB1^WK z=Ow#5#<8#)JS0jYxGm5O4F8c!ceQs$wa}C7U9h!}rQRf0q{x{C=tMfdP&^+gLw=bv zvchH>Pxjl`92KVABGhK;JUkdyvvgOoROi@K4M#Rs?QJ|}rHLgc(&l7uCk;P^g&?w< zPCEIpV75#+I-Z%q+fH>CWnptT~uX+Pn1 zl7I1*_sT;uHnq4sI$s_iU(%IQr5q1Uq+R$WkL#u*BqtVJaytAqZ?58$E7R*}`2PQI zX|o8kkELCJ{YsW+7{+io+b&7%7Q-=5`AH zY1nu6=wpyj;^-ykWXR2x^+b1qS0t24QIiw$#NYXEhUy~11BK{5h6~YSB$VDOnlyx8 ztY!Ep)+rV*PtEO+`Mc_c+^E5CIqinlO5}pg=9Dab^UX;HiugtMkeibV5?Iq9#1GL~ zmib@_Kyf4lqw*pYQs;EO+?mj!FYAdC{tTjeCPjG1{vJASX!mw%Dy2`HTvlXl z*m$U=?P=m1=@y#APeQ$waHbhCcch4SVCSIHX;U;db+migYi)F&Qluu2@E~F=-@QoS zz5(?Z`5o!B3F7JH>Bw?E$8M@RX;gw8U;D5}tjEN6cyae8{2-lyE-yo)xa54=k{QX- z9{YK}{YX7-vD@ktbo6(zJ5zOG>W!`OmoT*#n=G2YC;4DJh@kor0uto#%W^ok47PQA zOt`Sjv3B90@ndoZSNvov+gxhGZ`@l1TP9s|Loy~7=1lhN$#{*j;)P50f@vbuQ;Ctb z@KIl@GBNdFjZet_!Lz3?o_w;aJIl?M>PY6vs=5V5Haq+*S2AjEOjvT;ts(IQ&oG6Y zObUSeFmI-8#A!U&{GL5l*?@&Bts^RZGB2=DQ1bBG%bBxXecx|ktD+(C`(A|$3PV? zpA9d+jV^FDpw8aQ3QsV+JZltQ_jDPtj6?+oDVlh}q7dQ;?;)muIzk%DLTQ<5A99SC z^C)MNU9b^vF`F75)5CDZ-no*Bc+5p~9G*P?CQXXEP)_`X?&JWPHdcHtuVQbtpwyTu zQKUYzmId%MFM3*FX{JR2iIu9DPM}Ypqb55v74c82Gox%OqA#-X@0h1qlhtUU;A$;} zm<26>1A5X}+yg*8%P(AJWggDCUbv_97gl6lPFH9^HKGW`9v~2@n5lGi`N8*3@j6@2Yr$lGFh==>d>OPeQb=-6Io+R+yIjV z%^3CBaG`^HIfZn&ViuNWY4&o4Im}vXq29R_#6_BvX~{CQed8jE<(o;~$;zv?-wl~% zO4TnWV-0L4oI3ho$iS{^0gzf@0(l(gqhP$_$ZIcWyMU+pyQ=}H#v?%x@h8rH0QgrN zlQy(jo|UH2{D42w_{goGS4c)b1aHb6o)eRLjLC|SJ%ge?6OhrV8z5;M z<|2$+Uo+!vxSHyxs#^&|{#iHDFXT8V;j<R>APE1MhJKY85(tAZPw=0xV#uat*FZOC-80v@X&u5pcu^^0ZG z7{r!nt(>8N*O(>!J1RqYj`Yr?XV<=Z*(k`I-sU2>B{Ebz3xaOSPu9EboJ_X{@wc z_T^dKQA@*8t7TXe*Xk8qo$K(zy_x^vZY$*E$|47>rb#8bh94F*G=eA}P8)8}46FGY zyy7qzm5;+>tFFSACf3fY1cN=AK%AQaQNg9rvU$w15@=2x%XZ&tgLbn1E?$O7KjRlg zG4|qeL39A4YOx3dK%ZgHgD8O|*COsXzVJQ%SU{I&9I$tMnH>}3YgnG06pfH@c8y3Y z2lDEY4nm!n4hMuk1!y(>F75=jy&3kTTTvvwI4wI3tq6L(7tgp$dw9q73;G2^5rAYu z>t^t}AxDU2EtVBq4FbY7hjf0AFWZ zC@u&Y%E)rF)J9?0#hT`7$J$yR!^kPuKZbPTaEI?LbAl^%XU8#SaUE8pYO>z*Eim$6 zI0}>tK%nHG)ys z3iV7V%#|0}RyWq>fLYx%%Kk`kL{T)n^|zv~BM%Iu28wqJg#8)46Co$4Uuu;j4nk>z`Cv9u|cffJ9@c_3sJ?H<8G%o;#Nw^2hQ- z68phyo<=dsB4f>gNCll^%~{nt-n0twB23x|whQDgj>=KL`I4<@Hh9UjlVa=SL8)lk z%fNwiqo5G_j6)g)4Cey@*y7SA%^)A4a74}C?VlRrc873?+U2KF)9p*e-?5Bj z($5eJSh+9|t}zR-j~`(;fA|a6v*!T)kqz5-q`7)tHaXnZna8NeduTLKuhEbK#Ul17 zCRTKL5U|lJi*xISzJ?bq-9X@N;+l=+toC^H2ZC1}{VLO^K#{t0M7fB=iE_VZq109F zh~l!THs034qK*#%BiSr>{FZJ(BRi-m8EZ#z0-w)T%)Q?-gtE%@xp)zDyS_U3J4>X` zX{qU&{|wT7s~zTdlkG6o_w>{wlzJl*;qSs|$aE;Y$&O0uHNs<;cBb-#{@F}=Pb-7iQ!3%#Gl6We! zhL9`Ur}WOJlj0?zJv_VgJ1{3<>ecKE>A!)`@^4ZV-g#eC4D34^#tc&k_GW*J#)vP=1<>Tmx5yWFZs5L~)z%~qdFzaWs zJ!d$`Wyt6TmLC#XAz2~L;RgTjIo;pZZji;B8%#Dqyzp=b%>|rv*{htVG10(OpG)K6 z6h`c1b|JUP!|aNKhSid_$M8xFI++US#tK#U6kZ=&bNJcY?yY6kWLr*F)#W^ODlzlD zDYdr3B-kc(c%b3>WqbR@<*8aMR4&uAWs-1w^@=u<1z6B>BOrx1t-Y}Rp5Z3aCWv)1 z8IaL)*>t*5cH$C+{M9~sozRzv+G)SnxGPHIQ+C+vIgm~Ut-8)%(#Hvi=MY%x-n;&D zXY=C^k&P!eUE8K}<^;W`RR&aA*$*jb<8{AEqxYifeeP-^jo@I_>W&;e*uk3R?dfkBr+(c0WtTmXF_8 zfZxv>EdK)f)pJ}*CI10l^NKisYBpJ}CmzBe%R)991ut;G>#Zl>{|=^tR5txQW)y)E zUwV#L81z*tVT|_OE%f~NUi=TiZzIKXGyS~})xJr7mj4liw=giXwR18sw6L~t_5cW* z82o?ZoGRMN>*DC2n0REguw)c$oat1=$UlbVoGcQ#0C>@f#Y1t!f4@DFwDDp~<8&+l ziPO%-eg&~US0d|B`sr!!{-4EiC1xgl`r6rJ?#`WFkG$L5UJP$Dettcm_5{KreZ3y& z2s#5^(mKly1HFKaxts0)Bzx@*a}M$&7z9M8sY?!eBNC7T!$I(vic7V|`uG?G zNQ+;jc5NdeTGy56qkVTpM7B15=toEXk{rnukrZ$U*pot)DWWXK#f>ADjG=9EAg{ zgq&d8s5M!8YnS)k#DSM(6EmAm4GZFl(2MbX&e~bSxow$l$@rJA41AFgg~>LY$v<03 zL2PRuv$%&JQgNQzk$uf0RtcQlHMeSisS#8m3l3X?Lfwx`Y4tP^+y^jZ5bZpDN6-G8 zjjE$~2-Pv`Jdpl!n5gEAblo`*&s_=ft=^%asLMB497NM$x#2Dj=L>k0q+#b{R~*0% zN&?|aNZ+UoWt6Sl!$~UWNOvYho2l!IlixWWc2#vC2K{|z8-7`i)a%wFlOole*d8dY zoA)g`&!FfYRLAY+xIySP;o8)09BSS}O&mY!fafH7ncG$S>1!UPpf%TWJ}RcGvC*)W z?Y@eNKy5w2V;$O&9C6hPSh$%K{m~qOGpQ7aO2b|Is?yn=U2x{ffpm^-pU>$S8nF>i zNY}v!FEd*TKy(IR7>;rQf%d0twN}oeT^8g`gejfVB8o6zIiYtea3c*BB=FSYq3dm* zC|voPRd$Ni2}j1K^c2xT1ugm^c8L|rZKCNY#(sN_vEK$N8=Z@&ghhS^wR@k0ul3Z?6oLoewf>jm@`2&3ACIa`uEZjDINX`$FO* zfQF(NqNAd%OkQw-e9J<{^G>iR4ta>I?w3GLszfeJ9u8OQh zOSN^!JV@{GqeH6CuZVIeh*IcAA|f%D_zkSc_DVW;LtYrQ6sa)3;e43V=j4T1LYhYztjgAo>5(EE&x^)U;xjeS zS-rPgl7--3#N^naq?eGagqED7-67jDubNOMc3D1g(Xy1e!I%(6au5eyfSgic>)t=4 zjao@(KXuJ*On-l;a`Y45a~u)z+#B_XUP}}fbYrdJmP>B4hT`!4pr1)Fg8COZa$xL$ zcsA-2AhE}|J{);=#;=etuA$-b7mleCjK@m2q!_4huYFiE*q=z<*S1EFa2MVMv8kwT zf~C4D-UoKo&SbK*;~^EAaoS z8ns}&(H|cCu39oCjah%KApiVD_R}0X4unJ)nQa6TGXXFeN}6AtxJj(Jaz4!eQ&Bs1 zPRq)wf`8Eyz3C)CH4j0tT*;>C$%jZy`@&~UnfCVU)ATV_mt!;sX>!u5=c!}sW9xR2 zlh7|ATrFZ084MYV}Fk&gwZX&U!4ly{wAriVuKNw8zo{*)u{~x z#X@q_0P@pZxi|!ejdP7NCxwyQC-pldp}|tB%29X9AAG>Zj$(+bc5B&s#ei3sbuAb1xHb^?GuXnHoqWS$9NxA*f+I=eE9Z+S7gH4ogzVr&(kH)(n# zfZD3QHBn&i0!em>SKr@%+}?mD2_E-D2$B&Ix!y=TBVy^!xQ)wflgr;IzO-rsz4lkS zV7HG*kp2u3?FAip3kv=uLZW$hh`@1*-;t+!A7eS)mmeb+(47u@CQcG0P4UyPeGVUw z9e*--;mW@?Q~k_*$5($T9Y>=Pq{tgl6)3(wI@pqLeU|E0J19{RU=4+M}l{HDxVeOe#$RbG(99EpLw@}2by2x+)s8PU!?J0Ch4eAXMN!)l4N_p zW01rSqu6eFyXfQD0P&s(ZKV7q4Yv4&g0TxvG83kxE0_nU2IXRe5u-5;CQKH;*_aw)-p=5yf^E_b=*KZ{RNIazR_#rwtCaKa7q zX;wPp>((V9p;#xN`&4jZFOV`>cJ$NnSX|G_Bv};x_Kp=koVm)v%)=WELKi29|MV;T zYw_E(ZWkSPUN&>p_*-ChIv}1*Eet`_Te6@)lW#^j90RVVEQVv-WR_$A9$1$Ll+=iY zbWp{zZL+HxJRY<6Q-f1coNjbq2}cS^3@~;d^*;{_{XyJzs=&qk*Np^$GB6+eRpCsZ zrhS>Ho2O+G{TK}!6$T07UWJ9zjAkCJC*C@C@ZQ*oZ2?op;LZl7fE<5uuRycjLRMMg z{ufKN1X_S3U2<sl8nWR={Xsm4TjcuYWups)cdURr_{Elz*a}QI*h~psJlJV?*>K|L zh_To>854+;K_9^+nn4)sOd;mrvZ1RY4uM`Gb=Y+Kbj2@u_QDLXwpWM}2xoy^1q0l~ zGiK#5!}+xu8gXNnlGvuj5{^fuL(D}*GHNzap@|W;OlbE7b1JHz)bM<)8!YK;s2r^r zaA4U`tps(*Iyr*HjrnHyNbNO?>`{9IIR|8my4 z*25`P95|wv8yc4P?z}p@1Gc(t<#Q`a+L{K?uJ7-iADHTv9d7rfxN=t^j5GKIqQw97 zIGnQF*75vX13o-^5`^!w;Y4iDH*C(6O0{y0(X7)LvLtNKTuUr=+hoyaXa7?7`kAxB z2(uGQBYeX&cz`2?J1dG^on>)SjYx~kCcV66j>6`eR@&@sIT%#lOvv~M=giq+YqPZv z^X%o-*$pVyAUnvE-^2~*EljPGI;b}66KgPK%OE729?X{_ABZ1rOb?C$KOUb?j?zFM zLZPc4RE-ypU<#BvGgqEdS;{jgwsU3Vresc+#1&Dh;C(Q_&bxsA<)1%EL>PWLrh?yh zwfjB`C*P%9M-TWm$Ld(N8+4Re=ew9%=kfeer7MtA(xeVs+EG%mK0kl<@ce_H&~Ldp zTTQ-qdE+F&B`X=X0z%7Zpy1}ZSD&TUawrlGZ0P}Pis_m#0s!s_&srP`R{NH0v-PL> zm$nmQGQ&wo`(BK9f;1!i02?O@_i3`VnPc;?aOgfnA+>u=B6b1RyYmLg= zXi;`y1FSe8C!X`q_6wmoBu!21S@>jtc9|-0skNf7^6(L9PGs^Z-P%+W`5_9&A^X8& zF>CQPW%a+8I{#h(Xppu)OIr-%&81b3uS6!Hz8R) z^wzHL2CILEpUcw-pjsO*jz$y9`_W+_;a(V&UCm!?po~9qIFsVU6&vBIbP&o8?-oRAIs8$BMwDny4 z#Oiuc>(ih?W#NP;DUro(@@(X=X24>@z2%G$jRxg64544A$ok3wRMsD|r3AUn*hI{c zfZ^=>@ zC}2{3L*Hz4ZA)WQ^wC=Y0`MjD#P)z5Ji+JqUF)fB`8KwqW$!XSCR1P>OsHFJ%{ zm3^lkn(w1|zPk1Npz9Xc4ZB5WDC57C5#7j@yojuPd9;*BUEGv98MKs$i6YK+k}Hr^ zS}8{|GS)~jJ~5p#7~Ol)QY(_t40e=+30d0kz;vcTTL3(hH*lB4@RAT85FF%Lxais< z^cp*?>|RdNpT07X0R+M^Mq07k7f?J#LZcFM(`d4gp&*NviABVdjl%#2!5ziT=&*lB zl}2DGX}txew?+afk5*Nh^Oz71JRBz!*if+a2io-im3in9Jr_gHdE`+fI0oJRaa0JJkm&MgllCc14(dva0@E7PP_ zL!n!XRS-aD)OJ-f=_5gMKKVV^zwVD``(CYhL$)fYcDvA6#K-xQ^PR|+8`0@XG26uv zKXxxhVdK+kG`bDRKbNXCW{p2>H1fjT%y%hnX~zIf;pG@-#FVq|GK+==qU!alqgG&?K|ce>mW;5K7ovyehEP>KO48 z#)M6#{W;Gfgjkc}cl}a^=T{Mi?w?-pTwPs9QPCj`Js0B@dLsV5xKJFliJ@I#UP;ZE zKR)D1T1-!YIN_!j6xetw$MQ62Q#h?8I=AqBDV3+<&K5Fdr& zhBoA+x2krkqg|o3nAqa~VfXBC+=@1vmC#R0lOxj!v<{G#Z8r&+k?lZ}Ba4@7l74Uo zYAdb`h$5!gXr$B2rk3jBO>UV~thP6fF3R4acn2h2O$%S%V|bm9qBaOYhXCAgwdt7V zx$pK3N{Y|?tx*&fGcVZE$@ook>UM&))jarUXBsdt)*hRxR&7ZQi?g_#mLV%{Rsw&* zDvE^GUoB*u2)h=)#X|66IRESe(cVUBX7XrZwt8L?=FRXj>8KNN#Y;0?3-b&b=+?-v z<{@!jgYt|+zSo)>30$1(ydPsoK6l;^aH6>SnLk?3=)@yTz9|+AR@CD;d6};XU6%HT zSlFyR;&{fe*o-GEgC$0!cFG#-bw2B(Gc{xsGi2v6pz6aR(ZK~`pj$Hk$7Qh?(&c8& zh={AyjC2diI&6D5cLqC_)DwzNeauSyC5iA$yH=Ngk)PYrAIt+MJ&v#Dnnc-n>G_1q zPv*t-v9-O>Squ0+7-unlrNvGq+905D1tI=lNE~Um=yJ!)Ni+Zg5I%V#)9C8AiIM|r zX!Xp5(_JXCtGr&j*+Z*&3p7{+?i*_v<@|Vl(bLHqKvF91e4z49+RlkfJJ0CFUHVnR zeYjn>B#xfi(QciLPT5Hd4E@=oLTk)>tKI@#IjvH5(h@w$Abuiy^`sJ`cH?|(_~#W< zd1=?qNqf68l4J1*KV?`$%G~OVb!IwshM;|NhtW;myYx4kFlKpkPA(fFij56|hs%4N z+(6#JvW<|~ViGwyb!z>Y3VIhRzdF0IclWB0tBR%l3sq_eEU>J}Rw-euUHipl)N|E_ z4MTB!o`$&YrtH-cVJsOCicL9Gg7Gf>05l+l?PCxucvNXeOsYU2v8YSWn!n%=E;Oib z;=@_DjyC2qRLyEJhm!#eJCcb#j$oARKLFA^Bab)B%Ht}$m$4Mlt=RU6mX7}JL>I>M ztJ1Ae8u%?E!Xu`hLH8tW8&CE$@U*-X__Lef zkEg=uVa=FG*~L|J7mYe47Q!e|c-GiIESkCDV-Qb&={D7H~~U>^`Xifmgiy^3#n!uCq8= zv95JFo(uf1n){wWx|bohp`ML6o`3GV*`%FamWZmgO@Aaei|1u5wLVU)+dq?X1YV7;UU%j_`mB;*K z+)=l=w(|cn3(|w~?uYCFeKtlk&0n45(D;Y%x}s0{nPgAheN>yk3svDiu@Yj3mC_K} zvO3BEw9p}b_~p70-Zod51Nus{&Tm`dQU7I9%?sx)CAiK(2&FUSWc`#H+H`o!$7kiQ zDSZ1ii2^7S{2sL66WVp!cVBp~p*0&5(N8V?lj%&Gbn`yRcEhiaj{M?YvCb_-P9QT< zwr~SZy;tbUFd(tY)#i{Zi@^2?T$QjG=aNP? z&B8$2ab=bJydK|G4w08NEGwmNNl=DUMQMsFYq9R0TWRxdWHh91%|Ywm$%=b4<|9E- zLrTm%$&(@9uY9gyNzfr~b|`%B1Mn=kd#*)x?%3IcZnmxt!cof-cE`WT97zjA1t!>< zzjbf1*}2R|u*(2NMwCc@6vZB8X@@Niu<6&*#WKT8O#j4pfZS1)?YN=Y_{Z(9i_A|w zF{GPx*94+YJOS8Ja4eaFaEXJ+JEPUou3{Q-X-E!SQ8n%IJt6%jaRS$@j{ zyt!?55E|ndi!r^uT0_>_k~}@oF2FmZx}0(B^7zjSsCFt^Gj_dUbZ6F&LB9Pbp}G>? z=E9y?+7oMXy|{iM-6pY3^8oDQejENM!5e((=L>og<`2saRLmY3;M#NPj85##RPH3) z#(S~s4zB^qb!S^STw0C#pe~z*V2zIS17LHy06?+l7VNKShaR~k*qrrh`%M^B_wg@^ z`h7C)(Fkhncq;DNVEH*Qm2{Eaoc;&L|M=&19wL(cCan?!nxs&5def+M1mN|tlRD4~i zKPr94_Q)-|$Up#v*&$|aZOSb6BQU%}u5<x(!3AALC@PtFg$?#0A}M~(WwAl%bOK9*Gr(o6d>C0nlvN z>Uwp<+F}>izk5E#)9nZ(MnqRqMq7N~O zQi=0*!`xW{_uvre(sNgH2Yb#YiMtvFYGsS#iBKoBi_%H$mYL3OJsz2)np|9RdAui| zbk?cYZvgD%<~OcnTJ7vV9yl~OG(l?ncqIW8>P@sFTE8LG@ArM2L9@w&Zt1iht)yKd z3bdR+vUB@Rl_VbiPPRZwu!-?7PBPr7r|ha;3ho3Sbfk~(6HFkM^10r=(;T5SmPol& zQdiJaI1(1VELy6rGOx{trI}PP)mSeouAK=gK<;9dtDd-nCk0u}Qw3)#nTFnez=q6s z_QdzvIKaU;&?ZH#mkM|0&p5**w5FIo-{UDO`u0lDK)DUAT(TKqQOh+Y5ckDgsCrRhDUsHq~7|a z;;?obY1fgClLSc^@26y6agBd1T836I`^iAkg1kb0+`Ve+FCsULtsuB#e44q6OIfW+ z!CsF-sOKN3C%iJgVEwq6LNJU%sY zM%b~UJf`Q}u*=FlYfksrLoiKtFL<+A?PLz}=ooC>2A!$J&4!Y!oBHBj+2u-mM+lg=2uII| zK?o9!^{$o(8n00!i7fY7Yy0<*fJf@5vk1?ZKOIxDJ*Hvq{<=Pm* zNycKOPVSm{%LXJH)=F3eOqci;%K>cGbjVEM%r(m=hvMwC6@2>ZB$6A?nfFEt8~Iw2BXOUVx@ug?FEY>0NoHUh2Iczfv+r1KH@!C zLPu&PagFNw1@_;>=zr|T8>1DDKbgqTaNNmUh4%5BVBn=*Oo-KssG+w1^OV2i0*L$az=s}ikfEY451 zG+#y7Q#XrVQY>Me<|<(IjV5A!4C{H{JoygPa(jV~Sxxhq@tX0N;lA?7e)5@lney|y zX9a<(+aE?IyxBo}E`)k;Ux@huE$yHLs~c%REvyt=RHwkaD#G7JY?uE7HWmDD1Y@H+$)RQuBOFjz@0yuJ zG@EE6Jm^U&8m)~;T?*4YLRpM9Y(5B2Xl>p~Yc3DhEMCwju$lq?7*QxG8)>f~B(+TK zqf`@nS~u&-U^ysWL~DZt+0GM4Q1v4V7Itl~uCQ!mQiwktmBCv`=<=7Il~+lStgz7U zC=}L7FAV2bfsGSiWzM12@U*D_ynY4#(%w}P!49f`{85 zV9wUTJ|Hmk$i_`K9(DT=^&ZqH9Y=zpTL2j(V-G$7r^NLWPOfqxgTWTp{xsc#1=wTR zDs1JwzzT{42GUi+7)r5JN<^t4Tx^w_{76P8ca_w$=O|BxHYZ=Weo= zncaT9NV+)hBxwna`l+ zC2=-7RL2m3_IbSH9=(AUCK)~U&OjWD8p~%623FB&ntutj&hD}9MVnUOElVA!73XB{ zO`TCv;pS#g(3KWMrLpiU1AP5d( zARrkk41m2#7Kd^kz(`m9pdgA`dJ_ECG@cOI!bV3@MI2Ot>v_$LfRrn5*@X*sduO{* zpuasu7903MWVw`#i-Q7#^1H5*E1fB@s%&PwBO8 z_KSHLuS}FK6sRoOQ6l?e=y>@rzcA~jEV{tfhmY-&wee=nf0`zJfZ9sgx!ROoRp9(P zzrQ7^J_;$kok^g+qR?coN)DN~)YPQ5ix&&D!AW1CF)z*z!t^BqK94_j+4qe(dJ1}J zdCX*m{Ak1Xn9);ifF=*htgwG3u;BWbW^?>tx7dH7om2R5v1oml#~=!Y>q6lSAD{lUb>+4!lZ*=qYA6bsK>=ESBSnM2v2Rszz zK;PKbU1kz*kj@An#+cLrEjF!L#}SJ~@_3cZb#a}9Quh&MHCsfS7Nl3~=y6#bvoiJ3 z!K7i0^MyK9Z9x#TYX*UK^4%N$ozu#aZb$IC*D1@&m%`@yw8yJ6vJrR(jm+{-X=*^R z5Ug$HFrw`LL)be;#}-Cgq7~b=lM~yvZQHhSV%s{gZ6_zriEZ1qUT)v+*SGt}?LT{b zRW(M9y=$zsYGJN93xUmd2ROC#2o>cMi%Mt4N^RM5hXA<)g&z1sItSiwV0@+eM^^Mk zz|1?8dpbF;*{?j}3d zs~2AFF1%rJcm1l%&rJIPoPOO?U!t*Hzln8rk)3BZc;^%zhf;-F?5lRk^0!Z@@A=u4g(7t$WJzNwslz7EcSE@ zxbviwn(usPFRtz2iUA$6#(pJ2y;^UCZZkn`7vJ|9n|X3p zXGvGj@=0n36VsyBsB+vE%X^Py9)(M;+Q47wtKQT-{DsK(J&B{58m3Z;-RqyanDV=y zyl8!YpN@k8(C^CS1&Z3HHhEh79c%~@*I=x-+N+PCfK~f5^21XpE*biE>=yUjj&V== z@C%u2*E-Y@j&q8|z-{4G#t}c;*zP$Nz7r3Vvft`*L5*af^2J{ zh|fRy4k7$II~gS5BPihk%gwR%>!;w_GJ?vaqdAOgl9;M1>8p`~oX{+6DU)ktemQ2U zTg5VZOM?Q-eaajMi~>>W`AvxRN`bP{nj3&;Aj|G^4|83t+ZL!M zze}F$GtB(@H*J{fgN0BR&kLX3C^MBC;o@rj`691sO zo9X`~1dLJgwx3f#{oaHr3{j0QH%8ENR{nkZFMSGvgBeO%0vr7|&26n_9+9q<JqkpWG>Zm=oiL^?=Xu_**_D#xXO8EMT<3NDUjJ;suU$#d`%!8Q^@Q*M5(4zy zmdL}pA8B=`AY5J1#JVzK(F|E+GBnG6S~RTwPO66FE^#C6zrLXs-Lo~UIGw|W)vFu! zOcPh$X3O=k)<&GLTAQx4wP)!A`K%_tFhMdFP!s^idtf7L%-tZy zu_PB|(ni|2eScMg?#KZ?Z|&c2L; z@Aav!3q?45%^qnG*rMK5!VkR(v%EAgFpNlzIaB7uj2 ztqiOtCbX;9H{|t%eNt5jWkos_2m202{DwticbKPt2_!th{sQ&q!w83nF$V256#F-W z`p>;=4oaE=*_=XYN~&De@zh07g{z*!o9xh(a^F!c!Ab5PwXzPcuK#6Mds8~W2dmKs zoZ5>v>MJ+T;q`5_e;>@3Vw0b=T;@OlZU~efA_d|r$p0C9GQ3D?!+%N;FdP7Y`2P`n z{SR8)~a%-4GbjQib7EFDJOo=tH58}hw$qv^+Axr+q% z$Jr2_@4COxLuP~%;|t>ZydUF66a#+*h0X^`-)&ct=dfS>rU_+$1j$^#>9fl2Kn;i z(?WtMDU_*{(PS)TPGwY?4vnnPmF-F@(ksj=LRCFk6f2=>$<1IU)>5Ix_r!V~`@&(` z-jSh57I6?t=f$-0tXOMVgf9)@bv_R+p<0XKbld z2-T0rYJlBMkygp-cx*+O%F{V}ZWRVGnT^K=rxG+aR&3JAs~e4ZY_SW~OB0R7{zc#N zQPIVb869x}iCeF;0#9un)DbDn6G;DrfLS6ER!sazlo2#(dxlV^+0A;!h)r4r4Cy3s z_+Z&WeymGQ#MmKP3sahI#=i%30)(a_#!V%MqrY#;W|J_KRQrlVioh=^NkaqSvViQp40bjI|BJ_ zgS}|e^=-QVeT6oBU~R3jHBE=7AGYc+i!?K(cm3lqsV|dPykNsLrX&&46h37PLpuFi zR7C?nTVi6RlGhxa^_=W3q^)Ve38Ao$mTpTwdLAs>@H@CFxI{+%p;hPWLX&9L$yhmBx@*lYWy}I%+G(Gb<81gxbB%fQY^^BS{Q?I+ z(q(kbb>D152+XF0DO7tQq8&I!6eg98mVGP2J>gr*7TKa+#l7Kd%J7U|tb*Bo(#R^C z&|0LM{HQ%dp2ebImNwHNi#*e_OBaQfr$-*;-jk;Wia*ZX!U!nN-O7k4?wUdwC4(ae z(B=FO9WaA_=|K+1cGvHOn_Jp(UPgK@!s! z6v=u1;c^q$_sJrDe4LmJKj*<43g#n?;fGSwdsG(LcvD;Ao#7FONP_44{e3$m)Jwa1 z9T!NJ_Kz;uX?XDo8IG$soQN{cJ$_8NcTaI5xBj4mM#N7G`TTg%lYE6(mk^;44EJ9u zA6j^sx6b=OJQC9T9Hw&?iEPHP!6;v>OHZKKMHKzzDjqs^%(*fmpJK!r5wSCNKe(uQ zS|KB_%Jv)``4W_OEx*rXoRX6Q2qrsRgEN3KLF{wL(voM!{D#2l>Z-lLgpP1kZ%5HzoEX(D@ zpRO=PV3iVPVN31JjisJD+MZE$?E$ANi|D{Srd$`$H+nYa&iVkmea4Qpj+p>O(v!$6 z&~4w5oq??Qf4!xrInXf{1Zf$#2y6R9-ngwJ15X|zv0Q(MS?Gv$T^eTYs~=hd#H_9r zK+Fm86Wz~SC7DsZY66ux!=<|LuIqNCZ9PI7*Jn3x1n~9YdeZGnG_`jItu3bfkB(n1 zIj69gtI*u$@8N>^QpMRNXlxf1`_v@1Aa`p<{LywrG<7l^TxM1|{v;Q8IHO5V9knl+d#@daL;udV5qiU9Y{vA=odr*@R?8K>Pd`Ero zqZq?!DDw#~QOgU#t(jL*+Yx|s9UzCVD=sf`j&I>@pWB`I22;n~@Jn;ynk&dtZyOaGIIdqb=%)nbKuQ-s>#%ys~JLEDjOP$HXN}+)EF!d+U|Cq8Za0^TZ zEUQ7|R|F*ul_ahrSXx=AxCev!LO;EkaYmW2#KQPc`N|hmZzw`IbOrF2suG#c3flqG zI->mzltrwvLeOyy25PFOc81kmiz!lF{x}T!#9=>jR$h3e0@2$Hjb2cUk${#m)FB#+ zb(_297I8|^$B+pA5ZwOv&Nv??_cP%k(MQL__%&1IW=iw`{`BxNM%yHftZ^o!p zIL07k!kMnS6D#waq@;jXY8q!7I9It0P&n9WOU@(2(h_$~^y5uexHF4uM(7p4g>ViZ zVnIvB&>`XwH^TyH+(A<#T=htj75Z3WqAfZ1QTH7-$LP5OuWZEYL6ALgnMfQ*wT)nV zq%ZG1^wX=!8U4d6c_>!<%&b~5hr1pF_``YPX_hk>9isO61xM+CSA(2E@ymzyg_;v9 z=uoP*nvMnyO(m^8J&qyqUodh9Yeq!Xr-glL&1-b~RNAULI_PQ1R$l2WzM(8Rl%=PB z+Vf(_4%g|nmR28m3(F^?Myi&6e3Eau#J=*%ynG<79&G9#XjTb(aqE%%wxvgM+KxLq z^EZ+wJUVvO1#GcA1+}VKYTS6|XW7Zomwe3`!1!g(dV8}7%00N)F^wMCL1s&8_$ZgegUg{;$;~8B@-SAO#9}Lk!f{uAHX0Y2$5;UyNe3c8)uct zqNpt>c(1fRz<-)r4IHTR98GI9>7qi~YBG_cT=)--9^ zVq^VCMJKEZr6K;pgQTRcQ$6ip{6~hVs%9wDj>=ALeWPbei?7nbn6LA@G{x0JtsR-3 zn)ju8j=CZ_roYezUH2b)z0_&iY*jJB`RkJXUusm%4eFrGP9IpOHcK64+#>KPtIEp+ z+s~mAh#;FcnSrRQw13vKWj1Nl2Uj%r?W2|p*fr{7)MV^Hrlp_+`~+1gK)rf_{H8&F zh#0m%Wjc||GUbu$efv9&E06yT(||8?w$-z5hnYU%zx>K;(9IY+kMw#|)9jtTpHu%ywKirV{E-cERqSRuQt;}pUt59T>JE(o~zFfB&vAoC} zyqaHOj#&OP+??bwV5!3%!JaGTfh=5#lreZ?iJ7#LCE9c|*5|JO%ULmhVW4^gpfpQq+VrRnGw}0CNgZZe#veou&^u^vD zn(-zA+g*#TjZ~AlO=PZvyU4f!rv5sU`$Us1*QLvlb2)TzIC>9dZA!FKPscw*YPXzR zb1uEfrgtOMG%TUTNuPw+m1@8(i13UPO`IY5YwnbpHLChW3#hQqq|>1Kr<`z`YNH_v zvR(pK4KrvW6Wx+e+O3PzQ+IX{+#RMJu9p9w?@;O%S@kBW+|!6yhpt1Xb{+bKs7I;Q z@69`ydB=NhJG*yZN)0845JQ(@ON93*wGQ7_N;|EF^Kud;dI?!H9o3&+8rryqq9bw= zbdQ1~9wS->3(AYgUpO><;@Z5tg7Cyh#zCwpyfGvFCiaF2Tx4~oZogyMz6IH3rn}FU z1YIWd+9RfAr;PDov2v-Pgt7RQN3Y+8BG{i2o|3xub+R^^A%d2$Jcck~Zl<9ZVU^vK z6H6V&2xS!5)==7$!eQKxyPR0VkPO`YC^hm~TGj8#O|79`GldqR;inx(0#j&<5sjQWO(VFka6O$2vKgjk(6JRP^PvbK1wR+fki%R~)@m`@j_(J6vkl*g! zIxQouhzHwyn5{_1@cGK=_-65y6Npm0;wR5R)`n1b_@2x!E|_oBkF;1myg#jd;`GU( z#}^g0QnF#czrWh63atGF7gI!Rik@)jBq$W-g(J#py1jH3n*$z#S}mUg>3%__bnRT0 zHtXu6Yq|+S|LYYG{uapD8gleQ;QB^l{-DS{erB8|Fo@tEr1B4j`wGqtFcIEibpb0y z%Z?zETy2E7lX+hV$9)G$*!)g-&$ux6J9Pf91Kye+kE~(dp3MjS>8wEgNPYZw9w{#@ zDg1v+OslRdt*fExLfDLR5bG!r5|Oh0244k-wR7H0EHV&gU{%MNOKhp2fuW%yB_0F4 zTRFvW;YvDH_RE(+IeEyR)HZ*U&5?Odz_TeEW5CZD=QFSEe!6`5_fMff`~pdOL0 z-vbg4)4pI4lz{y8CIA89^^}Cq2Y*lna$X{oApkXP;s&Ns=e|Cm9dR!GIE%iGgTz3v zk61XX_)Kz~g>`X})_Ju7Hq>Ic0c~++Z#|?7dz(ztXAFggY`*kbjseuAv}%YAGcYor zI@ZpPaqyt1+1ub;TU1>xI(j2%9PuvMaI{kAY_u}7aMfE&(9B}mhT2q=>c3~u-TKUZCd9Qq=uPB zXIuW72fB@~d?PiItY=n+uR1dx@DpT{jinvy#3`_1BC&iaC8(ylVz0h}8?O+s8YbN} zRqXvn1I!q4Jz=8papGGYX#<@>ickf1sxU(gviaQ60uyDar$mQ`t3$L}|7Zudoswdd zmYTodjvr=mUum8OlFzy719Wi(awqW+ohxmf&8}pA6r&uDy|p9%&zDJN}S@+{_}hp~k?$ zcY|?@4dg$Q`U@F{(*Xssj5ubg@g*Y6$ZTpV`l~2j@12cUL^rVCh~jMbO@|4fRiOA` zQxGANBw#ipCCMq(_CFB^T7bEs#O(OPDY3j^_ag;ntZbX?L(1BEEaSi7rJ;kz5%OVu zP@j=7*X#3cx8-D+0Hq6~9L+|{n52d&0Hure)^Z%Y;{qBA6 zn)wNJ0Y9Ri4F6rIQ!sQgv^D(^F#12K&{I@py-`$A{p@?^O6KLun^@552rZ$D%I_AJ zq$IQ>N(fkhP-h)8VGRw^gEOE;#Xe#FMH1xMY4jC}4j#{TOS_&=<#784#9ensSd!Dm zxg-sSVl`z0>T2PORC8Td-QLm*E5{xt>QyA3h(Zygf z`ZdJWB6ZRU=>8$36^$PvZo%w+BGy1Yq{1z?nZA`|QK{nU3lxF9o$p9l78|YS_VuBQ z^sUs%{@%4+5j`$Z?l_0MDEHT*Lu=XT0c4Xitpr!8eGGpftIQPTQl(tCtKD|g%FD~< z%&F^=*k^gowLH2;c)fL;W?bPl<|VN@540H%+73_-H}+U_4r%_rX^%Rc2<(ZUpoM-Y zl8QaXiS-|=qc)@9L$sK#rcnMMt!ZkwL_A4v#2x>GVG&hAL8n-(0mq(DkLz6QWIf>G zyeJlo!9SK|x=m~fslHlOa9Ydy*v!iHcPfA`*wIEeQ$FwH40IZ>aM4;hjPUO@n}Pd^FQ6mSX2r=nx=yinn+|ERw1@&Y zA1Ws`^!232n2$-*LLFZz?~fA6p7G1YY#wJHV!#I2W5($V z;r2@o*$y+e{iMUG2L4cY{^nJ}BgLux;LXf%OyxeQ+m@XnM#S2AHaoa<&VRDuvZ;`q zaU|I40ej?^`zGyX%Dv=qPe}yQNlRA~&%HHO;<1i# zRPV^yWwa8$`l9&Eu#WC1gK#W&$G?tm16hBjZ~ci!_SiY8x)vy}Rz|krZPHmQGUFyt zSMLk%CZ4J!_g^;}geREFYC+_dW9nV+l>Ou4fAZe%X8)Y$cc0B`hLUM6w*y3RmFeXi zlMLA??ZAE^cb4xdhx&>|PJ^J%cjmtY8tNzR`33AfZYuZ;)zwPg$_DJgWqUYA5@0?> zqw<6QlDi7sQxE+Vi`)i5Ep@9$nvG?f{Y{4it&ly8<(Gnrr6d{onIxabE3j;G0p*3S z^Z>tetNg$^)ADOgFi{{nPdwU4Lxh2Rm_fJ;t)P@>qzXEH|4nvc*{OQbDMsD-u}lYn zVoKi#t7-Hzb{}sID&^rqK8#WwQ5u@8nQERYphZc#_#c4vBwU_a52!^aj z^n0It`92vY(&twHe~;My1IWq!NSN09Gv8PGDbM~}y*C9XQwKvQQxj#EAKo-uQ#%(@ z1y^SaQxhRW7h{Y69KPi!&B~$tz&aZj(533Z6hV=Y-T;ej!w|*=jQO%M64-=)UkDMh zR&%0qN+vQhG#^@h7|8ivfc%ngr`$yGS&-bBy`QFdpEtb8?>|SD?SIhL++kQ7wgsUv z;A}W;^mW;2ONqC>r;W1)q?hs0DB*HXVCWQcuYP)%kKFZM8QaTZm!?>pY1&h^*|5&k zjZj0zDQ5KzZ`n247Qqx#s)y77vkDV*_kAetiWR-hS1k1~nn3Vm zlc@PUQDB4}F3q}tyIvHRGUwKNONPTOeM)p*8UGGbpMi9xZ<_ro7U*(L>EC3(u!yJT zYkE?^;rf-+n|d1To;l)a$m~@tT=#_$A#UtRr`;BzO9@Il9?IZe1k3f_ zfQt+k!NY`Hdj0cthp>L6ZQ$ zR_Ua|;pA8oq|i0bzMW?kQ5ahue_*%vplW_zpL<0;cZc6~>$^V6Oegex@w>lvSE$$O zZPx0k%Dd;jp8podG*-UMk?k$Nv_+g?F_m8bfsX*a1N{RW20#mttov zT_BW!O@J)`odMkgAOP5am;mxVpFZF|p}yY%q5(qzWC1|{2oQK67LZinzyNds>O43^ zU>cAnkW>&ZKo~GQhzoEBU^9Th0BpxW0D%zr1ndDQ7Jv(-0i^-P0e!>XHydCK7y*t2 z!A0NzavvTfH;uv(DbbaI0KG>r$9dN9QbyC`$7Wz0d&ARux+3> z@_kl)#R21hG>{sA4wME+8?*!K4t8I2z&T(U#12pewgK4&<-ojy-d7#44rm3r0&GCF z!8ow*;P-I}pw{6#)Q-h2Ud=bXBY6UD2zQA31_HzZIDj}{d=MUZ58xZp9m+njKJvc# z0DqudARd?(_8rc?`}7U^^tGrp>F^#{53n1m9oD|{0Cs>q@D^|voX1F>%{B4hF0Zn; z{yX4?sDJ?I3*-g!1`7HOmGj4fn1lJmPn?5$1WsUrdqhs8gL{NdsDs%^ny`qr3Tlzw zhG%*fdq8-u`0dtPY$16;cHlnni$4Qq;sX8v_(A-DKCG;IEqh5G^!w2Hjn`Z9_xu4Z zfzK2>^s+}eJuw320H__17odg`>b!~)>pZT-=&w_9V)Q<6695yCW`K=AYzZv*9{>*_pB39AZ^>6s42jCeYSpr}#mHDvW=$3B|vIM_(BxDJSPYaQ73r~$%eQ^W1 zE#Ew3>BSrZOVTXfL_jGl|6$IIW%d`lEuki62JX;h_EeV0i#o8&ZtKpM5@|rMfYebK z&@VW08HAp4%WkhPn4i6;`~B&u9ow3F21&*OJtTkEs1+!iix)drJwZzs_C>$z$30_( z{EK_W5avaz@^hbDb%wC6Ore>6fC9M8EenZ~Efb0T$5%*N0Sh7_2;wHl{2vPprvvZ% zb;c0M6j^Eop0+u>1wXU#^%^zGNN@$#06IxBtaT?UDNw&M1T^VT=8k zgi6!j%HJ$c+*c&<*p$Lz77R&TS0p}hM{_DqkMpZ~L8eM|WqJV@Fi4*eLKueObYhU` zN?{=jhD5F!5_tcwqc3d*Bux1>=wsak*F+IKbNPVGS!;ewYaty&(*OU)e>px2z3>HJ ziJt&jg#M5FuhPT|Rr()~@;E|x$FT#|mjw8ECK916mru(X|NMq&!Uvk2?SNyJPfz6z zMgPAG`V0C({C_3RY6&k@`>X?&f$R;?dn2&BLr&H+zhWt?3$sx@F>dg8eET3uzVg42 zcKA!a>c60Nl$F0_zHx6t$a{lXABxF)jT-(u){fGhX32h9f8v;Yq2J_`_}fd#pYxx* z#pUq>`GJ1~9_R!0THb-rYy*9R*#Ldyk9F}IoIdc+k~X-=TQXf|+Jb^J`^L?C<;5fH zu=~n$C}#AB2F6#6WeKoWEz#O)T$vWu7V$;6{NcFybLb zm!koT>zGA2L9(aj|MI3;pb0g~u!IG|s2FZvrddLj^$;B1zy?Tg8X`e7d)&iYfLzOx)6Rj@dSAeMW=~S|C%|-JQ;ajOpM@%h>V_Ps z0x2g1ahh%YVUa5zd)_?(CDXWJnNkF=zwkY)rxX@SwnEf}4gkJTwjAwQV&4IDZ^>dI zM)Fn&#Xyh^rqGD!Kv)pvV$4V^&9YB8lV4K1#(~-A{e&pcXhs7DSD;1<*=%*^oM)RE z{c0O5vkhLVH7>JVC|9=muz4Jun$;7QqX0pRu&*%x3@K`fi7+26H@|G-LNo^l38H3z zNqOlokHO@HcnTg2M4dG=DU zd%O+N`IR8kG2xVZxeYTxTILC)TIvbM0A@%26Jzp)0^F_HOvmbtj*)IYdR%tfY9D&C zZSFx=3~Lo(7+XRoM4`k^Ck9-%5NA114X`9K?tt$_U-fCDn^R~gPZv&g56?~!^$l1CJ$O8rB1%1c%2i;8j z^G)~_A3b(Hc{l{bUr2zjvRlT`ca-^;g#cS_5CUtl{N@#rO^O0DGcm zJRt{~7=oRw7r?=m<;@^#j+|HKEy)f=-!uTzXkUHu1rGJA1PI5*Mi9#1VpuK7yv7`)2**+FSduDNcbyeKpIaGcp8M!xjNK67R859o{wj&1)=W{aiSOc&GG z4m@jP-x&CT!e6r*v&3pV%OetGh6%wV0|B5sL?vNFY$@n+5R-9Sa6Kdg4g*lYQ6Fw` zR-xbsU>JD#lzgHJirKn!h*n1L7?j(P%qJSV_O04xt#0jvzX4~EqoWG5uk8SoBbASRox zh+?)-1u+5A7oQ0iASQqUC|S?}Xg~%~vSI+CgQNoBfpK92kXW;T7z)i00nAn{z-s`a zJ|+Qf15N;Zspqd91_6pZn3*55H-M9U$uvU%xXlLZvKV5>u87`C^hpiqnC|h&8Pv=@ zfh7Y`0aODt1AcZ9pe9s915b2J2B2~S3LXPM`UZag9BKi2;4H*IVLrf-QxG(u2fxdQ7CDbSaHJEM1nX`% zibC>$=FVSwio6rf@P1+TguEOG4gwyI3sBTK;ZD#xY#tp?M1=>YKC}SV zfXal(PQ)bYZgdA;k2Y+gJj5$;ndFjcunkcBY$xEzE#Njdo{ik}E^K$e74QZ~I5FBX z6)0-|X5^T4Bn&z*^e(KSUP0D3%j6=t93uJRz0*B(5}x(mjX}-qL?z3;)nu2L(Nb5> z=$(SLXWb7+_uxh5)s=$0s5t{Nlqjj%%I5MS@>#jQ+Scsm5+Way($XrH9o$ps8Y%gr zgpJ1aor1A_U2CDMU|pCAbw9P5t4pge*8)j>e)Ddwfwj5CzkFNTYUMRAu2{%N8AoLE z_`9MBSKpi*yD1(i=|lL)!(Rwt+`@nD*om@`6E!>?S5>=-(z1XA<$3tY7u$F?=Fc0L z|2{D}89T9VGM327$g}7f*>Y?_{F=pyOVilIf+tT-?}HpXpc?R{&8f#WN8(RFxgNQT zefp@B-AXiex+OU39!j2pS8H!lg_0Ux;CfMNT}K` zi=CQzuoyFzoM;}OcA65)UY3Zi_an)UjI4XL16rewWmc%pBtAHgv9d6`=>Pji#_e%f zoK!;8D@d36?Xo*v#Oit|G0~fzY?_dMo|>1Xq$)S7fXi;CD~S!Smw_^^b^OlAvuk5l zl2ge_193bx@!<4kxMb+lorCNLkJL6sa*;BDbo-Dqx1f=wWaMXLm5BthUP+&nwwo~N zighYooKsX-y{+U~F^-?%Hc1hVN_zBwjzuu?N@-c<5}2!#wwn_8n)!z?6=UDyaPP4Q zk7&VJq^_}nu{9n9cN)6I(bWM%!=9GiM%OTyU@&2gz?l-$Y zc&j-cm+JEmk|b#n$Qv~jCX(w560c{GTp1)UFQl;2Sk=^2(_2fqS#MmqgBP$goaWH>Q#vm==&s7t2S#V5!L zl2%$dPH^nBoLrQYlmH>|;C{afDB4g~y5ST%n>fBhW)rn`FTMQXVAR!f?2`<4swWtw zoZ`&Z#$I3kxywM_2bz;s+R&S4e3Sa^w(%F)ECqIE;+XcLVL28GTgR&`+N3P2b7dyR z^0KPpkQD+PK2rAF^7k+oQUVO4c|At7-x=RR{5gY>kKeb)bQ{{^&F&b$t5T((KkOPC~l9WXNC> zdTv;OsB|i<#~;I50shd@Zz2i_qc1XPtFmBB6qsn|(;t#uj5s&fY{V z)cuj^I~IHuf-NB3zgvgOdz8#wk+_w@zK786;GOHG92;0$XS)o-^V4XBt88FZpjgpj ziLe@^Nm+yg^6X8JNno7*p{=hfBKm2A2V~Nz$=`iEDZtwFZo`m6r-G;FI=!MYY*XY3iYPMGZOdeu#}qK zSo8xJ**(^~#5#j{hu9b=TCyxEIrdRU?=Jto!V22WrNF(NRlsm%4x2j`nv7wVD~yw4 zsw!XE%({-9M(NILpnK{POGQDy>6z}?Nfg1+PB0ord5>I{T)eo!(@s@c(^OMg(|Plw z{ZJKd@^Nu8o4>ZFzNEaQrzU}8F-BFkPE5uq37Pp;Yt_}TWwWAiDkm*3{NMx zXVEvMye;qDi_)D3l{)_)Wb88xHuBW{?>~1Ohoi{rl#J6n|8`osGMx9S)h&j}q}XXQ z)yY6daU`wCupW;*S!K~0-;??#wGszUL?XaUo9`>T7V}!J0u*d{Gr|vg%BpS2iOG-F>dn$WcR?Ct@tdu`O<& zWxAKN-dAF;ld3povtE}~FVUH*FZRmj1aFs;^~YPi@c1H**x6WBQYLM4wcQBy!(%36 zAQqIw-N4lMCgP}A@#U5{)(3VvOGz5@So^&*$4xk+J2)uTcRidn2P3oWvW#4BEzt4h zCR{;-!T(CC{=*WojBPdfizCFdwl{h&u7-5<;L3u~`ru~>5A;_O6h-V!^iJKT(m)5o{T|86oP6oNU`t!8O}aPa`v(XXhP zVqjh&6QqS`7~ztvy&Q|M(VP;py9O;MVz zoovsUYMgpzeUkQ9XT3X`&qBl`$NPgz6aBSqZpS#CHw*WDS%#XqGe}#)QK$kat&Mfb zmE>_~=Hb1y6}6#qrOUlm1f{GBLrUe<=IrKdXWZZurQEqctv(u2(5$4Mk9%2jE6D~g ziK@5kWH8u)p<3`d1G5!($B?eSa=iD7+2X&Y8R&yzz4hzwQq0mkSSL9xge)ALzmL|# zY?EDb^Wr3VNeL`L9)VOe$vP8_Ciw|?f90_C6L#pqw=J$6aeKqb`K7jSNiBAcdi0Lxx^c{fv>o72U>+5Q z1&2`fC>SbS_08$A0NJO(8y{%49~-3+90VF%fCEu3?lqy5U6M{}qcE_{F5aeC?;&}x zXvmx@&-7OED5VNqG9kh+j!B_fV+M%|Ud@WU825{=l~=}|kn$lT+2SNe_ahcbliITM z_WUhEJo+G(jQOX)EV=G{MOjA@LF%B$i_+QR6ml2X%@VwO%tDcMTO|d|fwAqLOf2hA9 z*hI;f4SPyfpl*QocoYemf%ezD3+D}{K1mwkji7jiW^Hiuq2jzXXM1^Cd6Pl1s7Pz% zsmEMt*E5Tsnv-S0xpY#xMr14~Nomh2tW@=UgUh)a;a+t1+-f2sWS@(v?db(?Dt<5X z!JUKQn8f0cVszv&5BJ&1T)~kag^Ge4bvk_+Ir>H%;FH=;)nKHPmV`GhZSFZD{Y%2E z9p#T4a`FNq^jvfiZ$sLIDCti^E`5iGH;d(5XNd(g*(ErSHi=miO8dKn8ZC|x&!QW!4 z3~NhCwNQ&~l-@u8B21-qpj@nK%3a>Znb$eerW+t~{_aK(W}EWz3NpRDZgDwm!MaP{ zYABV2hBk;&4msNK;27DlO{VWDqBHv)#mLDoOjC0k_@T8H>4m^^v(e^Q=p5qfx#=9s z8X*%Xc<*eid31wpp>sv(IOj4S_*QqP5Z(E6t2u<3s2Is6f_Y5kTRII}nQvw5{fz5j z=8HP!ZLK;^Te{y2Dkf3XO>Ulr99{++?5)!EXOrjt!gKdrd9rN%t@T*FjT~@bPo{Mt zk8$rvp*^Tz%6Sm+zN!ipFoI`z{ot9eui0WP$Y|x@+}$ZX08Kj9IXe*HadhRxkfxM% zTj4q9&pG1EF2bv6>ES7s@mq!w&X4F0*ppmsn;gHNVySyk>QOZ*@KBmAqORRaO-a=ARYDq^sBn^YWgg zPygn%i%E8to}#I7ZzL5?djSM8nkpN4bA_3msCPAx5t?&dVI+J0VAY$X#G-i zAF5js#kq}Rz<9{G>*e;*+uQ}W#TuLf_JWoIm4(9=Z)2eB1xvJ|R#6qtx;S2vM-w?o z35ECE)bW|LiAJ)kLaRtcl_D00aSm6aE5(%^`xtuua=plQ2~WrT%u95CD4!7u!(qiG ztcZZ5^ggucD7=zdLe>SsVhpTK{Y)V9FhshS z#>%da!fij$oSM39VQXcs-*9b}au%lThd1M?!+K@Ed!$;U3M4U@7Z0(KoAPZgn+7k= zu+^nhsWj}&8~2ZuU|lIl&Y1l=bzqw}&Zd8jhwE^u&CaP`l+d|;C%X{(ht8o$XKfj2Te%S$+Gv78LxMx`ywAHfvSyPG}?m#e&o~rw@Vv-!r6BgaO8N~%U|N+Iy*_5CkjmyrnT>S8!_-Elv`xF`kVM5zoZb_& zfYBy+q|W}aMEnH;n?Cpo*NhLdhIf`Dl${P%TxT9+Pa(ZubLn@bpgdPzBAoroN^N^} zI}|aA%6}|TXyzbamQ#X$wPMUK8x-D#e<&08h`ojX+!FFyadGA{=wZHN3A$RfYq?;g zoA&q^`ixLLcM!)Q)rMbvZDS4XT3vR?k4UwLvGurFZ!VJJTL+?gW%^2(tC#SW^rzo1 zmT6<^(cO6n;j4TY_JV~iDe4}k@Fs!PR&tpy8>17YT)IAk>-bJtMW~0%@c~sG?!#(m zwfh_wrR-FhBaW+ ziG6fITHR6joD)12ukOXEwev-AwcWtoxui2gAD0?9>ktrlc(vyuwwDd_!oM=i|JAeAcze zc9UEYrQ5qfY1Tl}5cE8PFVD0&@W&6=Wc}7;lW7=MLwMwKaiTL=I|{AI*w*Z-e~V<# zuY{EeyyVMT;FiW&JO6k_)1%ZHR0?%i1gEO`JZw$+Inj$f`Dcm&PM;Wc-%) zi=5U{#@p4bcLC}zk4aS)(-G96+!iQmEp2_iooJcvJ2WvDH_d@qGgS6<;{9(0qrD+| z|Aj_l=IQsH(NnMK$KRDkcTZCCZQ+Pn0-DN;u}gY7A2;^zIj z`UQ!i&fn@}A4iHjp~uf(AiU1`*+|j0`KkZsTz{KB}9{&1^(M?o4Y?( z!rP|V@1tCok5T!qr_G*`oU3|yA8CmNrFbubCf{q4Q@L`6$^Va}bMUJ4eY<#WGAG-% zZQGb^O*W?{YqE{W?lif{#>uvuj8mQJ?fZMz+Ut4tI{(0PpZ&S+eX&y?{i8Cu?Lc_h zs?FQ;jMG&h(sTH zpIRTA*#A;yQ*2XYQzla)Q=vjUHb^z775oMyQwCG-zV9J+A;J*;kdH7*@E0hV2rIa1 za4TqPs1*=eP*o6%pZV=-2!Dt{-+M@Vh+iLMh;Im7A5%zFh(_@qSr1qPXIP6^;rb{ArDsKsoX{qHAGP3A9rDpz(>S`ql1bo#7s*HnH$H8j$gaH zdUCR=;h5GTNTV?flG-wzNE}bxEsNv_fd7DDBo+bSQZTke8lX#^#>U*GmlgZy_x}3r z{B7@Otm3P+nHR@QdcoiN%;xzn)6Bkx!{CV->hb6dWKK*x0JsYb^^fGO%OW#py!8iO$>z`Si~_V3jc$2;czlTw-JFh7YBqI~9F`d;bRxr81PK5O_v$2%vb9&fhi ztqjqIDQ`RK3U4!pUYj209MViudzz`;kIa@(5q8nmshPJZ7ClnMBoyc)3$@dg?`Xa%Md6v zNCGi`~`!9Yc14F$Fbo5X=%yYCAxJ2Wf>rWMSN?Tc&fa( zSJ^K&21)cad3T&0Z90iGVaoJBf;AOuhZ0F1#Xy zOnO;z7)m?k7MfL@ixSur=f4Mroxh^~->^L|UG6A1D>ylzNj;@rHP&|9k~WqbaylYK ztYk-XJc`?zaL6tNg>Z=RXY2oPOhc~>mE$gMhG>T5-kB1&4HjcAcDDvTIpu<`tkj9!uJbnDf55;dKC`+ANze#Hquq;$gL#iqNJjP zt;3@Hq`h{H^--4@xpy{(1#83DT55nNy0(sfDHC8ZxR?fBazy2=$A>`h*ZvduU|T=Z zR;SsCxiu897%K32(+c25Wv4L{zGq4_$9&#LN7`8)oRi|v$-A=)3+x%P+rVA9q=%Bh}2(Tsu+AXzQ)e z1KX0eoVM(Es0?+k;1KU*6t3>0OHR5U2(@R#+?bm>fnxY9RrL22`MR}fRi}rV%#2`y zH1*2K^A|xwnn`Mb(g~bHt<$D$?c$`N<2jAXcL1G7wP#MPqk2$VT5oDC z;7l{C_NYQ1;3)|1qR=SCfq<)q6fkKoIebo12{6&IPFmDNS}eNO1olSS8hYz_uPqtD z*o#z_MZ2~+ZCcb03`Y5N_ICAN>K+@MQ}YyU?+!y3y!34OwAw~pwJw_34(fR-6(2`3 za;t?(sRzoDqgkre z@PY(oivTNKZ6ttNS<`RR(xT3Ne#F^Kxhw8VB>(|gVu?bb@6``yLWaJ`MF!W8v}8$n zj;*M30*5yTGtyr^Msy-6=OKSFz;I#eCC)LmlCL?@ut@Z$ z$Q7PEjF-t@a(v*ss&r+ptTRjk@+EM6fY%`n#14)nK!(OiAEI!&XaeTTPqOIq|vCy5Ef7HbA67gz9Sg<;yiG z1NF@o>Y4~#Kz}e?hdEHkHJ@>E>_zOpb?|^j^g^u_!@F$y`6no@89C^#hI`8 z?W=aIrt^0yb&MKXaK@a)Rfo%O(ObFORGGc*tuamSEh{$|(LMaJK>GK) z=*_m2Irf;(Ua1Enx6p-V+x3**Vyv)-$X4y<_m67K=g{pMeGy$N|51_ z;}AewiYo+_et^g6At1^is^6h)w{<Hw#ep4_lop={I3{(^4de})%g%i&VI zBIBKBX+U!Fk5XRuyn#@0?!WR?>#$oNxS*IK`Myqh5@5DJJwOsZYpdauI48S$Ch*y4 zbLQ9Ay#iQ*rYo&#@lCusa6V4_CZo~|Vwb&vnYsUm+6sRY!!q~@SUb>Mf)$2i-Z`x+ zo}lUWWzy1jvAzgHZl#=2LXc2wX&$sC89~B>g8?`!-E>( zk6R-C>T%rzp(?9`^$O12!wcBpkwlEUk|$-4lxS3cyrM{qDsg)hqBw%6$Vs{K- zIJc3$Yhvi#Nc6xjMR1-`)`_i$-@fr*!eo9~`KpGP3AqBV23-No1%(O)133W^38@3| z0wD{T0Ga!R55jHB<-&VCL&8;l7MzWWY+FFN-hyHCkX$!GTbdhIR1a%jKNN00??%UGxmQZVpZ-(&i ztB&P+qu<;!)sFU`h@h@h!EpmM5dW{RyDM*nov$iL?)djiR3*OPmG!5zv?zNrhu zb?<5slF|L9m)) zftagLT*-xxSzfh#leGTf6&U^GJ-Eln9cCfAtE@6s9OECHt>|tLz~28Ii5V$5@MPFi z8JL0ctg1iNBPV3u?#{ash=;&>PBwzbSZ4?h5Ne|gEdWm=dJfd0wBF1(#Fg0(!Oy-$ z*Sk>Lq?jy?1@0n1&vgH!FTAl?x{joUiRHpM_ z?m1XR**LsMTqE7FY-m5sO!~ z(d2Kg9Cdb5x7(nqpMyb51$Sa5ULwf!+PM)~6a!g!ptpJE zTo9z{NR)|>_sJ7h2^DDb>JmVSFgKsEnQW+%M_g@utb8yM(`^;mn;hABbz@ioS2KIm<)2(`sd&m4q?O)) zx#yr$Iw@7&E6g7a~GPk z#JD-kAW~iUs$O|)u6^VlFBv8EmCYAuIR?I9=(o{~Rge7LTMQeoM zYe$E)W{rxoAg5rmUw?Vo=ATfU?mO;Gy_V3N4I zKfhHs5_NsIr^Vo=@`V~?bDCK1mMxz(hhOqz$VApC+gu)dK61D#EA=&cO3mdhP(Bhr z*tYkK^|}l*w649G1Sr7qIXq8albWWdL5vh(AosG&Es!89{)W$d434o8pp$!Oa}$yw z_j(Y473%NLjsZ`;o=fate+D^01L)^FX3I{y`NG}eBNin7g70PWh-ir0o9-e_qrIvz z*P*DlXuqQBkF~vj3Jl>MT|BxtGb00hVj175`PUe{3y0Z2=JRzj)C_`t-$)r0uQz7| zM)+^gxX-~TEi&J7CnsEw2p_Lx}S~Ma1(>(uD)6YyBzH6Mk zl%l^AL{@qXehisG`_#1ftw3dHEbo_D&e{5@eE+H%6o)&!d{l>g;n6TQu`r0TB3}~>m z>=%srJiglX{VUjgPGp*Y4sPV;>c!n=LH+VEqaWhhi6L*8!4>%e$$({2ce?GT)Ldal zfA4vd2z9&b4K&|QE&&Lps1?6C)M(y4b3rlc{PZ84)QSYjGGYa;_V2xSlLZXa)^P$u zzM`Fvef68UUxe-jW0NK!Ac&Hvyln%K zqpRyI?!j?yEbl?>jo3C;-UD*J*XJb%PY3fEv+b3MOJ4Jr)2OF*NFq}EoF zB>G?Duuj1&uFj;e((d(Q-Q{BucVZXjo=OQPZXUtysyufJbPRn~VB|U@(eQWw{n`Rr z2Y$o}w(@*dD{_K(iQyEM{0HiMNiqHXYdfcW8|2m_?i{R>9TJ1pf6u>JI#v+&@~ME5 zeO`EBpQ|4OmIl@fSt1plelNOTDhy{WG) z>qdN?!LQ&wx;jaseV-J0cZh>bDD`bLr;okEipB4@I3mez)*kh7WX)|Q2#A8O*QP8b zie_R*ts6`Ce3VX)t;gbPI!tgRiz02jE3!wNDWVvfE|Kh4chpH;T;j=CUedi#1TC4gOS>@^P%GxMtPZRN__xIyIew(B0dqVKGars_>s<0NO^ zehwpdmA+wYOg+q;#k|R&_5fnP_AL?Fpwh6kuL#Undnqom&5uh=r^f8bAtHzi;%_3-T20X_1h?V3H7i^oUGtW@D*imJvRrp z=hR#cj_MRGbwcw~AYfs+a?e=>rDd+Y$t(8G5UVlt0riH~)MXZN1ox3c&kLi7TOGwv zPxu#e%NmFTeMTdiDGl0+{9N3KU}i2VOz1%&S2JNMwU;q(5%cw?RgT3)R`7v$eYI%d zH8d|N`|Dw>1ERscxf1fw-V{Z^pg&eW0+@Je)hL%BeuCP} z=VKQBSn-p_D>HJ^zU3%wsT>*J#@(|b`X1&o`^x|wyo-0=Y7_tFN2i05T{_zQXsK!i zb}4UEJI03Gy~uK2dA*XCS%cNvmTN;Y(Gdy)9^c7CHVr-BqJWJZ)6c2oLc}-SV^to) z2b&ifkFSHoBffTt_0Bg_bK@VP@zb%>)5C`y78dYcX`5*B*7p%Zj3v|ioxbbU@*gTw zL~G7K{Y>&9yCCsnkp@P2?tGUW;1&M?nU;&Q%kNU(wU!Nqh{cjk<6hjA5mpkn%XHk5|&LV|b(FG{|tp*L9+za^gLW8bJ&(RC~AO6!B z`zN*ygZ}gRDskDGT!j#IVnfFk){&vY-OS_xK?Wn;Lhrc{(|j1m>EfvF96=$m-Gjr{ zgDg*Z@HOq=Xl-{@(CAUZ_otFm$=u(5Q@d7jQDR-x3mc)w^jenQw$$%92)#6hJ0hiG z^notOoA9A~3MEtBw~4|SIlFHv$;*)2MF}~#qMPlvZNi&qe9;8jKRY}6!Pv{A84)TT z^1dZsSSoD~#M?7dFx~=)=`QC`{_^fS5X@%^I2H(xZKE;ZpPW&OAN2cq_!=PrzYcnrGKi0FMVrLh1Mdheg5L*H$m;y;L8N;F?jzl? z^OZ_d%ZWLHUJ#wc4gevb^El4k7$BD%KW^7k9IQ?S_KBJgP{B9eIlK|45YZb%lIl_$ zjEn-QVUW`7NmGb?8X@JNh#ci?bREkjq-_(QpNU2E=+;l z)E`yG@WB1Mtvy>AdPxKH#`VbF$w2IgEcB1L?}o`^0dc}?8eZGPfJ8zs8Bc;Jx|L?# z{??=4C}7lM-q>RlQ13NMcgf81hhDM*9boeqL7t&YNCK**q-3^XJG_W%R3`!AxL-Qd zMoH;TD8zA*I;2L4sZRcel28D1V2v0+;^KxdPG3)*LL*>;vkL!(vf!Q)hmtUWA`#Z; zZ8PMqaJZO2j4;CAW=WDrFj{o4UtxqLW+|m#6vTBA-ql0jm9G{Gw7!_h<@oi1q4|u!8La!O(BPgZ6S6(r7?7wG zm_nQt2dpRsE}-Z!7-ao=&mqo=dyh!&T~_D-^T8lqk8@9u6jWQdjPU*tx z$cykkMG+Jmwau{C77h9rxz0tdsBOln*SIjb$^ML`_L*4rU8oL zo|=rBxV@wm=Cr@r_-Njg!RU#KL)V26>daR?myB>gAI#=!l}=6OQqgoSk-&?5=Xvf?Zwd6X?(jI^o$|Q|0C}@ zfz?KzzZ-4C5#jALXQBWo+KFQ{PCRT88~rM9hjKOMCa{37+l4=4 zmsB_aOS~J$X`FWKkvc1CfIo1mXGQc|kba+iJ8jRW8$azQEAsU{rZ_F4fc)%O?#nd_ ztjg~%9kGR-hyvQPn^HZS(gE3pWx3;^E~vyS`m^?oUj-~D$bYvDXS1fknve3iq~kr& zcap2DWcMaZsxp`a{r#7>%1=ZP3yp(B*F{7pxwTFN(0gH9ja z6fH#~y=qAzD7%VH(J8fBCsi)9`d#X?N5W1@p~Ml5!e3_9SgKrh6`8_cc2$YuRcf_I z>M^#7gW^zKN4%6{yedjdc9n^uxuhmyG?#9@K+Y+3idqBL>OtyAdKFTNptvSUPBV3i zwux*U2a}&|90x<6$VxGa2-^xCi=S#dJDMrJi7Y9d&Vd?;V?|CeQCyQZdP{ds=4P8p zEK|xk-Vx;?tDiXsM~YV{@)mNpesav{|xACdz38$ty(7mknE1#U;FPd}s?@)%+oHWwZwc%PRz3mby; zOvRX7Ut-so|5jqT=jSzNZ@n?aVmz_Xxk|16IFroh&TV6?5a_O-YLrl;n+htvQ24o& zs`PE7E~cqkajDUPrq*UTovb0>2-j+v@(m8V4abEt%>%2{Iibl=%sIYkUCcSLNl@%6 zuBlV(Dxt|=Y*|_#+e0{8%HYaqz+ z4)d|$^By@X+PE^XpzeJ$q{yi17x7?X&^+ZP0n z44u*4G8$J&gRd7DfGpvmp0ZSvRmKb6N1pXzkz~AA3E--?NA8RExLL45domMB5|bTW z_^@0!P|vPZiy}UwTtQH=Q+~b_AGmeji&&|VO{pypFXvtcT_#YeZ~rS@9;uY&l&n(M zfZ9~bAT!8gP#A4i7NAD4pSTYG|r zTW5kM@AKY`;EXGd@aH8uk!^#at4_(Jz$bE6%wAfIS&xAmShOhnzGe_s&rM5W= zhh{i+i?|p9r!R-IIg-zyF9k~`v2>xHbX`$^>$4k*$s$cph_QzEi~bKnkw$7urIx$B zZq=(|e8>->_*|i!%Pp1|Zu1(m$r_n1Q8B5Vv{|M{TAdpIaiL;`(W%OxDO?G&%BVp2s%K{-N>7|@ za+-`>W;m|VuTkgLpjCK(y{aLhX(wt&=wQKs(sVGH=H$r3xmhu=){m-yckw(9#lC_z zKdtQFhK){hW1{|;`9%cFYNi;Mwd^f(`1)sO--maqFx1NzjePT&r077Bo8z|@$)1o| z3$(eVH*==@WUS)9!TdOW;gKZP^)jmt6d=FUZt|;tcdPl?x=wzfz`T9G=W;E`6j3I`0(zO13M7IssMLf z?blNfN~OR9@s?Sxi_ZiKT|&SQI@hDbG&_V@Tm`haUQ{E-rrNbt7G-U zcftDyAH!oGPN{*PhQ{gLITvgo^x;i7R!g~e@F6nZ<9-{Q0l@9W>IQ|a$DXewCWMj_ z!-`6;{%7VHKIT{;kDZK&waP|9g&RWLu|yF&F2Ytc?gCRDU5EapBU z6+HucT?n9=3z3QjJAg=c#~m9)1p8ib@c9NZT=OGR@z;sDV$&r+aWl{-KvCC1Nz={l zA$rLExTIq%PQIj@ooAR0hvEbfnfdOzjO6t?uWs9Je&o~~-Z4q~Mjz6#He-yRx4?Ff zDWvhPY>mIxC_SU))CTmQrOvEC9U|dq@H9)N)$8j$N4&+KAdEjOH3! z)q^tt#mtsj@1|&&flAM@!nGWaU1t{c)f}%{iz~Ve{Qgyc-_<59&;Q28~jMyqgK znNp^>Ko3MY(>lfR@L zTgPoGn*;dmflo@uHddMeL^wtJ+i7i3Io1-6$9S?-y2aGwPh!U8tW{`N%q zMP2z6|E?0>=C`lDlHfk*RC0RStRXq;loXz9Q~7r$zIg?lD;?0gHI1ndm0o*i?=@L!TkMQ#??8P(5gU)ScPAYdm-a!_E;rFntI;5Pd*B z2z`*BJ-@R&kiL^VP<$kv4ZWvC=U3J}7StOb^-6X3_sVpS2Y33_evmu}d<337y#J08 zsopvWR_|W?$o3Q5hGa3Le7B@LA$r^3X##U>AJg}*?9@6o(RBX_M_C(>;XdW&y#^5a zOrQib!S-W=bYN1UrTchiP`LhZBzF85*(}ZaUO0o&rSjuvt?g&-z8X^_8J!_+2=q;$ zCEq?|O?xYgAr;B7oD+Rz*fs4BPN`9R_WA$>pV5@dJG9FO`7=)pzW=mrcRKUPgTl`V zh?6_A&-WOx*Ns%Ka5mR|4~+S9PA05!5KaN)rZ=sz#-~0nV@lSah@nf(6E2c7_A5wr zFGv;KWa3&@^hH9NLZN-NYyEpA6x_-+S(zl?sJhf7frsY1g6!|W9!VS zzA+5!GGxPDRoi9{?B-$VO`yhe`&QZ#d+yNiv=uC=&-A{j>Mpi;GCbYoH31x7qXMw3ESZ)$VoQjWovCY%cvsF{A zGuv0#iB*u)X@;5}Gdr&{$NxsLe$-ubD?oCkl(z3}TZPw{#lQTISKR_B&B^1X9*_8E zjFIT9)DQHg63Ho_N$ra?ct9evAp%O#Vjmz zExf?!8428V7?lVK2g;n?CBLc^`*P$Ed{PKTJBarV2WCNb9%9`NEJ!TVt;bHz&uMdS z0f*MvD9_)!2POU3HifoMcOmn$G9s`lLtIl|Y^#Uvkw>fb8LgdaGh20{gS)vLnZat6 zQOHn>=6sjgPzNyBLudI{`d_|X>CT>4czkaJdFBwM$<$bdoq%#D7WW(h5n=@RYPu;8 zQb_+^OVv-Hw|FchYob0&{RQ^}E;?g6@%v#c0=vUtidnz@BVw!Dt;vXik`bQSuRjj^ z7xw^V+`Ufk7OE+3M|O$H7y`#Lhc*LR8m=_!`Lni|2a(9jOtLZpchCWm4=3!E_Tp2 zjt)NYv!k84Szx_n+?Vy)o^T{~QtjnXeq)_q{G1N_u*^C$VUpb(9=2szH{sL|vu^fc zj`g(nz4*dhK>QoUoYn#M!lU+AUNwq^LkophH&5=S+-aLbiM|%$%+?%DlWObO1+5d} ztMYod(_FcNh?BSc{9`glD?adxle1kek0!%XRhgYZd`laTY<3wj*`gg%8I4nPiV zho<W{IaArR@|8cXd`@~<}fAI-%thcQD@Kx<~w%)z~)Z97)hFv>; zPg=`(cU|*-7j7YaYi=z7d#=sAL$^4+hYQ^Co+k%qT|Py64s8Fn0VOUqgIP~u-*q2~ z-V+}%-e>OB-<==W-wW;$-nVU0pYP?}dU~pb^tP4rtFD+y3$JK-?FvReD{r4o1B2U* z3K%0F{MvO3SPQCHQ(5QGQtM}N$8=9?Z&Cbm0y;^OOZ+;)QCrla<@LV`=3Wn$>9;#y z5N>T=qHnF=u%G?kke_kigq~I3%%$g+>C%H*lYg6(V4pdpvA@KRPfK|(J8M4zoi!il zuGAUs{nJ)opvQ&Y$jjt|zv-7cYoX2+=o&m^q#nNHC`bh>>X-G_64eHm=T-$5LB-*gY1-gpn8!{`g}MGhS#b%J=b4tpcY86t|T z@yoMSJ)+F2DdU-1S4P#ndEhGj@dg$G<9F>_*(GYZWhzmI@jQ#zRfGpuPNVp^^n;Eef2hB)_eK3Ii_wjD+-u$CtEI)at_=8dCCd<|6X9 zPGI7kUH zav8S(gB-r|@0QJZ7Zz~#IrCh}F|8~%jD!j|;O-z<#kBj@G!6UCw12WOGT+Uf6|Bi+ zYC_g>QVhjPbeRsno53#W@Th2_O6WbOC=Y6@naSvc!Ur|@HgjMLVO?s_ct^N_3uVm;+iR0st$-|8FaY)!AdPT)F3YG?sf>uW%2EH{6 z%7;!qbL_RW*dhwWCw_fell?n0zW!9p>Vc+*L&ezCL&XxH)`gcQX|b>)??rzn`~jn# zDB>vEsk$8jUm0Y$dun8AMayTai$(%aBiG__FoE%(u{~^!qbL2cfjyQ@TZm^9H42tD z@VnMG{a9Nu6(!VB`BMdrj{f<#GW;LNBTgi$l)3Dle%7~Nuvn|vkSKH0`14zao}Fr1fE;KCO+M!$*K{(546Px#eW$RDcXh zN<6<3=c7$Id&VJwr(^D1pBH!bO8#(wjsuhBzu~_%BevGnab$u^wpKRy6Dvb9f}IX+hL?@{1d&@$#D<~QJ@_Ojt4_cGHtcY9k3-yYfcn1Y_WW>84{m&0 zU_HSVNQ6V=I?z7gEJV!kfjQ z%<*o?Q3PWmW>-<3XU{l6ey?jkP9EIU{e`>CceapR-*Ba3dlhfZ=^#1R>4GZ#R2>$j zzgMpMgcY!+E@fy9H=#H^HW09mtr7S3H*`G{7Ns(LP)dDG{hQTg2tzw9`|n-?%@j<) zRGGprd2j|RmR<8BR;y{l1jM0yuQxj_=g>x0))7l;qqN;u{K(k^7PBdkbNpEKPG%X^ za`{gox1JU^PWkUyO=6?*l=LV2Bf~Lt{#?c=ScsDfV zRKvp1{+JWyVWW~O6YV+Gg_MUP*a7BPd8ZM(yE6?HTKW|E{Z)!%$y!J9+9SgxsiC#5 zJZ(%qB6RU_3X3N-`e3OSQTxI^$Dl~H=vhzjWoa@VM=Ef*C5f3rqd6LLu#$sead0}7 zbLbFS<&0Z8T*0D9V%@K(NhMpeYR@s39<|N>!lioYj`GCfGM*|ps0Nm+hgY}Wnz!&o zzuzdvXse;wRk#1jSkA~U!adLx8Y=^8p0iQ>(!@Rt+gQ&&DgMZtesK4RT}KRM#iynQ zh9lk0`64>x(uAO4aNow)uFs29no$uNzi|XOtZ_VS1xX@ZvM21YdaiX+v*@_2cbJd4 z$RXE_p{eQ@hh*`*6(w&HO7*m2V*j}?(4bPAB0ooUV%k`LPlT&LreyF9D`tH@pfShL zjjqBQx;!Ayosf;u6n3)u23;oGlfHMLtOsybDY2xnq4-r`2xbxq7kx&GI%%TTsB^v) zdGhyoNSASyrwlZh<4h2|1i>wGsA0WdESBw0Oc?X5GZIXV#kQpQpl(OfYn-K+ucwv$ zPlX3R#mQ@&NQ-YhFHDQ)l4jz@9nQ|n%?v)OpTInvTc(W0cm8DUR#p1Ea&kNK%rfKgmm^euF&y%E^v{-c-ORu@RRmIl`46OGKBQfR z0Iz5}?C%#U=Alo~k>2Q+BN25Os5DE>x)jwOqcTC^K3{^wZ!WlNAZ&_=ya-Vx4`lBK z)TZHNRZ3c{F*}30TRga*rZ{=p9aw02R9iqNhcR;#lrLWDW?pkz8QjGi6PTuvnwwrzqsK>;fbbNb$} z?JDe}JsT=8ZQLbKi?O}Q1mYPe$rD3Ho+b5}ZjA79kI<);N5){<+K!U{u&ybX%Rd{i zo|0*u-_LZ%#j_$5hQc{x*_n0RV1Eb2Gx2TeY)Vl-#h2Pps{9uHj$p~gct(ZS+2T0c zyJ7Lj$T8lRw{tqK$#61qW%Fp@!pt3d-BM)On61FnIa9UKdrJAj;?CrP_RjY)vRyoR zQkQx)Kp8mcUCMMPOg{q_BQOu5hzA9?7{Lc%4?P7pdw1%3)n^=By1gZfA?AhLQve-G z>6OK>F{H4OfTi*nYGP#wQMTCPu)AU%g%uT1T7pmvbmrn}rSIF5mqwS#ipZeXJ90ty z=4L_Xp1Zs@&8^9kV4Bqz6FJYf`qG4VG@#xGtzDU@s=(<7#pXkBO3w>YY41BGeoe1Z z#Cd&Eq%@g@v_yF{k*|za3a-?T8jMy;;vS2X3R*+yq%KB-QR6uo)L7Kp_!BD8=+gsS zWI;yjlnHaI1T1&H?#zkRL7}=Ty)*}grGvHT*7j+0qq=&%#7@PUnN3!nBND6}7p%eZ z4XnMX4G;Dle}#)dVOp;vV|1i;-NF0~fkw2ax|M=gHKIOZ9C%lg*e92fp`s1ZJ(n~p zk9u1XCkio_NAb>Gxi()MLyRb z_A!6txHZ33`Kbh`w|)zdZ`EMZaKhHD+QQYXMvZmQ9vN!W>Ww+q3O3E{9jdjb=qX7b zG_vmm+71pr?m42tV)NI3is$P$kT`(GCT@W5(U4$NVUVMs@U3`iiSxk(gUDzMI zTGSjOT~Lh`t-_7@y-*)(vp_i5d}g#)aHcxsel|07cV@9?a(2ZYUobRrwmrmn);m~z zHnGQ@pAv#g#qFHrvqg>2WdgiTqarrZ#(X|X{&B^k4-!dEBPCmXX4eo9Rd%~+rsfru zy}g}L3<~Pj%Gzc*yz?)u0tZ#XeY9$&d>GsJeXwvJeI#cirj_bQpj5WbezRw6Nm@h5 zD~piuu1uLVIb%Xj>-b_(Dq&W>Ael+K$-E~yTYK2<0TLMGqLnX zKjf*(E~DKq7l{rtP~ag1bL6IibY@> zo-aZmbn@fu2Wue-E+#teF?$VQ_*n*#^*ldrah>GD%%K9Wi#&H1e+;Ow@{kn6HKo}Ak((4ICD3u%&BsNg0px;3rVO3c2j9v<7At8 zmUEZ^Q00&O8f<*&Q(=1xp@BT9gufk{N7Coa25@9n@df7c*JD4~sU{x9zp!1P4V%Uq zT1hGN^&b!Pa=A#;2oJpcAZ~-!3!;vk$v`!b_qyYrxF$`d5AM`|h2jn3N=|eD z9?06D`|=f4zIUJvsLx0JhG0|X?xHWCss%I|BzseE1b*F1sY_-$B^cwrE(M6op5fn@ zHi}d65>f%zOv&?*d4P+iv~BpgrS*S@{@B6SE_xy4|A7*hAOJ&yssBjlsnH_@JI5u> zidCk1W!ZG~H?yY}4oO0(*i+h9z;qRHoS^WVavc1aQlmc2liZK!&%sV#U#UViP*ReQBHAB5U4ZTx~2v%_mKE&i*JU)~W{j*ap zPo&pT2arl7EQDWESux~MaZjO7Zm}AZBB);qp|*Pu^ZI!7k>wU_Y(uEulccwP2;9@7@1Z!e*!LOi zqyn(OQtD2vDjA=SF&x3&GQ1UPd}V|B$X}Dw0bWtQZgc_AeYCzJ^@&GXcU`pJ{{H$I zcG9%owtcy(kD=s?(t#R~XByGeOAsw87mClm)vZ|z7SkTkulQVdiijLMFclG87{80T zVfF{=iJ-1uQbr3w2GtsWk!^&o&#eS*i9mYAJk>O34n{Cu2ee=t7A6Cq%O;>-c@U;Y z2K4oX--mSw^en#v-m<7)1_Qol}C5XCSjMAR|aSatg^dZ%qjAc74;dpy# zo#)CPB>tq_KJ-F2JOfEW5si5N*dbB0!oO!Kai5HDe4kBe=djln8_Xt!jAw_ZvLMlm z)9$mXflG_$F3fI(IKw-aP~2CZom+wEz$a|pAQTJ7mt=YQF3v)8_+2Y5icPID^R#i} zM&Z)UyEa+6MEkFTP4~^r*v8K)Q^zn0PpKqhvidEqz=6Ho`vdi3TK;}jHy8lJ z{{PI+dACo&050}gh;}~}_n&^$R`XHHehQ?VaGgW+gE{yA&2A0Rr+zTU@iEH&C)WRD zibOg+f$=Gp(f_p4AA#id^HYld2?pS@n@seds{YdtW~Dz2vVX=YW{X4x`q7x641L5x zq{SkocMiVf68*5KM*817gYw!9Ccl>C7v(ix(I0$QqRwX10BrhOJdMubA;%54M_5*zS|DZoio9o#IkQlSE zgz3gj?4s-=t~drDJWMlQ7r9bjaMp#^$5*RAbs>lnF87lTd%6t$$*+hfjJDm7su^Y; zwAoPLh!>R0ccrbg3&`N&>5=`;9wfF#`1H##o-`$BSasBBIM6cFRTSS&NREV;ghDgE zAZ2x!b*y=~e#~v3_dt8!`#^c$wdpTNc-0F0*BZ96LNRCgzcckM*VOYj~N>e z6PRm81-k{^I`9^Ax4<^$nxQr_m4t+Z06IW$>dWYfk5yGpK!4uF~EZ!9HvcT)`HLh9CbAa2`5Plc@Mw zmsG-!$4r{wKBXz-i8Y1j@^DX-yjik2WW}#2ZDyr2H$nfJ#v%fbgJ_z72uuREX)=@8 zNt;9tdEBF{2GNAL7-umJx;erwrL5L^NUc^^b*uJy$nrEuR;scYtY8D z8oHWZ$Fg1ngH3CduaR&WG7txSddAHR2_XRq3qLVF=j~PIyy;})$0eq-O;M)xXp zf&C+Q%3UGCruS()kmuPiF;HZeS6o4HHHxcMT!{`O(WV)?=!ag4+ndVC8aF`dql;;g zrug_lbg?irhtMrF3k{24s<|ItC#dl<#w_9WVGBgj8E%0M=nS^NI&}J5U_CmwTi_%* zx0=)N+QB>!udU2?;l)*-73*Dc>V|sH+fiKh#1Fd<|L?_C8F1NI+J*tmbO&P|qMDnCt;qXi8^m#&VaJ9x0pqj@t~7wfL9f0Mi! zPnC^3n2&a<^9n#GUl=>HG}kil9p(x8x7{Oc_i~_n4&td`IVgswi z0T~u2ge+;0X>mhGOD1%;WIPx`MZ>9R1KJrBa|mj<|eSlQWs&b2L?+6 za9J8MandMjtg+RPaUqgLm>DmdeoCA0bHW;B_toPwR#Juj0P5BK_(%5_LoEfZc?|>6DnDxj!E}r!$ z-UnOpE(&A^w;rz2VA?{c;UR@C^={D7Y36rmhaHk*@8s6AMO*U1Essl`&~xa6(14{m zs4O>w&T2Fu>9m23ZEwNesH@>;(Je%5HmA?&OsY?_`KOek zKZ0R8`c2D?l3fh?ZK(`*N!@bh1k_)1`~60>H00LOUr7Mc6%`f^|0E5ob!LVL?gaGT|2=w~THOjfe|1?jqi2%DjkIo^r>hd06QM+mY!zu7~N02;7gd79yum3pMhl(m}=63$!wzfV=6wE!d_aQ<*xJ2YdG` zEtn6Lmdk#*B`( z9=Qv)&#UfO1fQYLOK*IDo*?zm?pQYUMA1{7dg#_mwW((X?a;kXeG4(DA@$Iq-=@?v z6+NA)XB>LEQxBcj=u16A(bJlG=Y?LrEvTmpYfo(^AN1TnKD3cNQSuQ&kInl} zD2th%z%miGvxab51>&)FiitIUH&jOgy$5Q``(U&pzeo+s1yb8`iPX1T zA&sm+T39*K%F2@tRt@QF)sya4iQHzjkbYJh8DMpi!Pazguhm0FSiNMVH9#J-hR9fJ zCYfZ-CQn#%$V_V&(j4c5lwu(b*K+S-&HwYDH9tt}bp1K_v}W@5bp z2kBhB)}*EXbXw(KR(2BmpXTQzbVF#noOVO%ycz#^vu=pB9aBwnmAd*F)>TUEJE&^v z5YtS`;uxlx)J!u8Dryf(O-6k#wL?=Q|79@cI5eo3qGT^!r>sG}bj-n*&`TPZhLx12 zq+YW20^ZsijMhG2vG#?4^$y6f_J^9*fzZG@2pZ$>7S_Sg#ySMLTknP5)}hePI-H^6 zqk1U}+629%C?!uRr8F(dDL zT&QJz2I^a%g|^m((AT<{WhxhVM!IY|DI#Z$4!6T8w$v*YprQdJ3F~M1=gPzSv+KdS z2(ey?Sg%5?S63YC`Ee0mRz&D={aEWNfORR1*CNL25aTFfya6%Zh!}51jJG1j+Y#d( zi1E8f<=reZS~|Q>F-`(-0oI;!0Nj5)0PaTs4$^<@kRjr1_3;Z z03JgCk0XF55WpW1z*7j|&j{dY1n@Tm@Q-o;TwHz=+YAt}86j-5K#t7@wQLTkZ*xLhn;W{@GRgsP3BOd4ewfnF z^%nPY15t7?RX3N;veHhpi@6CH+Ok1w%K@V;4>D}|#TeRU4ArT7xxg=rOYxc_MehoA zCSzSf3ZsKIc}#5fCK<;=h$G#f(|Yby|tmxwt?&&^b$6A7pkvWOjdK_5ft|KxFn^$n3#T-F6Q$ zdk8eM4TILU;ZSHB0ljSx!a&(HSbS=CtkY&~{MUY=WkY7ZQS0KnQA;_;F z$SYBOtU{1iqxx8j>SJ9w>SG1}vLgM^QUK;f$=BBd;M)k`76fn`0w@pDxe@@>@I_@q z7!%@MMTmPV0Ab$yjNA;r+Y5`B@e}*e^Iyj)yqL9b3Y9V_hLsI7*{~yG!&lp|BVxmj zhz&a;w!M&T+lR0oghsZ*(8BgPbhUkhoc#`l*iNvl>XkN_Igo7G@CyHG+4{Lslze-A z`uR81&u39TpF>S|zLb7em8G9o#-+G!{VeO{-i2i=iKT}m<)8~HX=xwfk) z^)(1#rZVj+sAlJ(j$MG3b{%xI8=#lnl%$`7C4hXbJfJs;fmDiE+&g|NK_WZP>&Eqh&PWUmJ; z>VIMCvFl>0y%4naZeXL7h7<`?~=8@UeVn1xmL?#*D?-AbLXt2WUvS|G@(t0k^`WdA4vqQZqVcVe`IUjkhgRTI8T(EEF#n{V?Vy3wt5-c&|O{}*N^dW z{fl5@p6M%qu7R7q03;^osUjl8Zm=npb+9o{6(v6@n^v!15swHu=J~k@4#qqmu}9au zsKmjLw^_){7g2W4W^%e`-UjlELyf|pDT3!?FPc}DbTee>o+_3O?vCAvOQ-%9=?Y?= z{8G|+SjemwOFng~m?X=g5|$QzrR}?sBp)D2K17o2L6Up|)$N}`fqfs6AA(!$ zM_{P^OL)lsHH@==3p4FU;aU4JSZet*8vAM3Wd8+r+0Veo_Fv(s{dYKJ zKM!Z^e-qJuk=X5*iPwIW6{h(Mkr3u-zl zL1RZ{mKPhSuRtE1Z$-UP+MojX4Y8_1nkq9V(-j@Yw0B(XrWMkv!GEWe^=IZJ~T#hq6u>r5@`Os$graWDbs zZrD?po1oMkRWSS2Kyp-vG)E2aI%+|-qX4Qo>Og_xCTQ!Z2OS&@pr@k|R))qf+|dli zIBte%jus4>&UBeqD>k+%Pq>UA3Bzxs)D3wU?jKO;o$=wiBqL@aNqudMtFMj720F#t z9hI&=$Agt@?-~kbBk#ia?>MYp%7^K(YV<=9gk$x|?M% zZD4lX4t7Uxa69^79lZlG9RslT-iZheMv@GJmX6`j$?+g`b3DRO5kU|ygNeAc=45ui z9na57)Ts3P-ZJ*FLq~1a$8_XI@*7pERF(eTJ%?)7Kk(Keyya3C=6GnpS-F(?{8)QL zgXC_EuWSs>nVU%RF<8oDQTE3n?3e(R9TSn@lc1hsGTh>LqWDYM_+Lr{_)Yv~<*P6h z<+o7E%k3m#XAUaUKYO-+AF9y(5B;0Txt_{|NH9vy+sI#0@==t0vVr`)J;y^Z11@3L znj&!3qf1K6F3m=AAz@xH1t1!iMjs{r>>wBMKStF=$tAk+;1<4~UROt?`x#)unqU!r z%gE(AqEpn(TLS%@qC+=%-XbvO(M=<-78r`agkF_XoEjz9=q3on9E+iuV=1(EEQ3PF3&_it;2y^-@QCA880T0ClO3+XYOQ=`zp}x@H=Fi{lzJ1WD%ARy7@o)bQIh{C4#1P!oV= zYT_2N?Jeb~8M2u|ENaST@;m%ag@iMZgxCsXdoILC$Z=(pkW>A?kx*Mt&!~tzl#+O8 za2hBNM>q`$Jml1L`ze`+hN)4Gr@Otzc-S(LhlWye%MFe0F1JH%*-W_ zjm$iX%she2`~jJH5}ElEGV^C-<~d~M8D!?~$jm>GnP-ui=aHEgkeUA=GcO`DFCi;0 z!z{;DSnTBBMW-58IeFON)W9yM4zOCnUZ(+0JMD1A=^z?s8nHTEB+VHjZl{N2IDI7B z=_mQl0IB8-lLBXiG;wBJH?k(QI( zHT;185L9Iso9=pwZ7CMp3s`I~VzI4AQEYos78}pbm82&jpeV7`h=eus#EoQ4%o01^ zQ)O0x&Xow&YoK$kO3KYA{ND0NsK1`vY{T5VgSpv-xp_B5ZayuGg!^JbkS59$23`5~ z(ppY@89c}!LypHRVN110ZhvwT?TA;nQ_UF?#vAGs7C{U4gWgbWi7iGo%t!1j$z0;2|u!(TZ@BKY^zzmOIq^a z+-LlLrEs&9Q4DPI=k4IkQO;6gAR`U?Uunsua^O0i7V&9AQrZXkL#akkNAO8)O&|Lrq(wlTmIdat zO5jeb41u&92&d&kc3L&4kyah*rqzJ@X?37^T3u+JRu4L*)rUT5jg&8fJie4h*S+#` zc^xUUefD`g<0q8LI2L8Lb;yrptzoIGeM%7-`tLTD_#S&CRwJ>w;Jmf;X)P;&2;ON$UlT((ZuvX#=1z?M~>Kb{F(Z8w|tKhQgS%`xLFJx(r?o z|3%<3RM+sclIZd!|5Zx5I7-rG9Ma|SB-Fl+Kl(qXi}Qx)G6m@}73ne^A)0}7c@pU| z8)2G*beW5EnTK>)fOJ`ibXkmac^>KVLYZ{=rcAng8_)QU3SAyYnbZD9bV;Xlk&St8 zoH47BF>fGa-a^K#LpatWV>TfaTaYo^kTJWEG4DaQwD+M`+J`V8?IU;~?Nb<^_E{2R zjv`}fB{K&2@AzX%?r&AbIQ&?q_IR1bK7&kWxfCWPtW!@rfyMMA7}HLIE$tLI($0V{ z?f00;yd#O7$N3W}+37C9&U6lh^yKAJ-^U;QpR?0*BkWAqgF0OTbGi}S=_UxIn<1QT zgY0w%)JS(i-Sjl5pYDd{=^kjE?uAb2KIoGkD3hH(l*!H?;~9TeDW8u2Ni{ z0kY*Ma4n0D9j51lKD{bf(yKu*y(VO(*M{8mI+&@t&@8;6AIjS5B7JBQHb3*HQ?fs!B>Tr8`^P1v^-KKG|2g};H^lx) z$o?tF{;A0RX$bOkWdBTL|5Hemr;+`0kp0gg`{yJ37b5!?A^Vq>$^J8Cvj5k3#uGo~ zzWOMe@2*bG(Dw?d=zozOmgHx#CS06o+9 zAkjXC;pzKeO!|Q&#r#96Px){B?K1K*#30F*gye zpMXpM8THF)Fr}Y?jP&17zx)n)>3=}g^m9-r{V$}=-$yE=!7@*txQLV&`K*kU4A& z3*fJc^|K@tF`}Edu(-GHD(>yi#haOPFQXf4!G?8QmOM3uzHBne3Yx?P%j0l0xDx!^62KcG%A;7Ta?SKClt|P2`-PF#;f$$T!Ji$OW3CFryeDb zG{`d^Zg!&zod#RZ5>=+eimOY1y6(e;{V!KKm|bpgyF3tZWkA^Fhia}6)N_U5W>+?} zbyb3{t{mv)%7c4d)nJ;d4$ODm1WR1?;SE;;kVKci`3vRICI5QpG6?B180j(u>2hxh zy8KfXT`tCjxE{+EMR6yZ0R$5bTyiVa39nLE!UVu|KNivhSV$wWkRHN9dKe376y&%@ zLlxIpsPCEpEnJhJoofmf(hL~lnw4Y%kXFL7H3WDS0=yaleiH#+ivX`ffHxw*n-JhF2=F@y z@Vn&#d`*Dz0Iq&L0PjbD4C11ywf$1QMiA^s!4trG!mSs{RHlmhr01o$Wd zd<+3TjsTxPfPX}QPa(iRA;7;Nz`r8EzahZq5a7Sd16WWAYKX07mhw?wb)dex9<*>bfOhVN(97KnhPYdlOB1~ymPeC=DKRdaCWVM`R}`*0(xgWU znn-0~Y>3N|OcN?VNt*OVn)FS|g;6k-r%h^I4^4(*7KS5DMj%ZdNTE&4Wo5w<7vewC zq(vf4npcP>wM)_D5v0i|EQ!%blQBq>u}G80ktP$7CX;DkoWe6~~x7;fb;FqokU|U>>i!O%b{~g@?jK;8`zK{L4Y|RprIu=D;?a7v z$u?<1S{(60x}`O`*?HRh*M~H*od6>L}NsxJ1}U zo%>f%xqkz#`**Oo{{W}^EM&RQB_)*}PwJSm_raYx$(CgCGXHO%H+Q9yN6G z@X*7ffq@>aV)w^ip*`vmq`8Lgav6eny@s_yt`KxeJ#~d}32r6hnTRkQWupY}s*+G- zy!Mzt>#>x0*b|?36IgF=ZjQ4328B(a2fNC>Xxf_^QYc&0$-f4(ecqBl;~H}72}grv z(Ae{?9L2tqy4}r!H_A0CVyE7h2yHAQEX23^(9o?uG>Xai6EGdcn+~&?o3Kp4lZM%H zfx+Vet0w~j9v|d-0#L&fgl3)yjP_K9NuE5I(q+nrL}~b4Y^5Ka zTO%q$6;X+B6%EIq*T5JzVkmR_79k_f#zgZwQLg`c*U(C^u=rU?T}CBSetdv$&Yf)G582l zC%-Vqlb_VOV-?wR56X5gmeWv3^9;kXx(~8EBa)Kx#Z8p%L_SkHxtnq-Xrgp;vWXH` zy&@(`m;u=|iEFWgy9NI<(W#R{n!P%ET->XK@tHv64mALki`6>1z7(&Jc26H#GJhMPQ7prPj} zXyTcMmFh`o@0kgOo>@qoIndwp3=H=?2M>GZ!x+y381GpK6Ftwv)1DV#zUM{!Qm%ki zo|j>x=M~uISqZy5tKd7&TKL)X7M%C2hl`$VaK*C$u6Z^Qy=OBqd$tgpXFG9uc95{= z9g^eOMe2IqO>G}nyMzT2_VWZkRhQ-1$CYh-Bm{)u|8NqZ%?(Tfcn$#XIS5A2A+UH3 zV-5Knay(yPA$$c5Jl|lg{Ty0&zJoTNDk(piLRQ@VU0`p?FK(U6XMLJBbM1QOL7*Sf%FIp3 zUIu;;G8_=da6w*%Y^YyA;f`5i3)wVxY_DQ^l3!w=iUw-727Z3##7Z8Qn2Dr(Ml1|u?yFi1>UqF;m57ZeAz?{(t+!>9rsGC4I zqd8<}+zhocT0*0Y*3crO4Rp=u2zO+3fx9!hmbZXN$QP=Vhi>QVLH7e>84o7rHAi57Cx+4+YM-bgd5#7;< z?pQ>39HKi3(R~8Zon9`w)rA`6p<8%8=q^Tdmm<0^Ai62WW`&w%p<631#EmZNY?|21 zZ(N~X{;g#JjQz}vR}tXX5a3k^@M;A3O$2x?0vttvHzL5B5a8`FFk>eS$#}24Wt~E8 zp`bi~yIv2#M-bpI5#X;8;BQg@T&FC6>&At+QGgpJ0$jgB0Cy`3;NuAJ_XzNh2=GY+ z_!I(s8Ua3o0RMpi|A_#fM}RLPz*k_17s>_rCZS$=0C&F*fW7!}@;boaO#_!VJq5t^ z%L2GTT!P6%)p1h_B-z>UiSxJg`y8wI#}BEVHE1n_NT z0o)S-z8wMXjR5ySfcqlA{Sn}S2=Ltq@I46dy$JCA2=Idl@WbT-+*D{*9>BL>55O}K z;HMDaISBCF6aY6b3*ejMLj0}>@dOnj%Jqtwf(=gGoBH~&ubqf}%?e@PyEOJ}hidNv z(0dny-TOS|a0z(4%fatm0lD6np|-aO>U&>7{9l7+-qq02y9RoC--3SL^)TGK3C4N1 z!W8e0SP$L9Y=V;ugA-Z^w2zoz8mVAmV*~cW%0B516y2Vn*J|!o# z6k4T7eIQHyPL}#0IrY0R`0j+%2bW6yb4>jUO#Mqt{VPoUYfSwprv6=7sS}}fdx0r=8GcupU70pDbT*`A!~V+guZDyeUp(!of_qa6~U7UPmPZ!l@MV_ z(9YdAZ%NYYyDPWvFM@W-ub)xk>HLJJf;7TgB_c@i2*p)y3Iq{hBk(>mSbbK=@Yx{b zvqPrO4LLp!RQF{-ZJ!q!`h0M!F97{~K^Wu*U%3bq%Peuj_<;rT5H`Ku`S0VgeA1w+ zws_2yk6Y0t?Xx`+=%(|Jz!>Hxd`Wx*KX5ZZi?O=rV9)$K@gmx&xdLK0K4TpBV z2jCvx!!W}4D2(^XJ6S~NP8OM1c`id1I~w6%D^$C9g*uDMU61Z#Z2CY|zjUwH7?l%{rJLbgPZ#R15mEB<8X%~EYd~$P^NLlwZyfS$JOc7Kh`y;1^i79Kz8O%% z_bh@j3+njhKr`Q5Xyuy+ZG8)%lW!q(^(}_md`sY7-;2mKc>>G={8bR?KnclWqg%S9 zuWkD{5(%4jQ|0zRNyV}aG`<~4D0V1YEj?KB>D{Q7K1h1HqtHpACpOU7rnpb$z7Og( z^7$@X&T=S`{5jb!eAEb(hAWt5Hwy(&xU6I+}8t z7&FxUHWCXR6cb${D;RP6BpoTbws#Vb*Efoi7(EghO;0K38KX0D3rmcj`Sya^w+{1DZfN{Q)FvBO$XEg>bmVi~mjil#x zq_aa;>DWID&=3Lt)1kB~^mtYw@gBeh;5kz=O{=ZOp-H9F6Go>M zovx8}y2J*w14XbnQK_#^snm;KlBCohDuTYrs`ib^iCP)&H&(Rj!$nZ5q|(OQ0VT~P zarOI15&hc8&nRQhIy&~OQxwQ?_yKeN1N_WfxtNC0qoI7iVSV`n48A|X?K=+<-(RRa z{)T+tWvn+>;U+&oLqCCA{2cW5^Dx*izz>ER(4oO4lOG?9V64b`%389R|17?d*k0^O{#CQM8C-rI}2wjya8+JG!AJ*4@)6U$t~1X zsPZfww)T%knv4a5e>}MT6CmQB2s!>qknf+4beVxw>q)FyGqGyTf^Pn&kRngR-TpZ+ z#6J(l_@9Ld{^ww_e?Cn0FNG!k7vLrTa(KhP3fB5xf_45^V7vcSc+bBQKJdQ|`}}Xh zasONJyMG=0>E8fX{cjWAzlk{fTS-m-JEXqht@&!fEdI&vJTDpuYS&c7);J=!r|89#v`j(Qr zLM3;Mpl@^IIY^a12hR@puu=E(r65xGz%s1BNM)?~sjMbYRpIN~LPzE%Y`PM_y8$)W z0z7yE2vk4^4Fd+aC18dw0gG~OmHH|)WHWyB0B>#S&4q~2OX#g+Wu%f7`3ysPwg_r9 z2WH{%W|kCvTo_>X@X%uQfUAQ!ZODqsmz1Am}8lfy#`BrP_xIHD|z01*1bg?U{u zg&BeRt-#ArtLkN-Rr0c9QG#A}EQ%YQ!-%MtosNQ<(92AR8p@BP%a2&(NAxt(GSrGn zzQ)F3m-|O@U~yB4b+rTaph}=6)CshO!az6Z73cwX2l~MMf&MIO*ifwFDbZ8u8_R{g zlDrL%A?SUL)(Qh{7FL!|r;-NBr&CEi|QWN=fDybH_zvD|6qWcFu>0gvjtIv-BDuJGCf|Wp%&2j=-y1hA;fOaX%CFuQZU;%Vnft~%peoOK}SM<~>{X4);MiJ>* z553W)=Y0*tD5HU${U9l4F{o$Br>jUGpnCw_&*jssq?^G_isYpJKV$ttO2%zn;7N7MPfAX9XO{1!8!V^5nseuljy19p4b@* z+~g?v2p^dg<)*}TikDARU=NJI2cB2}nWZ0iBFaroh}aqeaT9lg}CFf%i0~m2e z%7`=pmrV>&AH%6S5GUBW#H#^Eb6^pnR^Z5roz@6svk0|#v3*CsJf2VpJ{*H2U zWOE7@aW+Q0m@?wUC^t7D;vkH8C1u1bQEpyB#D;QnV^WFDBb8z*Q6_rRb(V?l+X|M6 zZhZyIME7I`%S1Pzf@Pwsm#R#3kqVZH_EH7QM7zI&Wukqxj51-xz-f!LQ_CnH?S0o- zKH5eVEFZ0-g5{(6rGn+7*;T>v(JV|=KAK4tEFaD76)Yc3jS7~JMwhaDFgwr0l-e^< zu4<8ROa_+;uHbo~Ncc!bQVx~DJ6I&Fmtm7b8B*kMk+4+8NDgJNkYh!{G#L<+0th)# zBs?T@A)T6=KGT!(!J*#3Js`&=xE=c3&FDA`{mWMSxnSm=T% zw=haRD-z6QWW0nl{3(2T5w(xR?!zA_4Yw%DE#AOA&u)Gs17(c?wSpMY8z8_{)?mm@o^**h?QOt4Q!kPpOPQO>@IHlas8JkzB=Sap7bF(55L-mESQePCyCw+vzNd1YNs7&T_8@ZQQ=!SA7RnM=;`(LI7ryg43 z{Y5Oads*+F%Wl`L$opSmSv8b+|En}q^>=v`Q+-j9*RQ12K=pcw*T2R>=cjnR9$&9x zcSlv^^{Z%oQgxJH?})vAwNlYk1u0UHFa?p_O|M7_i)r2D&Xh>ub*0jB2UDcLD9r9g z%Sz#mm`Ztr4w7-R*n5xR|0owK;>IQa9G?914t%~{?D=+4F29KDAZyJuswd($SZ}gh zHD&eZRBoZx+rX`1cU&b3Wo?vutB6yTr3@~{lmY73jz#1v`MpdTTM<0dl&sD41sFBGO4tjb(8oOKk)9Hj7*! zL*S>5z-?wXOXhzIds*uI7YhK#nSX1P>sbVcnSWc9yS)hZF#q-_S6Bqwn14r< z>skbBng5+Ahtz(V`FBRi*Yw~r>faS5M~h%qe05n7Oo%TbVh;E20=Q3Z7!<)E_RM=x zu2vD;hJM;T+{o>Yav4R?CjR^VC}*J?mc_OaDS|4@|3Q@dun0oTzbDFlR3wjRl{iE; z-sw_vbf<;D!{pY$SaMrn0=XkFkqiw?A`b>8lktHmz&vhV;2CaF;8|{K;5qKyz2{I@OZEdex3V zRP}yfgX*WiM%C|uw^i2yo76&Jv$|4Xi@IuHtGaVwo4Q9}yLwb$r+P}@UGZ_)EwO{4G=s zTonoe*Mw$45LyR`&?CqReS<1tSWqpD4D!OHpdic$YJ`PBt?)unC#(+Yg>^wu_%J95 z`+^4HWY8%58Z-%4f@Y06Xwle$c8x#i)MN(JG?jv0P1T@JQ$Og}Gz$haJ%S-k-(XlX zEEv&@3}$Mk2D3D?gV~zZ!92~|!77^V!K#{_!P=S+g9Vyn!Md7L!JD*(U_-4v*hrfj zY^tpjY_4q>yjj~M*iPFr*k0Q$*g@Mn*in0Lu#@(IU}x=&U{~#P!S34UgFUp%g8j5b z!8^3kV1Mn_-~jE%!GYQX!8^65gM+ny2Zv~{1n<>BaD+}1d_d<6KB)5sN9yu|59w+K zAJ(-Aj?#4tj@I=Gj?wiEPSgzwPSTAGPS%YMPSMQ>KB1cvoT_^@I77ESI8(PdI7_!J zI8XOp@EP5~;Iq1~g3syB1n29{1sCYW;9`ARaEaa-_nl@uG3ElZqiQ+Zq`2&+^T;exLv;@xKsaT@Ll~|!T0ssgCFX5 z20zw+82m(kD7aVub?{UD@4@=#)LJ?mYAbya>LC3X>MZ>fx>Y(G>L#5J^^~rLZa0w79R_`9 zfWZ*D+mIF-Z19HeF$6-x=)ekh2A;h{Zso03YOT%3M~)ODU7;Tvo+u7hE5Sspg#R4) zXXkJHQSm=KYjxm1tA}nzmk?30HilB~B)r36w`Mq83HznQ->lUnXvjm%w7WEF3>8jVJ)+eHgG120w=Ud7ly zk7zQXV@(>8y+h~^v6FIDY<6t`J1JLQR6*Wlb2T~20toAU8A_YKNYHMxklY6o0o2 zJqhhXv!G{aHuMcW1^q*Fl`T5hLAm0H@?OqqtqIUUc!Jf*5*B4VkADa0<@u* zONz5$2$7SOxXNI%paep;g$NbO2XclF0YQMNZsZ>XYK# zrD~<#UF!Y{?Jl+VzwRy-&Hz5_2VFP__HYQ?;V^i^*_hADP$irTjl$KSeYge`hHF93 zZ~^oS*M;HX1~4Yv_+NLI!b&wXWkHWFQPAPeAcPA`RH@jb!<8yk8+$aL#(G4bM!9iC z5W%2*v7miX?z1AW_;+>yc@^?K5)xP~03$Hs(TMRo8RSi`F!Bm6pq!f!xkcr8>8uY=m*^{Dcq zs1i2AE#a-uI=llO48IQ#hd+Q(;g8_)@Fy@myccGN_rbH_{je;25Q@TwU{&}qMDh2Q z@aM2S`~~a|e+8e0zlI~>qi{U@9h?dugVW(3;C%Q;xE4M|gz!(q5&oHEgnuNV@EMX7 z{*6=)|3wPI|Bxo(OXTM8Rnjg3q+`TJZj0DSzlehjh`7kmh=)8H$spq*UNRvPATuK& zGA|M)D3{%|`bZ z4`Z|89}wJnn=k3;I^jWKq+&u=1?wxeTwr{xzOqJ>Hr8m;sS5P5Mw5;;n#2S`>5xz^ z?aNq?91=E~itD+$Kra)@p)b*PDyFES3k*~j7!+ObAUuq+JPf0mD;IM!FrzxT8MKjB zV2reev`8CpN7_Q=NPDOm=>QEQouGZB5IW)SZjo+qd!z^49q9?fBDcZ)k=`&a(ucu# zGazz#U`S|T5&39=cr%OQMSB$5l5wyQQmB}RgohQa*AUeut^Q`uLTpN@R8jI`4zhXX znq-X@84l{mgP@O$1XJYU*mkh`q?bM-JSv~S&YhM|U?<~q-v?f`D)$}k^M&wIE*lE7 zVI7&i0CX1B$s*v*65geA06b5lO{rBkoKdJ8>>bpRF&%`p)E|xSMT2vC;N_~r{ZyWV3q`nW>`wmm@ zM0{3FJ#WyvSEY z$3mP4LSzaUB2&R0nE{c=OvsJQg8ax+P%H8@)QQZ6Mv-~YB=Rh@j64TzA`75%WFg!d zS&a029{NOu}8ijp2(NP7x|iGM!q4HBS%TK z$akbhpqAj2YO$^DVP z$s>^qWOU@RVwjaBxSJBt>a;ri$1Zxk{3rj=qMrt!P8t>8I(E9!?v#z6+U-QW4=<}4 zQNz1;mMcqWNZ}+EDwtn$W$UcmV(Y9_#!sv3pg{a;6*o_X@{zr4#k*W zeU<7}Y)DwQxHgvV%40S! z2h}7Fr94%lS(oWWNwBk*nFW^2O5o1Sfgt*`GwUd)3#&C(Kuw4pRXHLvMi`sgKKttu zEwjv?_}<%-WF8lPwv>JLHzl9$54y~O$xp{mmTImn8yWK-mW_~RH@s}*+ahX~9a}as zJ#K8=mcD5{eUn{TK(d7G|1x_);U4jwjmNZnxH;q#s zqK6YcP?i`o$`GSjsZ}UPl~pKH)l7`it5A+6tU~#=m`2PTGxHwcGw%g!<}k>}ybnT| z!yz;CA;`&m7^-JJ0<|+Ag@&1<;MUC1&@Xcg49Xk}gEPm&u*?ZCDsvJ{&YS|XGpEAJ z%oz~PoC!NJXTwLC&%%++MQ|+hdH5xBDV)oEfk5UX~nnhM8+g%glA8 zOXfz>Cvz*gJ99gEAafTPo%tc7Z@SW6p{r7=igwX%6C>0~w)Yw@JgziBIv}y=ei$#r zOz2YV4|G@3{y-J5ePz!Fk_=$Y8m~g3D0i$#-iR*c&Ew_n7W53vM`7o~^UO`yEhuv@ zXfyYLA@egVlKl|KJP5g&hoDC0VQ7~5IZV$y3Ue}#!LrQbDRv9Wi|q=uHF>unSIO`c zy9I46yB9Pej&dbbB`72;rR!06Re|88eIaJI%*@N9qUd;3u-;K;ZLC4u>4OtF$#iE&ySu|Uc z0#22bePvJ_T@!9Xf&~dI?!n#NLs(?-#a)BDJA|MM!4}uRLSS)s3m#muxDzB;aJS3* z-Cy_Tt(xlTIWu+6R6kE2nL5)gpleQ!#(YkS_%$tc#D=~9 z`E-&^@r$+|sZAFBr(L!;9uquL&ukc&!?oSgdf3EiDJZIzzNVnmDxW`}6Db)9cy+tJ zQn8uK_c)sy20p>&5914Oe$*}$->ksLB)<1peb0xbnz8hHNV4MHl(S7*S%#)-A%E4I z$y3+%1pbhKsbhdkLg5G*O{Y(qq%NO2&-s~=y%tjt|C=I z-i)*3z2NUOj~nSvQTThiMGBHlqYt|)Hh1x+cLh)OcOGqtjOu)nX9b2sZ({0-LKy62 zAx58anN+W0m9D4?46mWJlCiZDiq!rynzcIYsYdYcboZKvup#9}oX%9QsW9>hKcCjZ zt&tjOhix62MV8BtQw#gC}H%Q z^z_G&uq*$5dIv#IeWv*t#h>9v8_ABy8jVDB1Qz<-ruKdRJG_h09T+WlG% zgZ-+EL*swV-G;Sg<^5%GAt%q(%bG!xGKbk*l-pB&p7`D7>oX-|>sewoMy-g22WbTk z6qZM##t`#~D^WZZFAWtNS$sZF7V|IUxi|f-kI#0Z?{An&8)7A`trd}|k#+5m(An#F z+xFV@nAHm*__#mPCSz!#;o6v|AwMf|*eIOa7XHxJ@vV>Fa~>pLqHs_3r@l>OZmoCTvdp z*+K@b$+9}%vT6nrRYAIp0(cXo)z-?Ai*z67V&D<4UYg{FAwE}-RHS=!jJP4Zg} zCzrD(Y^W$oto16T$hAy$cp?K@_6$vbbLUQLHwAEb$}O_YFB`06(VvGp{#K52w7Nc9 zTP_lgE|T{LxP_I`T_-O`?8fSBeA8GQmYgWp+BiA?AxMxAYOvDM>Dz7>@M#ni9{-oQ zNG(m)=W9v`^JXD#k6DIIOUPn-w_6e}ivLqYK4;Q^Hbd-@{OEEBX@)46(f$3t66c$@eiZ#GaLiH#$`liXiCV$k5;*O?gURVp6f8Ata0(2s~V>HzDwer zFl}XXDPuDWA&9xR@Yv&s?s{_K=0qK-Os(FY**^{A2HvjDwC^9=+u!nUS=!K4 zeN1f!RBUVgWs;1{J=4cbGU*fY6=xVCZ#5c@oQPGafIV@TY z4$4_v3qLv|n`b}nroLql=s8jJrRq#uLl@XQvgZEQW7BQkoVdYVhi3J-)cH&M4yqVw zno@=Bo_14vMmzrNPMah{$#;7qK!G+GsqBFnussoVDr3uDD=V*e)g0)0vR50~$`t{4 znyj8yuQ3T!E;Yy8zthjoNQ`N;;{H7z;MTen@MbS|Jw~obuOEOSYCB6)bzA6I%xzFJ zr^8=u^T+%vuSCNyoiRM0mY!ahvf_vBcdF}H(eJWCoz=Knd+qh&WGM^g$}>01H_P>D zw2rowbffVo3xdlsxdW%;$61E{q~*U0MIYg2a;dIyY!S}Az4__06XGpeC}t5A+t&&) z2n3B6vb&BYiHB6o>@!@KW--kur)Goji(FL)wCQmMb}#kATVB5MjvR-#ReCIDzaABG zh9v*Ah#KK z87VRVAN`CQksM!;`+z#Vjc3E~jNTORF6b7MBWWVPE#UQ|At9#g0{8ItPkbGMQ8%rA z@k$_@8@)wJnMkhp%uj|iyf(vz(-u|&IYZl<{+U;UMtjZcc66o9nNgZL8dH-qN_?(E zn>=YOB5h*k*{lXiuG=wkM#!6>G#xhg+kX8ydh?{R7N4=1Plv7z`1e~Hn+avHB`a-- zE+Mft=VLtgcs(}US;0S%J@}~TA|0>~OSenCUh{L*HaS4of3+zxVoHQI#-7_mwSVmW zGRPfVk!~+xYXVTpkNqm`ujMPF@J~n5Gby>YvpmE};Fn>}Cvy(V89JOgPZ!;S2$eE! z%23gYN+UOY<{q8G{l|UL3eO{zC595&+r3d)SQ+YJWv;wecxPYT@{?xx?*U|0d;5Ru zwiG{#D;BDPj3TH0G=bbAzI(k=6^$yc5DJW%>4cRZovU#%?*D>zlNYVZqtcsaPeruw zGzWP?i0#Ww#;6YY4mivo%!%K`nm9X9Sv`DPU+k+E{ApNV<{2vkwI{c0t(1|T^R(F{ zeV=9zI5SED|ILg}t+cf{$PB@*G*CQm=t(dLY(3Pj!n#WHK^j|R=-zQ7D46~w8pr7x4 zR?c=%OEN-MohgnHqHPy=;I^|^eyG1JE85!TU(7h)TGqY8JnBkf7cQV{qEA{n2 zudrGBMPm)dU<;S=UFW9abPOJ76!KYkA6h4dsqx9$S7@u=Pa`eg(UiMEP+85fiJLJ8 zzEi)0yps@9Wv|GdxbL#G{0qr!Iiko+q5Y36hTha(wSXF~0)wfC%<7h6%0?s3&cgkT3V&w`10!*JGFO96pNCN;+P!`#- z4axaWXA=PVa7}Q(UZ9})F@R44$@^NH`wFG;;ZpwGNaYXTz-!vv(f|fZKgls7@}0*? zr`)mZgcH{S9xFB%e^N_J*F_)%@ev&x%hx^pn(CfxUpxCk&vABO|AfU;uNY)WTk#tI z2en%YX1y9|e(W^yQL@qw4-X0xi!6(iVVRFh2Q)M*Sxiae%(YGZ%RK>At|mu!oq}nz z#%$6-^EfOH9)wNuDJ;V|Xfoi@R)W@-95cPjD+A0@oe3JSjlD={emMW3dBDS`s;r_L z@l~@?xK1N!f-{tr|8|*&Peoax4bygK{GD@8>Y%a#z}NrhuYo@mUlQ$+e;@tXaiJan zToYF@|0ohZ`r##D-%NnzI6eZeFU}W*wN681|9!g~CXm-@<&iv$`}6}k{|_E$-+A2R@>5#Oi< zHGr3d4HNmNCTu}EYUh$D>_JPgcZ*b1FiI0BqCCZ!`j(*zt!?>-j z|5rfY2AiEPjZpt1276)nzr65&FA^61Plj<@!mvOrjAq;Hn>uB;?zZdj2}s}0cJBcD zHEVV_x!qSHhu@(Ly7u_^vXKOJ2vo}VMSVW29=@vWiGN77W;m#Jz^?3$Mx zdJp-n_qkicpvgLg9tDZ1U^Ws83ak-SOn$1rEUZI=U!}Pvx(t*D8bmblK)++=L`KDFm?=qBud|bHyoCh@o?t~^zxk1I^T|$Y%_s1Josu3kf*CKE<2r*OcyZGtCV6N#Rl=M1eLn(}scpQj{g=tNb`|d?>yvMXQkFfr_p%(G^UnTzuo z+S6*T7_`eB8gnE1d-!|Fkn2MSwQxw+T#+elC@wRT6&Dlo8uv>&V*rY{dNo99cWd#% zG0iZti#=)ZWG*e>O|UzZ@k|Gl+qcFr^yhZzgD+C>0r4Che5Yq+3rWylHJuM3xBH8w zn=B41JL~+LAMl}4U4n3q>3dY?u(kP@vlim=0M-bWwHk@*GU6ZPmSe|-%__q53{1Oy zbldICAOiDNJ6v9^tn`Y-enWm^HqEjq(HXl)jEIE7}?Hp1Ea1R8$K=Qk3zAp|y+FL_Q=7meF1 zya=h_X)(QaM5h^xv_d^bM|H5W>eC6kx`kLtgOdqT5uS~R>BWM-@)^XcBZ6Fd{EJNd z|47lYJTStP+sX{aL}t8-xjnKzizx_3cxPK9%3?;f-PXl7viy;a>2ChI3OSUSHr#D4 zwaMfnA>4u@lKW>1D^X>4B5=hq8SSC;?P(5ip2|D zkvy}HH@7P=`6Zt6*YJH!u_Bd0(gD4yah|af(&PN$ka3oP<7#^=Nj!~w zZnqNdH9guV=fi3v-|4@9OHGY(X0Z@zOQ;8GmtR$Hpl`&*=dCGfvh`*eKpcZy2f%$p zp_yBF*{ZSro|ju$pv3~oc_>yAovasfZk=w7Ot@adST63RlkSW^PSt7*@KPc-ulew; z#aGqW=a_SzSYm~VvD+)Z)ZR?k<(lbfJRu@5+7GS>{HT^35ZxH9p8foNzj-b8LSV~sXUUCDd5ubo)x#?uBX7b8@}=h=G5{_3!}FH+Y}*X2Ie$34)$5Lw_QD@b~R~m zj`dkk>?s&ux3rFs>G)-t6*<_El-422=Ja`ya05)WYxx}w(mHmf)#sdX6(MId4rl!Y z>$F-TJ}upFr))L(jKDIps83^u04}=P4z@F|zO1q2k!O?MnllMN${lmu z^=Lk7Y|~dB9y^5!N@L8(&-fSgsm$9$bs4A18TYjF%ir@_?==XYzUL?2yYqPlBd6Wl z<2QFnS$msS*6s|@hU~-qHjx{v6y#nvr3QL-uIO(hSy;4Hc(hfAg`{NGXPo9!AW=}Z z_nTttO|ePRu0Gn&`_E-@ZYG?}Rjve276nJh1ntpa-zsjoe+!_db8Dz&ectZuwXVIK z$2oQl>krxscH6xt^4#4u`*)!kI+hf+pNn7US6Yx*jFRbR*S%d5i==AgafRrDi<+=| z@5V*{3usu*5$#!NsT*Zmkcy;39Rg%eT~8 zXL~mRgJlllxuwpH@Mx-X#g}M%r2(5 zhZypP_1@1q4?5M|gt|kP5nkG5h5o1RpP<%rI&mLXacPy>wsJ$vNBJe<1V+Q=K&Is& z>V+$^E5Xnj3$890f+6~rKs<@*FIh?Yko@U#pX{(EQ?Bi=>(P&j6H4_vey9@_e>YpO z0>#|9e(@5?05g%3vEMM4%oyw%ct=l3&+D1+;|iUI=Xo{TYn+eX@`Rngh0!i;4Q#=wpUcn4%L4gLu6!vdq?dZK}2 zqC}G6v@}J(!xX@4O~E+Qh`6b|RUm>Hn4^HO1?EU0vLGTc@FsvK3V0XClM=j(=lL3Z z92J#$D+s4T0ZZ-(Sm;LL?(A;Ns?V;65+==9)r!zrh`cSfK%PEW%y#wlteBwDa~;5) z)u8dLy*oVLl)n$>F8zq+c>57!qdvxL!Vd|grwa3%1$_R@9-7%ezFJN|X9V#wJkD-- zw^Exc{ansZXB4xc$C+Lq`zCb1FYWi@uFfl!dyEsgtN4)svR9N(&!|qiDA}KpM(EXd z)mJ&6Umpvcb;_kz`TGiKcNx^%?W!r#IGN%44E}N zPB6kSsy)b4^)kX7u8f2o)(0Cd2UtCed2K3lCRRp$YG2T+wzj5a7Db(@b5BgndC%YW zYSn>?W9+JceNNP}>Eqm?_TRKX=7`Tt1J#FKxPA5&n(Zd@UEjsb2 zt9WbvnVScOLN1jVW}D<&-yb!v3g1(Bj7UU1Ekw%SaYR@Ln@(GWrIrtPSf-?uJvRiC zNlzG)#9DV1Sa%g$$4}Ntz8q6^lE3S^rt7*AuNnQWgv9;7<~}Cnii1{paep6pr}$m@ z-zO5ouD&7hGrn%jwv!(P0TomL)9&hdTbgn~D$4bvCE@=;qCsTjwqKyC!h*70n9sy0 zPP6|$1@>g~%p5^~pf#1Z1K^K`-vZe`l*YrufgNFR_NaZ@{U1O_X+$H?Q4WFq-2C}* z;YkrQaFLaCa`o+z^knDTBe}`fZz<#_yWg_Y{C)KmoAIyw*EpKLHecgn{{A*$l@TZX zy}7e*qvp)8uLK*X*=GmlC?l4lMAG2r5Roi+6W*l?Y*hx)2Jth&?;mr%vfu`GFpwg) zfq~I*)~Gu^@OSF{I-rp#0+qc<6>i4KL^ z5|htSN_X2K-?E$Xb`HY@cO9Xfq5rv;JKBods`PXAHR$ej#BKn24R!I8k@Uaj$9Uqq zMpeGf$B@p)#Lh=Z=VM0aV@jvE!Ww0Pb9~Z`&fS&j-4%YIe`cq+^yWEkV3tvdbNrHO z-)vK0!HJ_2;IL&#epp%Ra(VyPuL^YjIdo?y$NKS#nEx8higs$jnv`s!j&}RaE!N}; zT(f%4ael7<{w?46US?xy8EM|FLw@vMG0WwV?R~}z((xz_RN#9&&sShnfF~C?633GX9Eta$$>Dlpf(HSf z`cG!09%zsv;cGD5Xiue9Jo8gj|hBBz25=sh=;$I zy|8op0pGQV7U3dA6#sABz`4|eRWj_m1C10Bp8uh637m;4#q*>E3(AD}Q5SV6g~Fr) zli>bQcZA?;z@;PXALIUO7$wdA5-{*PoCdTYTqzT#` zt5iJTf>`4zE|D~1V=7NV5ux>; zU3a5eQ{fYMm&mY6#(jO*K9HTk4jn9rd$}D2H(-^C_11(???>6FT?0I+z-tWqK`_b> z`% zB+kx%Px5q8>$`VI2hn;AIe$VF0Uc#Eb%0gc`U~E4{q+Zy9(?dI$l_NxJ7h5$UIAH* zfFDII=KiNa;Awab7~rZ8cGtnHmz(llg)gtB#0Qs-(gz~)ffTX`Tp$GqF$JVhe9=1M z;4co21ZD(W4n!ewl;bzF7RbJkS~gT9{-w`o{qkRDjS4=d+g|~8q`|#$E?>hWfQU%Q z9U7QO1~^uQ-%!*`B8_l;F|OQ8ukpg%UC130*o1B$<;AXnA#i%&iV`9%>W&9&63evi zo&uY7L&Q<5WjTzcic;NSdbK=>V?nR%ytxV zE5tD4mkHD{P+SEe8RhpC&Is{~hFeGZ#lab;@?ZT`H@EJ?RN2ozUB zypOsQ26xfz>i{1!;m@&AckVynwY>z=2(khxaVdl(#19HDj`E9uTSNRP**iY$lX#pc z{M~HGkDrT^GDeMV*PfAR4geja zUz~kC1yYKmMPHf)U%&+$=tS>(`ItxfY4H7L(9{>U`jLP|aT;jBqW`h=MI!_I<6J7h zuITn>UY^%{>i$a0`o#`2%+f1v6%b82Y+IKKThz{zVJ=;=6|`!@K2u2yxYGKO^qCDa zCwa8K_h4Wn*gleDz_fF9s=k+a(Tr`n{f|xL!OLMA2|4j+%&+j~5%Dc9Nb^Ry^K~Bh z_>XEQCw6L8IQ=juhGf+@ecOmQ0QnaowAx!cTfW5VZSQAPEDMZrpo_u$L-vnUbfxjV z>eTUxJ>3v(%X4?XY}bK9xgEM368dS)AtEBXtg{95(FIX&;=$*m!<^SkY+qOIg`n** zQ$O$D^0X`F`K5Iq1il;VP%Y@VCfT>Z^7EgY=9sWRyN>f7Kp(|+*lkw}wQJhfCpS--69N*jEq$_c2L9PwtpyVd_KB22tvA3xO@ zmwtE}*8Sf?uwxh5fL_>aVnN zTf;?5(TbY#p1X4VZ?jT{8}ol`q?`zWZ5Y>gzkghD&r8L*ua_Kt*foOrtHAtAC7C&z zV;rSBSpVVi0*3I%8S+9SY%srQN#^^K%=nT_RhzUIJa!WmnNGb+Zv~@|4a_qNgMPTi zO$&8R2@Tq0|KS@)C*7rsbcC(p)@6FR#a+vV{pVeoshyeDD2vk1!=6H$ zXlFU8!z4rnw~~7JUNwQ$hni~K>33wb9o5XqJxW_dt?QhcQ;n0MD&f9=wbJ8*!jbD$ zG%#7)-xgpPn7WxMjxssO9MnS?Km-r0AUiM2Buz8bd5o%0>SmmLOzos3;T`#eSK&?7 zl9@!dy-*snN z=-ejzmT&wM=`J?uE(hr@CF!mN>8=^+E-vXVnADm&_WW&ZUD$x0!XLH*S8ZTQVS7#0 z(kR3dI-OA{zyl)S1*LF-9Ic>!86Z21B!o6Y$y|D&7dPnWr6_cEVU(^R9%Lt(gb-Cy zN43fEE`Tpha&-n%gT`Vlp?49bx13t%>{{m(TJB+`w~3{<8Kt)=rMI!A!csF2ptkHn zyEwJ~(L8-0)#?`6>b@fJKp;4&u>Dz~-`N;5DR~XOt&0%)&@lDW1eN5;Pwlbf5J7hJ8A=+I{$7TM+QATy)d76hwAIpQ-1m(RRqb?M*TS4 z2CBKy1`T556Nv$bj&uL=oLI$R6v&~6&ElGC?NUbqq z>*59$RQ?k6I9BpO-uu;d(?%kPnI27X zLdvajas5EH09Wp{gl!O zZKwZ;Q2s9L7onUfWb{Bx6*79-LKxU*z^X~9d-5}d+pQPL3>A}8ACq!t6DvWio_i$9 ze%f-h%KASP%lP+%DU|taW8$M}xK@$gRe6~5*O$;4*ikx=SeiV9{^-^+i47RO> z_S3QyzL}ck1s{_XJZzH~9A|5ElZ>ZNn;AOFdy7F;e^2bE361=;k{b7IDnUyg^@zeb z58F0|qe<5ih9kt3Y?ATZ52MU_136J;ztE?tLP1a4c!rK21qBR8GgEp=S9{Y-ne`@e zM9O}0ayrT)d5Wm~dkJy>GA}CQSo!zFjr>fKBqm)`7y{vnRJPNDA~w&e9v8EPy{#7| z41q-jRSbcZ1zik*`HCiX(>fw3cGGhrDE8CA9(!cUcU5sT%6Hm>T*`MUgJ{Zk#)C}C zA}~cso9TFw0h?)6kpbK3iPno4hR0GxIsQFCiaFb9Zi+ek>El)p!=$H4Zg7&y-}FLI z@cuMNS>%UBEkn*Mw@lLb-}EAowdd$$p?j-`aT3R0Z5!=;1NKa<>55rW?Io)+qb3o) zKPJmo_U&;Q%SIA6iOqPu&0_DozDXff7Thtyuo((o7l9jj^GyZZxZX=F$E7xt9l3Cd z{E_k)ENCW;nWTyVhcWs_6cgXuD)sPwYe8vR_Z{$i?fq%+k!fd&^AxUAjZ|gM@8vS# zKBKn+DlGuZ3a?dcIoFU=PaBs6aA> zX!kd=<%tNVlyt)l=4Eo>EDx~EW=%TC6|CqljU9wlhGNQ~5E25*CuZR3Bc=@ONa+7O zkWO9O=a5KCh*s5XfFF(8Pj8NE@v=(kQUb8TV5)rn#k`;G0|;G=PYdoL4w znoG_Iy%_r^-;=YKgSZCd8sxD{qWN*74Al5LhT{Z0pWmw~ zzIprZ)vH%%uS!0VN@A?~Sh`@pdR5Ev>Xpz-sq;&!Y6nYByU*qpoS)rny)4~0RsUC{ z=4R<)=4Sa>!^6zO($Uh%L*3Hsv#OJWFNcMLnY(+eE^4|~KY@fbC6^FpUhgUEFv_QZufE52zi23`zV)-9qky&x@ z-Vb+pe^?8;e|rAzUbMz+O}P|&{P>D1vD{RMoD=55{pKqXMMUojAUci5rmWu*pVNBM zIEIz!2`YukURmfv5UQg85WQJN;xV&n7u{v1me0 zBi>I&jEUHkjSe>D0>)%9JtcO#usap`V1y>>FDsm?Vh-52lJzf<;M=>R%5mt|au-pIwYF|YQTMi5@BCu3UKyHfRcaWPG821UQ;Vw&5OiVn7{{umR<^c34| z&ix(I#3Zop<`{Zt7V8+dvzwaj^p=r?G*qugSpR@FLVCs7e z+pkU>;IElhD;KwePT5hG8hn=SeIqy9FundJU%v#yT=!s?$h)Bq&Cw44o?4*n+MJ^I ztCD0F_gmvjTDyc0ny5WMyJhqPWKQi-((F#L`U5d5CpQhE*SMP%Vvd=gey-cG2NgDd z?{3h40HSj>KYjTik8b7?N{Fkl$khyrX-uxSaET#IhF)Ph{odqKAbyiCgQ_4D+E)Kp z9>j=pZ8Mbt<-q*+8^%h%LM)aieH;X2EBn(6k1jY$z_~l^r(}3dUTW zH0PtYAa1Yd*Hswc_EC*7R~X>EQHw!OR{DGbAxvV*7+rT~FH+-4>DJL#D(Ew-R>eqz z?qPP$nWND2k{r&N6Vlg_zzE%$GDfOn3F(uQc?$KD!Rq4)w%qa1TTD^AnlI3B%r={v zs25jkvv++ae5JK8md-9mP3 z23q78TH0HFNFCQxMF%<5XmZ--08YiocflMTEY zH_vQDc32zzb8Gk;bd2qM%oCD_BV8R|%#8kMi+nqqV0H@a9Vv5K1vp=% zq*2scn(cgj811&KVdD%m{X3VltDbIR?xg5{uQ1kNsi^HQ$JQX6$y9aP(BK`V=+a^3 zh|1aNG(;U!WnliIfNsc>DzKdy^eoP?gM_hPV$>Y7>R zho{`W8;Mi*^oXe{cWP-|S1AFwD-Kt-mi86JLQGvdkgzLKrGy8icrq8g)-h|G?u8|~ zTiw64#F8DlPYxzNw_|y}`{&uBtw?>6R!$asr=ThXWmj9o!=2GK8s&YM0Kwfm^;@pkqruz?j0-TJ0`3v znQ^@6UJ3BDiuALsXP(tEYNaTH$m<#@Yqs<*vTL(=^mfj%$-zCX@{U? zMb7CtNU5fSG#`QegyL_xU1~DNTF@RN8z~B_UKRTJc+LcYZ~`!LtYQMHtxG!Imh+q z&V9kDT4qoG5~1o<$XijuF4>tfrb0EWL%OXJ6g;~A(a|s zH{M`Pg{@pMVY5@`gaEr!Vn;c$S<<2%lXIgW!!fJyLOU6s7DHQ`Cb5k#>qs z)xT=S1STxzH!!WH4isJkwO>-Ey}M$mEgZlb(a)|-%ATuHqMYo zDF{BknFx}BU&bH?h(hlL}-n^Ana6Iff4+6g4?k} zW)aCRj@>vH^lUZtKoSJgP&EBJvtJeNAYB_#KuG)A+6k?4MS4{5l{k%)WW!ZHykmDS! z`&4rYirEQr5gTiCx6Wk}%5^$UIqv`ZhosRsT*A~v?6+URsQ<)z^UE1i%-Kb3gcLoj z)5}F{$**NJ_+i~Ajvs*58SWxBcb;q0QG>cFRBACbF#Oq^>=V&(LxB*kawU6Zxe1lM zeD6o{h~C$EuNVC%NTVCBSJ|-FnL-P&;<$xo*M&m+Q3lDfOyaTbI=C1(aRlZ2Rgy(~@qU&~21ml5A&}knV64A`(M~6SPnQlr&;PyXtAv zlx|uqZL)H1U3-^|?roHKp5`9YobD8qc!B2Ob#9b+{^rGXSCj&j11tez2R>rn=7Dwn z&;!f?tV%(j_U^E5hEP!G7>XeAvJID|OHy}zH(_WNmJ@gL%(_4*BeB@jx>qP8iP*wA zGm1B{*vz^uimISbL^m(iKR%z-?mDboi<9Ly@~_%=r9M8is6W1%q58N4ZhPgd^Y%30 za%o)A!>de*sJ^vPyno~!j;|I{$r3W|Ye%|zt@4~#EcqSgk?5uX5vBoTkK{>E%{Wr4 z{NGYt!PhJF_)N3XA63yi@LBOE4L(uz-@RjkPO8>CA)&|{DgwFSyT4?`;F7M%K(Yd* zSIm>YcBfBf(q_q1`qW~6{&qC2`eRKv5+O*pd>$8xg^msEQ1V3qT`QV`IZyvnta$@c zDoD3-9*m?d57%(`@uh&iT>X&v^`L@o#k?yL46sjNk2A?cT{KVn+WsZBJR65;N7x?% zMKl{|f@ZniPZV@A0!8%sWHVcI_Gm}KYWm(rh54d+bR?DJYNMK@x7pcd#q#s{^Cd_s zNiMDC)@VW+Ju3a<0GGxvcYINupA&T1#V@JPvpF}A`Z@4VFwlvZy=uNF(ixV{TOx6! zxrCc{;k*0@E5pA}`C_8jtY5Q+)-2o85N*V`-UO)BIrK&f;@m*#cfvnGMHghgl6x(v z*ep|HfcyaJag1K!SjR^HR3nP~px0v*eFSi63iHQr)A^F@^4&Zb*QF~A72jX&rwP4S z;r!a$2cw?eXmOf#DgdR{;ddm;q?2ZIRkWM5Fh+v=rZ2^GVioheNKdq8P3F%8C*@(g z`2NN}F#uOgSFkT>bnWHytVjs&E}fdWx9uDoSpBQ`C#hjg1pabA+W@N?hk>uD6G(#;^)bDw6*R2-nD|a;-ea;_$jMt2k$; zJP3$9$Uf%Ye)zJKL*-grN5$z8)Wd4@^T6n9Q!8%!l4I!mmZKB&w9Psv|K$UofVHD9 zCavVxZ4@B?CcM2JF9sPWBA(?Vg@Lw}Umi`O%-$Hk)SFQCHm>L{oj9Q`7(-S~f(sj0 z)Vr-RTYx62mc=7gCl6Gp=(5z7gg2LOAB94$TV$g6KbNy2(XRoAadh{~Q@ERP5EpNU z!eUVlo=Nt&Z*GHf3~hKcbt{m>mp!2J4Wh!e!#M!GKPs^fF2yn`E;+wQD#?V`awuDR za&TM5a|l`%awu9xa`1d7*&$*(sj^;emUh}47gx>?{m-xd-&HILTi3!DqF1k`v|hau z{Qp|T>bRM?xLCUV-$iUnCTf6YKjFZxg8({R(%U!r1x)ae53kwyFiNU%pb24i5Jfk1 zj4b8(l~>)-6#mB@=BRJE&82EWI$|X5>jVQjukiy_*Mz;VS65ng$D!BKU7vTypGPy? zc7xmnMV|sL(5d@`CKUC|Q4jwyH})Q9oS+8YsH!GETgC9*Bt<_fo)HCIpaDLdCKM+6 zfTlq_@;o5FgbTVMnjwZnI$^pNI$ydD`74?s#y#cf$igp$oFGZ)6Wtqm6euPQi4srP zXJ=@jd<67Rv6gCx3%WsfpG5xA?E{E<2o0J@Cqq{tk4;0Otggfp@tJK%2pS5)rWQ`# z;)0&i;mI>Vm1r`Q+=Pa3>Exi~GCbjhVTH+s-wLw}zZOD2vkdV8sD?bCBy?JIyr5E$ zoxB~$DiM*0Na9NvWyp}`N&8GW6aYo0lS?9(c4HfIrHiE-Ou7LPLirN;l8EVIk2I256P3R0= zabmWL8_G}yopoZivK#ggDbyV_PAmL<3kiw=;-G0s-vU4tK^(L#*<0_Rte{Gomdq_u zs6D8Xwk3B91xf~TqG`$4B7_=%oM>Bewy>e1pno)aif)2K;&j*0WjQy=p*M8zq2;uC zs{YV@Tp*0UnBO8nTa8{OjlXf2y`lP1l8pubE)?gY{KE2RcdNyzdjd+J6 zZ0VRUkD!VkKSdS&MwweIRVau^N#3B>O^8@ZewFCz^8r7K5*=2p2GU8}juQURZs|CN z64hS%@fZA`jgd_l*#kzXE>x?gcE~0krFubWLcpPdd7iNQto~C^;jOLHhgP46DRfv~ zg7=rw%P8V0sLOo3)*b$xxhKuY*M6%EJz7-zWEB13*rJbRl4$06S`{-?MuyqV=Gxd)b&9YGF_`Y`y&Bzv^Y$B=3!^!ix^J zgQ8)E#Wd%4A?18mHMFEZnV#}+?XDunGR2wI4I+hqrGr~iz?RixRQxe4B}{K(0`hf3 zCWiA$*%9WcN=@*6-Ra@K+G+If>m+p{@r90y8 ztOIMe^0I9gK3^>@WsV(Fchh34w@+4PEwSK-bAfx=Witputy;@z$!#%28QywN#+lZy zMpaB2*6GtN&PHFG$gxIs$N50)AqI=fh7?#D`5nY8Z&+h@bl=-looNYbBF30YSgKID z<@*6?hdE;`nUWd?{!dD6@iTSSsoIEsr-s7Jn$5l(eFGkQFXS=;)<#C2#$Cp>nIVe$ z!7l<)nXLe}lfeN2Ve|53;|@=HcZ+KmbqY2`!z%dJ94pI_my4XuUkAZWgHL0ICc=uN zY|6_kSe|twq`ImW{a&hM0lcjHWC~WZ+Wc&$F=Dr{4*A1RNGSGSd;&8JC9izk${c4Y zOe@Ad8q{ziR;8AbHsY}^K92Fb(;g>z)Qq19lGU&md?8Y8x>Ez#zI$uVebF7b@93yC zQA}o8L)8`{Fu>wrJKE=;^`6A~$hbZ$97)-RvK(f3pl1T8xcaT#-W9{_QunHZ0K;@j zMt^aPWUDVHMCQHfLZc(GA3bKM%#|lK(Y$h=y}VWpB9rpBu`d683*uW#Tz2!pU*p9q z3vos#+1AJfO3R+yvb|hm-$q-|%%fY`{SF?Z)|kS<>Zh2b(%gxC4&m>b1V>~ABEDi8 zoZVrn`za?NLccsh&&6V~B?-?YWjC$xmD0UBS&SyNvRE_bHmjB@!;wHwXCR=6ZH~vX z1f^qjKWH>nPwV~5PGxBLNF952_)g!E&b4;q(Xo2fVR8hgn}d%8Y#P$7mlprAi_RQffmbRCHuJ}BxKFd14Qo_l#_IeZ#@;ffl3;5W#@*fBHtueNJA)7IFu1!rgS)%SV1v864>~v- zcQ)=^PR^UW-}mR{Cf%u|yH<5~(oa>bXIVO1U7qu(N5eI{#cpTpaIRlnXk+V~-sHAN z>lyrdzUBJIWt{I{tAai!g5yi~AryGOMR75YE2g7=x4%^BORg+@KplA z-@b}=c?G3m)+Jj{TYrD`3kN<_uwh&+hwVCfji`4X4g22p}$laI(tl-*DFKi->m<-g&7U_y;c7eig6VG9rW`buvYz zdfpNe^0)Fg$VE~672`6U2NKOHcs{xFYE{jy&79r>Z}6gX?%AFADVREL27R!1&VBM z{X9mbk+v|(SV%>17geO{dXrLB-o79Bk@VPvYjRmdK?loRrT##j0Nh%}hg|spTt(fc2=Zh3;;7jul|!84BQ@QFLYXrbtUKC8ztF&LB%5sX6Sc&Fb~qaOMXtWPgW16#hrB-+Cd=iiPjQmV`0}LDT%7E=8CcqfLpCpizV^)iz z9?K?ClM_Wb8pQsgq^NX!3@R^B-gEQ^B@ zjSf!kocQ0lL#ovK72ub?Qx@V_$X0}S!y~im4iIH97?XVIwqS8Id{P4qjya)HyavIf zIC4LOE#P4oljb0zsiBPE$5r9K{Y*s*=7zthR}jOaz$j8Lg-lESoluX#FRLlb3$B#n zh>^p%i^Z!kV4bv35xcPC3UB#6*|IMaV5eu0N?$WZZO9q*1{jZA8@zp*BjN`AE_c%UE(*NIfIi0Zz$V6JkPr0+ z?Bjx{py&;mTLAI6_vryY#+x0a{w5e|qETw>ofDO1I)QE4=2G0x8deL;Uwt zX1$_0=y>wgW%ODCo%YZzF zLAVxGm)s4(_?h}MauUxj6THL1jei7vFXEN#s;uH=iMK%I<|CjFHt?IsP&T}9k?cpt z@(C@cfBt|ahHyl${8Mn&TT+oPw4wY{_}{0reSxGaS%0$U#C_UT>Rrpe^(%7_LS)0Z zuBZzh&q%#JWaJgaadHzdJhNU%c zbm_nR!WCwtD|u*J0Ks^t57=EVOFnte#NMr+69rSGUon2)fOSaTQW)3Zn`(@u?K;pM|{Wm+o zkGq}OEy`$a#El7V_}Q_d8VclqTAok)U7Z)w0biJ<-{h`EP)is9p>9q1+&g)9elN9qpI z0M-D7&?zB&MA{EUqT$)ZTuY3%MeTiyVk`M!6(+q>oZTm!69E29j1V6_&h=TSUle%s zNpRypC+N+z33YdH(HrshiV)AOIQqEvMmrWzc71&9>KiZ<5c}4O@}c|)%~~Rlv;$c$ zpRlfg5;&ro-Y1&Z=aA8NH7@9-N-PoyTGixURz94cImPKSnt2ozmfxL+KU*Umcs3Y2 zV(=~Vhj={n4cLdJ7kqIb?nOO{pySk#+*RQ&LJ71t=Rq(6Em8r`urC?ZGSbLt(*+)^zW^%s;R~Rz86B@vb#R4Kg+hczO(778!S7snV;_y!V7@E%sr#Y&cESFH5HyCZ zyXtq{3Q5iAqn8HrL$$aj$%z72CuCLZg{$&JorCe5al00_L$$ae(TjoCJB2GSlw9h9 z)iMQJf>T&|EC_!Diw!)|gsoF9NTaRC!Tg@v7lW0|8;#n}k5r%&M4xf8971vajri&t z?t@YEfR=b{T;0)|+L(jdlTJqI9wBcp@iQ)V56Y>&m!QJT;oI3*Z{_vZax*%+`=+!n z^8JaARV)2dZzdq>?Fc~x_3-S;E9VpD`3lP)oTz5+$mPRwKfvjFw2i5Nf*+B22k|El zbAd<-*ywrWY#$cT1s?5+IXAYxjr(kjupN9PfE*xrBu!>mat$s>XzeL-G)fUr zA7Xgg1Lg>;JqBx3lwg&d3ij>i67}2=CS5<&1eP$A9e+>et?<4jov#4n0uxxsZDWGg z*6f0ZU&jNklfUqdG=s0YNDx!bBjt9~r`eAQWl*9KR+y~%#zaYuuxkIS(pP9*aSgk4q8Z78)XpmIkNra-M`FrL0x z{txvpq+VCy?9jAnkJcUjSKK~G*X_+JCqJ_56wH3%w%mn;I8e(CtaXr>{{v~J81lLb zWk;z^el&ml3y=m&;J?E<-QKkSgH#RTJ|V}tIFalxKzCI^wxM3GfQ}shE8ct^7-u;6 zY(6GU^cG@YK1abHmN%(XxTQqiT?Lr|d*%wCGm7~m7Cz^4XT=7SH=nj12J<^{V4?C3 zL>?GF*p)eoL4IGDV2}+f_!5NeoN~XUAb1nl);iIfxDKvAn-7f7)dkz#SSJF%6KczOG!lUMZr4ZiPSFOv7r$3>(w)ws$hm~t6{}Cv4+H098*{(Fy ze*6D`llh(0LvPeOA&=(I!h!|~iJQF9oROfs-Yka9EC#ziJ$TEpA?!vUrYK9o)_T9l zAwNV)U#wuzM@HbyCfK{1nV_hOFUk$jVISeTw*A+%*b8f7c2Dn~%txqhWYJeH6R*g5 zJd+ply zhV1rl6W2t$IFIzU$w2~pbnO%HP=nC)jci>+licEV?$Y-3UF^qosH=s}XL|jh>LxY# zYwIYm$7`^1qrfG(z!g=fwscrtLdf4L5M6N$P#gRKq@-tv4IhLZ*lr?q0i}QcW?yUO zFydrB#edK&c2FYzMP%<7g3M&x&6fCD*5oo;`w5jZ?Cel)bb(4;)XNn2aqh;y_Yn8| z_3%(B?wGrdwpQ+ajcrwvHY&FRc&@2PN2&7FpRpER(DIipopka&pynKQ2)zQ++4`#G z0w3LYhH17QTd{8-pRxs>S!qSo$58JBFgr5i*V1{d4H@2~Us%9NcHiR1u2i4m?*nG% zho21-w`;ERk5RAVoj+I-bHNcl0ltUA&bq5(=4SN!M@H{l^)6l_BWWH|EQzUw{^*}! z_Je*on~V4%*f;WBbsL2K!8~20+=6=jy}@<*=>Ys(+JEfRbU5s$zcF?QH$yBKeCEtz zaD_M)N6%XMUjRy^VXnW#0?Lc?5AW1V{1D!|q-aTTU6~*}n zu9ScM!#?2M+w0Pfp4jzE5<~`jH^z_n{$)u#1O}LnG`#ynj_{4c3r@#UJVSdK{ohD^RdW|NTURx6*Z;Ek zx!JJ3M8o%^M>S^SX(Qb{^$iUN;kF@c%y{Y`d~984Q$n<(1v!3~j^ryP=DRH)o^GB6 z1@vxcxWX`$!Z0xMP!VvkKs2(x&u*sj+*Sb(lsgY0JE|r069nOlq);O*c25<^c1t1-1rm?N5qsK zduP(WuY&dLoynQX7O3oqV~kXdky9q@K1teQ7A)*O$pA_P&j}C9?*m51(~v63LKg5W51~yMKU$aG?TT(55d@BllUSP5Hmx@ zL&twpW0Eh(jZiH}mE|hHX3}N4nW2zlQZC5SDA9Z?i=Ogkmt_aATd{ANaVPwfvB1on zHbbFy!OI*RC;E0M!!Di3mo>#^7Dw$ul({#aBYG&oPMgS=IR!9NqIMz3To}*!cBsH^ znaGzt#b-7{?Lv}yJFX{sD8`PP*q$+k!=9edp7K?{gPGO^I+I~sPx8>3eFY1Dg`&>R-<4H$P67}A7Qbt%Ko=P~agr#qfG29P+lin(WB<~` z9O}#Zx$*n#QqP7ad%(uDBF2_yVQJoselzA>oyuf07xcYrX~Qgt+_u+RZRlK1+UYKA zgqSQ`+T>TtzYLV}X(f)l+IX!w4>Z4q+&^aQUHC(DNpqY&6_xi5s`5iY57H4gKYdE^ zf4PU7l1W*1@eiKF{oN8j7AT`C5&0p5Jd9!EB$g5IcQ@U_|_lHKk< z8SiaYG83C-N7Lpl|2Ug8@778N*>eJ68j**L%z5dU{z$JUtm0W86gNwZ7B)~Oy3VxC zlj!V4WxdAFc><&i6XS8G~mYIpvM}YXy6?IK$k<=NqdHJLfdw-hAx6 zaL&oI=xIr7UnZ~Otkm4Yi8%e{^t)o}_HdGZdJCPt=JJw(n&IVC z&I-Q9kxuOoo#h=5vL!b-+rk0+pu?UbflN87XR2NQC1QD=ELRnz`YzQI30i}<&0I1Z z;BPO&Ga*glxDw3q>F6@6xK0l;dzX)IiKpkRg&k#8;qMdH^n^9~5>97ABRN`2r@2~7 z{N=hUdb$Q-YTUtmYaKp3Of0(ddIuhV+*}D{l+tQ9Jhzgal+rJEUc%Ym2w>Q>a(Sgu zb2yJOe3a8_TPe_ZXJ3Wll#9btlKV$4R`S!}b+i94p zX>3fG;c8W69!$b3a9(kCN{HKKAa1zy%_ z#vm%~5FOgncRMAUJd&-C6AF&DuW9X<|f@-ck)OOwX+E$&^oEnPA+ZFCBgI?*q<;vM;J%PvcLd7l+bX7|w4~-fO zkq?EoMIM~)WRgyqupYsce<0kjZ9CY(-9pa}W6Sf{Iv!h2kD%ml2=QIX_VL@WbC>4$BWyQ3WG4J0H+Fi2ywBidu8tpY%p463=j`SiQN`Gszej%U2mW_Aw*S7%YL*Lspfcj_6qyql#^t?tbE(wCU<73MoD z%|rC!GK>1U&ee*TXwFmo`rK8>N448a!}?_VJsVuy1=Y;Q8lIFkcX$|k#MAcew`(XE zKkRbbJkzu_lZL%8PX~;PQS3s8E#Wt7VT}Shl8{nsmEG`GwFt@T>rwQRV9yHjTJGGZ$azZ?82>6aD z)mAf7CzF@BEbLo*4@ij2xl&`TUZOX({*C={^0vYImhSZ3jpBG& zjR(kOF2Wid!M*cFbw?z3=e=`?JT8ZwXayQm2Ze!K_be+!TqGT!P=AZpy>xmBYh)sD zXg1{Q4;r0Tyi=1L^3N@CH09M;A&xfQo>y=GmnM_7tV_Qt%c-%P#+}S%{Gy4c$mjiy z(_DVoru*`JpnJw|&6Y{T!jGxmP#$car;9smuz>aW6sQSJ(Si`j0pHz8>a&x={Ki+nvUuqA) zVTC$T^G_#VcRJ(5msu{$PL^ZI*bjd-bJd8OTC97uK!%ru&Gf1LAJFM8#I_uvns8lS z=Sqq9>iRpxK{tk8ZW`T5%R&@pwBdQ)F(GkPQ}|L=<=#32&JX889VgCacKpjz_T(j3 z5#-wr?bcL{p|kjRX_QK24?Y&Udz+Y+Q8r;J#k76hG2n?jV^x7b5Bj=AXTn022s|{K zrPG2~Z_m*7H?;+d^P*pQPc-Xi*sUw=f3jy7Z@m})I(Bhcyc==XNOWfxJ9R> zKDN}4eW?6P6PjcT@qamfSLWL*c(-`x{B(P#g z$>JfKQpJQhVT=r-V7Q0EW6%sJnbF8*APLB4K&Vlt^l`#37>9>u?z1DhldI7ib5D_T zXbsfXXNP*#cZNRKM}$I~;i!@#8YhMhFCLhzstsVQ$`5RPrzs?&r&1S74YgjC9#Dmo z{UJ4dg~)|rU8p1`#F$<{$zMlWdZnM-Y>ryW(DaT=%1~gu4ijiL$M?+;^R6;lZ!1Vd z-W2Sub*@dGz+-UqZ`){_7C~{$e3(=`=OxEw`UvDmh-wbQ3}i#{gT*x`a!nS5*9_kvlcy)~6GL#tPCZFQlRYtWGk#9LPO1NY* zXwN1oylOdN`Lj4;ct9ey@MRK_c$}j>L#;R>^U z+I#!~qX{~#jpxIovJHvNnRu^_z^j$L*TRW!&G*e$QaF;KW~3Y8GEbquX0cpv6l=pQ zGgyFG&GFS7;c{4^KQNN0sk#ws%!8NgC7%m{9eQO+E~nsUwv2B503ei|dth%02CoDnZj<*QD7Sr>dK z^vaB^hq0y_GlFGt)o`9t!g{<$HevwLe$^q`gleo|rU-{F3jO9JxkA5LDj=hs9eUx% zcJBJ2+M1t-d4%$>mrLSHj;*7{nHAi!N#U?Zl3NuvQtVrm+#Zn8&4t<%9Hub+?(K=H z&**1u@VydBbMn}rvKW?PzHqTLo)E>AQsKU8y%Kp{P)Xd>kr^(f8VVo0?8|3)l%2C) z{PEyCGJ>~IiCZp?Ljxz#P^^8n>7jVsE?Qv zJTjk-eFx90v~uF8)Ki(DJOJW%hN9h88!O+1BIZkCIhICvM#`z6lm-cZ)+WrJrkiup z_NtE^?NAZ(g(q*b-X)nWY1bx@nr8e>pw7{&O33en=65Eb zJ;S&B){T{_K~y)t3D&z#?xo0bQ#@8S66>oYh`iGAbKCMG>|un$6bhSaO1^f=hBM0mz5 z<0o+DQOc|NBC?kFok?g})W;0(_b+q0rsRVIZCv+#l?;j#!t*vll6e4TdHzj^yk4DR zhl9;1d`lkVEax>(I4Z>>-9=+<%KeBt{7gNOd#L0ek-?8)XU$J0aUwxa$p{9anYLtc z%4|N)Z}>y`8jkQh)*x!40CZ3~mM_>w3Gtf&Q2;WC2g?_2G7ZW{|J3Lo9n4*;+>Y4w@+zXM zix0knTW@+&je8XD`q57dEKWf|b@C+xhT!|RTI`NKMw;i4GDqD?(Z89sNw2^65Rpc2 z#%o;z9P4oEcAq4MXaSz^cRz7^()QHQ^UHP?c7^S(+=%kSJS&4|r~WwK6K!LIyby#D zNzL7!oa0zTebEO==eGYa@b==?>SYehhQl^*@;G)Obbh@M>Pe@={#(zgU(LW30;)}? z1Mmsqyho+~sGm}&D|3$l-LQ1$c2|X|hjbKGqD!(L*Q{U5SunV*atE=|*5lPhFzSgM zDL`TUl|GIZ&9H7Ky77Fenr|!iNh(~V_QDT&6jl5U4%!ex`6mdH*B=Qu3V7PO7GUxx z8&wv2!-8gsplyEoMkE3WYQ*Zo$omUqA`(FbA!2nAGV&kPu)1EE^l%} zb(+`a+AY=1M7<;+LTq0{PpN2W-X3hwI#w6XN5QZzUk@^<6T6EfZwW{hGZY9 z!F6F;&7Q$~+hiZP!L0)}I$hCwB4i(!K1AO7(RD{pbwzZfcpp+UVvqd+K9qMuB#CCe z{-i27hGTg$TZ``bKuOf9Wv8 zbn_b?XI~8WUXH=flG$n=Cw~HWkr0qJjswS$d}4m_bpzv|NXp)=B0I=Nxtb*?tfCtTcB$RH})o89|${Jt-fyW#8;Bkrt9j)O#x_AaJ&cmU_9 z*6#HRtDyYjsACUwCn|%lR?Ct=+AYn^MYpf;9Ab&sru7}SZt*kv*F}^asm15qPfUHQEYSVm}S=jyPocr*hCC3*mUtM zBV?wmsuC*&uy#lS6g~qu^A00-Bu>DZpGpLbEt@P#wZk>QlvEB<%)3EyF1}Fv{oq@P z&tSx%ieSXyr{L%q@`@w)YbXO#I`9$JbDK7{ffJkdg%zsKx(`i5U5We?kHhmT8n(6_ z9JX4c>Wm+b)$7|vh5?k4!e3R=&L2ZLSUw@v2@y!faYyh>f3uhS#X3z8j@&7ew&~_f zeAR>NgM~BgTG~Xp?%^5-yCU!y@bQWN2>Acg_f?3^k>OvoefQVN^#4TPiyNE%H2*J$ zFL3X$A`AlqLkXkg4#VvZr=@FWGK-~XQ=gQ_ok#DTC(U@asVm=_Ef7~B8* z2g%ww+Wt?Byqdn6t_GGqZTmCXhNuW5r{Z^pA7b>O1*KRC1W9D`Shh*PCgF`Os#bDO zm%)vVonu3%k%*orV2GVvW+g}5><4^6$W@$ME+mx1o9EcpQElV$zt`V>Hwd32})1GGu@E|$S4q*n7MQPn@>zrzy{$yv~*ahLx* z%4zH^nDlfolSM(iplbqz>EI+zE&SH4Qv?iMp_x{5cGJQb2nKwHC@&@4lOJl2(oLnTbU?r)}^$I^owoXm^@~!@!r+!7Oct` z^46WR1iAir*Zr6ve6~$hlyD&~Kg*13HD42AKoSeG=F2w4L49k2f#^R-Te#7LdK<4~ z0%uyW`T;Rmnr3Qux5hPDlf{)CnZ`Kr{&Se)EPtEL16x6vZsWoWqIlc{Bq5&NOl;t4 zWgU%@{I^L4pWOWPis)fS=VFE=8j31J1EQ<>q-x^?gS4Q>j8D-)_g=PhaMJCy9wbw` z;BvOCBj3X3ZiH`l`p;na#@QKZ_@P#a^6a!NFq(gBC=^M{O>ZDFPDO8@S1Dd*)F!Dj zJSGmcp|&_O-qklIDNaB&0H00ickx822SKxU$8O65BhR}sG0_sQlSk0_r&pk;$+R8* zKZAvgY#s|-9FA5T4xSk08;zb6h49;xmL3WQ6K(?Nb!%M|)ZP?98;Yg{ej_vNqw~yT z{YeI*1*sWcxmfEbBX>V~KjOoHFK+;`NSWT}DT=@H&s!zC^zl_!41XmL@wC{ifqJhA zJKjijkGQCymka2k{K`s9)m4;y1Pm{lKC zNfApuWpsUdIMF(%us>N?(E?&Z8HZ-U7>IY+E+u;W?yL1in@13lK4Nx?f?+Y@3r9H% z;d+OgPC_?U;@3Mz$^xOE8e+(Q&sDCU8)4s$xoGt9Z=dT6YyUeXYuesLHMaIW7SvVP zeK9U}NwJxt3^*~`D_GrmEVtb>E9{imI$7tJ?cTsYKPxV`bjp9`pw1E|zxnJuCU=P) zQwZ2+8{WCfAW#<#VSC?hl8$K{Bl=s*`jrFj^Af8rmQ|mR-(JT!$L$FpDu5h>Bt9yQ zTIr)#7RENAS9DeN-1SKNzq47*7x=jy6j=b|U|>;JU|@{@PvHMw+)w9td14JOk8Ed^ zT9#Qs7%K*%!HuPbDngS7nuQtRz`^684X|eR{bc`@3=h*qw{jNM2^^p(aFjGd$AYN! z{N}XXed)c)Q#H8 zO{%+QlHKe9hm#K^URsq1brne_LAHOsZ#|drszo)LX*YLOCl0Vk)?m4*<}gW$MtK8* zRXJrEWP04=uwrkV8nEO`c(tN>WgFC^ZcBI#qs&#Ol7Uw@&ApQXe$2Qsg|j=Ps(N(8 zlB#-)!_=yJ^uy+=jOjpUKy3n$2yln52N>2+)ngjwQq^M^{tqQJi~#r#D+RDm3bju& zDRnJmyRlEjsxJLO$>bI-{@X3m4Wg=i`RdU-xJReAuP=Bla9!@kB z)%J8?_+B`^lV4ziRlHAw)D^ay%OK!;L4d9U_L<~@c+HbsS8GG<+7Sr48duA+%I2&) z6~ZJ_905Oe$N*AEXN8A72hj9~{mi&k&GqUjCIkM;DnRTQ4}yd_%c{jp2$-Zw-m9u~lGcEU8h@QYN{DIm2C73wA3cc!nRR0LafJoE`z=PfR_?*E*EiL(cvx(-i#-cCVQ2#)ZDye z&}w*^&SF>6`-k_K3*k@9zX=Hb$Xx2i#u)B@cCOiWt_;;yVh(54+G*s|Ne(GoP=3Cn z`WN?F9gz4ng#1Gy?Jee7&Bz^f6VLm2x8v2dZm_XQf{+e9+rBeABPqVJ24zKV^%OJ?9sf$$&r&YL<%+ddi z*;Zt}I~rD3VjlaeTY5timPsv|Ry3EWX{yfU#BCE2jZmmPPbDQyIWM3b60B$?Fmh*` z9US29lWa<`pm0^*$j<)t>nY%!q+01>lUIzN$;;7pc7@a?u%5F({U?Q5d%d+rpz3*K zTFu+7;aA@hE?-b6WyDy?b#*SIpSOe|hsyp$dtPni@xW>H*2-7@cJ?%I=XMRYJtWsMSBb4%uVCksj1Avzc$NJVP!UH`-jacx!Jfn9m5>A zE^&FK21Gg$rPSvCN~Ia>QnKaJ4{;BbSf&|sbiPmIwrf?FP1`7L!{d%W2*ocMIMi}E z*oSAd5M&EkF8lZj+mjgZbhDG6_w}q9KYw(D7pRyj2}~Y&z~V#@OwQ$W&rR3jQ;3J< zW=URuD8q<9PsMRP5mdP)v7F*6L zT!q!jMctb_dkjVz=ciMaIiLn72N?bYtiQ`}on^?g$|)j@O2q<9^QQ32UehxAt;4^y zYg^^aDi6P1o+5B)B*{W&S850cn7iA#iN_jtOwZ3-I`)X$k|P-U)#l}gTl|da^Zlze zKG$b;m)E!3eSZ<)SiMNc$&xG@{kFz8qh?1_c6zrK9vI;jzrls6 zGe1#RSxrK3S-UIud(lxi&FV>jd2UEkuVVLWo|PbniTZ}ppoqCXte>???rvQae|(1K zVFM&-kRP1>AqzJ>sPzL}@jQ)~(>RvqVMi>8e01t6PLA&2ckSOH11A;^A;pc+!l8HI zw}{p9UlHaJpGnlOrMzV2P6FIkKy<#1;zcQ<6p#4v&QbGZ+M(nuPdUMwUzS4)C?LjM zo-VSe>}iiqPbJLR$rXbHpd`Q`Nxz%%>Vs+69TY`lkZNA{YlX`R;wac|wRRWMx8fJi z{!a%vP}*_LuhwA!6c8!0z<p&vN+du*2?LAmz5g;wH$Q~|oFOUbhcMlag;^fZ& z#qTUfgmfD9c_qxOpLM@@=f7bROLo!l%g$@N&P!+kI>tvYi^^%dRd_(Pp30b4(WsoD z!ji|t80YT@cbuM(Z3=G zc-u{^l>n$Alv0jtElTHN!Uedg%t(uQrbK`EiT$k6dC7|~4UP|RWHBL~qKVYVPTKe& z9w$vlzC}ERCf?Lt1u-q6Ql}oC0DMX6D()k=J6aqkt)^&iHbh0;SH}mZg^qLm-Q7Ij z;S@-*c7;;|T=O>BVNpCLm})3*drp0O{S%nXl?^gexMmjzmreIlL`1~@j2hX^=`%g< z;P-eNe*gRyB#lmecNT0x5_VtQ>(9wpd;4;L&bL!reXIJu2scy35j(;jQSqSRB@`{> z{qj{d$`ovO^KNc)ZqFF;ab??fcIZegsHyiR${#6DXSy&N(sj!E`BqV!tPkf!c12~+ zo|7WUWz>E+mY7^C?j1Uzc(rM!Jg+VFh0hyBM!ngP8_Sc-90lX}+B7SJ9zAkriv@x% zXXUs(0|UJ!#*O0$5kIDks5`-#mW_$mxMrPsSa~NBFxXEv@?;Uti5!JqcFKi1+>;d& z_Q0F0NO>>pwwOm8#-rPV->5={K_&*7vY-#^Eo=~dK+n058R}5N;$}UP>^kxp+L`@o zNxgjG`C`C!msHDwr8B+lSSX@)q&PP}B`o}yBnHi{&hpwScid;~;Qb*TB5!!?%079g z5rAb?qy#=LZc~8oaX=$u8OqIKt*2-a^5pd?Ddg+#D5sA&gAp)ilb7e6az#;_Sj+s; z|5phu;@QY)2L{$Y)N!W_XOIJxE21}9i|?&s?s}P~X|FrA!>VgdlR`-s^cA9#O_aL*a$6^|<1Pv>Ha7fo^b z!|C;C<_?3L1f+1{@Fc_h+W?gn9(f7nS@nku?U z^(V|f|16QXDhk!_MYeEVyLgJsEZ2p%V9o{Iz>Haq&RcoU5sim#r!OcCdt3W3G5xLxcSaWpGuE$h6yoezHR9nrIcjIU4@>JWm_*s^11X52|Z zR6{MnSG$xK3BC*f>;gtlHqVVO-WmPA=Zi^O1wtv2&j#r>>L@|ve89M1G)~L9+H?QH zfoxeZj1=$kw-es^wk$mJN*mAE*JjGn7fb%wtgy3=(3;@uBD3x(K7T104oQ`Tk|4?u z*G#=uLX2tm`WLlG|AqN0U^wG* z!|l}Y-Ry+FHX2VC+#RRGwIj}!a!ps1X0Xdqj6j13(z~vdKe;tsdybK0~jJhhuf&nQqxqfwqThg@j%J^9ZkD2+W5=`bWn=f&@E zyNBQssc5bN@+HS8oM;yxecxYDUSBLbYscRg4cQuXeg7JFOtN)NP|V(kYyFCMbAT2; z1Axmh{80S+u7kr_*n8p-X4UB!{3q`Lqm#`DQ;BB+mgK9hEYC5S65CZ4t7r1vckiz( zp(QOh^o{e(ta>PGu21OP@<$&WDWBn`skkTAQBG!UY#(qOYe?Inai$lAuxo6&#!|%9 zC8RRy3YLlnOD30^3-DR2e_K-L>+udYJi`;VVQkB9*6|7V-Jm^!BE0pp|A&T9^d! z5_1(1xtX9aW7+G`&kSJ~5v)Y=dyAvlNI-H&O4*`EH{`Co4r2(?e1zi;d3j1Q4%z_4 zx)_*8Xo0Gmr-O4n`lH)(+1wt}jyrKPx$DFhbFK3`e^JGxR-Er5D_m_G%570D0Aeq} zk`Syd3Ctrne{gAWO5`|7PkB*Is;s=M9^J?pJoK>t+{iMpE$-WQPV1#}Ob0hhX&Mzm zXCRLK7PVUb=S>yb8Mz*vJUGa0yhwj3J(AS=dqrTk!+kYF_eX0>48I995m0I`lhBAyQ(AIa0#bFN;Xc>*US85Y*o;KDoo>e`wTO6!N4`TGEKL zMQp^SsZTiXLwm`swI)jGy|*@3&{2mc*HWA$d7?Ug=O@%|fqfd@t8%?INil zqhnfPN8E0$WZPW*un`+`o%S16gPwPW4u5+=laIX;9<$==hffv>bm>Ss8$R@>eyJgH zY;*-Fqb4sS0+3OO>W7|QG<_1&1>53Z@M0!nwi%3g_%!CRM%O_sd58(dUm12MLG5W& z>e@*vmM76t@&SykNOQmLgKh|u#_4Mz>nK31rYE55O;aGDtS`Gl%`yl(^Qj{O#3eqL zWYmh*UyPAeqS8{^f`fPQ%e^~Hh&@K%t~<-on*SR?p){;lckLkpNseX{M5a{2Ae=K4 z1`{PbNTTG2lyT?*mf4RHvITY=zBCYBQ%)3yJk8;cKRXR(m?k7|Y2%^1(36Z|Ka2s( zK9>yN%48C9GdScEa$`4p?UFj{UwOAg*x0XHQ&hq-kBtEFQ?J<>dZQ(emSy8atQc2y z1tYgsO>*A7>05@9gU`qBmh-RGC+}Q$AN<|{fm@^{k34g)xbv^L3yw#BU(^3OP9DGG zO6D)2TIkzLLmtGS8nPb3$SWzJuB>nMuPYp&uDtJAiIib*7qO!Rky$|2V4*r`Zfu0UEcQ*b30_{5e;-f+4Da12nQmj z>KTo^asv89J>`-297SG90)6-pd{J3(g&*P)F?ZuYFkGI|0wV&67kH?~hPG>rJSN$G zGO;3s)568m!sXK_^A?7GEesbdK8vS&3a5L@r~ON&{mZ8P3#a`{r$0oogO;?Jem1Q& z_tik_Uo{?#B{}$COAoT+?(fA@r!A5!i zhfnd`8Z7lP)>Oko$mm)=8ti}ru|j0!4-4Wb?B!kW+4neX7UCzZY{thuQQHn+NfV@p z5I1kfM@6y%4)^%)91@KZ9v+YQy%#s)PA?EBk{k{%g(u?XnH$ z|6%N{gW`z3ZQ%$6cXxM!4DKPo;I0Yo1P{R(NJ6lI!7X@jx8OF|ph1E=149TdgM>i> zANk!|^=^Ij>b>_@cb}S`>fY<@wRfG~XRrDPM*0{{&~@Tq$U!R14-aXs3|b(8Vk=Z-^&m9A*`3nuAntuLnnvBFV(v>Ueb*7r zhRa@8Q_Ha?!6z#(zDzJuU=L=b zJ+UP|a+?Tlhxow(<$@WjfCgYEb@td!oB$;A^u``{rU3YpI9Hq#lZ8yK80( z$qA-1@$U)=N6g&su_PDyVh#x}0QbS!@})rW-8tHexA=jqhd{ z7k(Pgdrehu6_{#&TMR(nKi8ugdX`kHKjc3K;zX{ z#;YpEtBS^}8pf-yjaSu-SAkJdyU~6m2)=d%eLJFSstpn3FDGh_yofS?&wzEz(W|^0 z9Y0M*kc1%d9w^<7)}A5D%jc2RHU=fuJZ`i?!o3HKccW{Q5n0{?EviWKcEs%?9bljY z9syN`{O=s-zW~zsF9*89K++AG4TN$JL`W*h7b5z+ip@z;vVBAKU=O1rREodWHylKY zyNXUbi>m6Y@6#j-sjLvAK-=sj2$mZ5S<3y_0^C;_0K$e;d04s{Xb&a^K>>;3s=6Du ztYNj|3O^5r@#RNNoCWadQm_)~LS+XW>)$m9F*j57clVvv{+e;ncWRh%YG7V=<#rQ| z73IkvA9ZTTXnZ5#CK@A}rI|HeJpOyi;ryKtzgsgSc2;nl!sC-^!BCX9WP>5$^_JF$ zkD3Sn_tQTWiX^uWG5n7twHk#KMDRdRqs|CZ1yBniJP^?lixMS-0}(5Vpe(Ql4$_Sc z>IQ51f;wi0n!{QmQOB{*;OQuCQKX?FB!1Jvy49HSm@FbF{QvE=0PD(f>tlUxz(kDj zxdA1L>_x~n4lB1MF~V3y7ut)tEoH|EXVJfYDlt0AX%M0WK9l;*`LU;v7MR-qth+w~ z7#V7hPhlj!{P)f8Yt1a)?g790z35{V^Qqp&6RSf%fj?4|w{(!d_=6!Bw%uRq;s3|s zM>}*65j+|(1cv(RFFr^DFNcXGq5$Q=|6w*(M3x4ql*p0^Nk#%UKx6?y#W1liC@l`? z5=@K(8zhG)U4-p`Df1#x6;U2c$m^&R4QERQP!r5p8RSS}nSdfEvSdNNWQVfBT2fFG z9MEnOcsR`OJt-<=kiQ;W3$Oth6aGsGUj8S<=-<+SPaOV}6GZ*X36w!C#PCPse@3}; zK&7Hiv=A#mke|}$6XQGbEL11a)`})52z(-o=*UCSfBSPAbz%u?$wT22!sY+NTCC90 zsFQd9Sj&R(A8U~zf?i^Sy0_vVS)EJ}>KAqL7+yZ1WLcr{Wq(UyR}x4%X6OSk+!%Hx zhqz5cL0OF8)D-oZGtL?$tTMk*Qf4Yq{yAzSrSJg9JVi6X>NPFPaA2e89f<%xft%v*BQO_k2T z3Dz_=qb%o0CQ@i`I+cmPf8!;qwHY9m+ zdZ3!8FtM-y;(jb@8tfsCjAea{`X{Ui8qLS3&;JEANCfvsWT}AOz|s{!$x-}r*dRJ3 z(BmV-Qd$ZkQwc4(kf}s)Tm;WQ=kR-h9A|Un zqigwWK(R1CKIBU_=y}u$2+{Eg#m5Sbi8`@CbU;vi98ezc2{)o66IH_kC4>2~AgfuS zbGjP`yzP&#T3-pI`H!mp5W^ocWXAu_ zlvPMk?StIVS1?pAE7URSL;?|%`ya;u|8tB~lm!b^41D5-xFz@(&QFNok+3U4WU$&l z+sAO8`ozo)m@)`LJ-{azh+8l!gdJ)bb>fGRf=qD>Xpw#WwwzGP{k1?+x1?Rb)KJja zEuOpS`TnfGaD{oD*%3K9^tiy$6@dec);@Y3nHehHBu6|;l2C;I>boSR!khs@odxRs zpMd_)>QWgfAQ7Ar@q-bHg!yqJ?eFbD2@D(}$ehQwvqs#0(0Iu6rg=Nn^*l@BYJ9Q8 z60iNkRE~FPk~>y=d2!L(i2Hq9T%8|@H2{H1+%fLw4Uz=m`=Bu$8CFxU#QtMH0tV3j z8_bG1lY)7x^0$#OvrlS_zO<^k!5nRABvSH_mWWI zJG*p|#MY_$ILvuRMCrqZ*Ka*5@^iLnx3H!kYrk4}OcbKyw_$hb4$-}`Drl!b-&f!? zI_Wp?k<&6}z-w!3Sg>YgxJ1vf{AM?z{iA6kjrk^He^Ts0y!bZJyf1S(?86MctIXLI z7jhTvy12IHrfCUYTBhwet(~8I1Ca&SoSo=PJ~o4mx_9HNBdLq<^ZND7qIlrNdlh@K zK$`Si>kFjyMYSA(E#*b=&mAkhDw1p77e6T=xwl_sq{ivrcJ!InjZ7M6RVR&+(d)LQZY2Nl3zZT#Z4aaTp1L=pI+X;^DyKSM# zr#*mG>&PyFchC8y2N;x(tiF_9uL${~l>O(iAMBpN%Uzh z<^xyXNAM{W^WkM*t)e(rU#$}ARTzO1Di)Igd}>N0OTPJ05tW0P7j@dr4C3x{WWLKI zlWqAzvQD&_g4s>6*@$Twb&5eW5#?zV#;+vK!5kIE3?M@1$vmvX88>P)nQ~UrRm>tg zGRn4(e8V~3hdb72L(UbAe?Qz@2$2BsE<^_~|2D0E1$#{t(@J3RyVK!ZSy1VTdX@N4 z^oMG3f?iq5)7#YEI0GhzrPg=>+nLkDC&1yQ7zQX&_hZLL6^T!ujxb|xv!2^-$)B96w0>Ng zF0Q<3YWk}wYx$Aj1n=^SlZma>l4_qrwB~WYS?=4sAvv=Z8vMY&{jine)#YR7J&$)@ zEzEWaB}KV%o#R_EoXly=U)N+b$A!bB(4TQIn#>3OT|W&(%P;Vv2`!fpC}Om0>kKIt z0!V&CTg!dQaOrJi_D!7+hGCY}b=mU`Fqj@zCC-q4@Sy)nDqSZxtxz=ejuIIjM5dWO zX3bWmR475XnaJv>BmKQIzeGj+=P?8BK9Q(lqw%rgaQ^i#{gVWyFi?V#eFF6t%Y#$M zUM>sYcy7XUB}!pkp!^eKfI?R^hq!owX5CDfia;3(V`vWO2-}$fDrWA|{ozr-Y(`bF0N(Y1)P^2vBY6s)+4Fr-^uStm)Kmr?^6(8650lRqR5-~AAGjMcgQdq`x%qO zf`W>#L!}2rH@f<|O{r2ID{4 z)^%dON0xp@&}e)Az|!%o6sO?fQ>@bq%M=s6bXsoY%4Gb+;29s@r@W8 zJv7$&@HRBJUXX2(95d-Kx=5wmi&~<`Rr)a3lT{^9V+Ll>~8z<|DA;gH;~Lj15%Y}?MR`#R!_ zAW+~2UQkJ^@6XZ`$v^9_SjEd41KNhv9iFJ-8Ec2~Y;t3P1h_vlJR{~qj0-M04tQbl z)FpX~KTLeP%{8$i>kB>SPw*5pN{-}r@<{T;0_pcr2lkMh7LmEInML~$^Yw2NuM&u< zc|QMmCj**{=3zC%!eFh63?^PxT5FA7_Z0D1e+p0Z!~<#fz4+$(42$M^@vRxhW*~Ie zW|h&Ja zrwjI^<*>?;xw!x=P4^EzB5hbfIi^zC)xzdp&3>Ynhr0{6LKhC|3r3|e_|*BOW-=jYd77!Q0W8Lo+K2 z@N3`M-HT0IK*HQyYmP59Q`pA0x#>gf@5w`+_IwJhr@G!gjI3m_LqKQgzAxC5KMLtKe#4 zUnK7CV?V+_DvL2SjksJjiM@3b3YV%U9myOyW4;Ci^;;C zY?u6QK=w*)A?XNtv>v@eWOT1OB>6fK8Yi?37WMHuvlUPvqreIZZlb$;MG`sN`*geV z&n|1vDIi}=H)_XtcPP*KmEK<0ZskPTFECYvemp~;DlJ~*o2TQh=PwjCs|_+}_T?>J zIf-~L(7S!=Gs_&LJ+6PsO=S8-{uno7RCBt>FOUD&KWsf3N7`bgl;Lz_LM57=>*O2m zMbqtE^qgjP3ah#y{&Aw!2DSyk)GtJBnJcH=z5f!orc!)lhUj{N(GPoVA3uNmR?-Jg zf5mePJ*>GMy!g}SJVon6#KjeEyt?TQktMb+b9rVi4oBuCoIXFYo)_B6)<%9AYUUuM zJz7@SEOOD~@2&|LbZSH3vmVV+={I|a8`7xbVQa`4s!a3Zlb$6y=(;N{Q|B1hl#fj5 z3I;n+2PF#-@(+~kWY%Dw%+>^IQs7o)Slex@EQ}SjXbP(<(5Dyt{_rQINuNtACd@jw zEr#0xR$1?B=)q$Von$dd!I4pRv^XOBLu{9be}iN~V`NL1K6gG@)XH})qavfBGvD{P zTgI7vip{GuaL&otW3!WoKc`7bf4_xl1E+W+yvy7Ef!btuUn^XoyZ8L9NwERe%m-09 zjVN;Yubi*L)~OCl|B!hyuG2?eUuazl%RE2=e-jpSlZ+W^Kb6hD=kpYidFkw!DtUR( z2+?+98vQ8A`Aff&oZ+dFVK7?QzN&yBmU2(FiHxaX1HMMxGuJv|fHm20-3#n*L{NDa z_Dny#DW1(`*7Xu9|4G&U71ah)upbR_U8Pfu$itY}qvk5_pz{_CDEJ|=o@^z7Ki|(t zk3j=2tB}O)V_l5z=jAhW`-cVDedcF-QV>&vBE>!9 zFGJ1OB}x;L*l`nV$q8#Mzf4pO!WH{E4@L^bUNNmI{tm|B-f#dQjhvsFe9rm&dQ7zJ zwz{>wOH!D-BAP?q!q_JB(-Is0yJueNi)ePK;<6b}Ou<{T&#gr0o+T#`x*Csnro-T+ z*xx^Uz99cr_Y|+dJuar*f}%;CVq0A3>6+Q-?G#!Xll8-QwR&lpw>>kL zXmD<}XK%1%9^~g3o5*$e)3UYcGngDNzEf3b^*fDM3O4}5(dsXGeTY>4hmeYi7Oluk zE;45hJRbL$1Fy83D#co%{iN=YiNgI5;exZLsV?|=`Z^w&nFb~v6GC)hO92i;O$4vB za`z(4xCuO}#WMECBN^o;y$MX{V)iwcTa`9u&d2nPjzy1ZT7JDL&|i%vaj1>t4GaNR zDE?wR0AdT>uK?8Lh67*?b!fVc zZhaqCDU49+zZk5dN=HuZN>}mWQ#k-*xIORcM$*@*)YhMM`*Em>w=z`{?L2d?IsK31 zZj}!tP5+E;Ou4v9<)~jZq?52ytmaFdwn|2T=)Z}p93zBja$~$qpfR9)TDA3LcF(=* zBLo_Iv8}Ab5;Iz?+M5xWm4`WF7Ds!?Y#P|}*&X|b?=DQ;8t1sA4!6R(?#mu89wQ)2 z{`#a(ru}TLeT5ddO;L0+rtAg8lRl1>vg$bgq{b58clkm5%qxHszh5abAJW4?i2BV6 z8UEFWRI>>oqk7+z+k42HV(Xmy_c9!|>(HNc%V#$t|9B{^vLPVcrVkMfHbD}?b1v$j z`8&Ijfn{>D{dX=mYQn{@vtroZF22vD|Fg3vrFaCwXDCooyeeZf{=h&%Sd5K+3)Tw{ zy?Q6mt1kT2N@$94N*zqkzWnL}Qy0HdwSa&)IC@t>@nhAwl&W`siU`hlqlmaHIJ00d zS6?@h)PCyM&(uemx&#|ZGFu;y_a+6u%WOIKbqeAdbcZs^wyt!Cc0eLhxH0&lyRCPI8htojJB%1e*mG3)kp%CZ3IHk`j-MHu_+o#9PTghwj#6RgdzR6&5oN{(X zPWIfQc<-?DBDImqrxH-iQY0DbIWz+2)WG!vv<5mVF-FNm{%@aabnCV*BB;9$uSNUe&uT*dO zstmb(iCZz0beHm8o!@P(o_QbiYUt?knqt4z-1=2{CoB5`3}W6S81PP`CdQo6YujEh zAV9-{DA{=M*Ui^XZuZ)^5f>XT1r2w|h>Pu6``1ocrNIHgfX9Jowx@ID`Hd28d8@?9 zrnZzZUyw!>*q^J>a7^*=o5{5VI68;kZUoQ2;CO=p8f@PnU3q3%SM8a0)C2J4N^AI0 zA06O{MblU8N}1l!Wiol!8gbO$bco&g)f}wlE7JVk#gnB2U#uYuGeK;N?~hw&_F5dh zFU5<+HA?HNO`pT3onV=;mO2Hr31x%R)IL`{5N}MqTG~avua*|}>izG#OOc@EI)ulh zC3`&u9uIx{6Dki%BWdYWv_1z(W2bWmnrV)wrUg&mYK9tLu=*QnhZ>dz`#8(Hi2RTJ_# zJ}YR4(#l{R+QC)%EZt**(ZBP9M`&!lf;86cR9@gTZI25sktIvncsXhuM~|%4(=GzA zWL{*ieE61rwf)JI#Z)4(Wneb?jz~w2|7ZAbpBt#=iP*GX`8>tLnc}0=7ld|qrqxwD zO~2;&1muzzMz=gKTRU8Je5Kv5^JoDJMt;t4F=3@cy*V*&4?fcDq$@Yn3*I7{Nj!voi^pQd3AnDC7aQ0L>) zge&cma@U!c4Z7!(2Ze9@7wW{fV7Z)j^htuE+y&yXv_N`Jy*uHeAk|hhOES^Tj@M!# zj29b2p;=2|vT0ndj%|H>M!dLnZG8fjgg}$n4SS#0pQ_1USLrTJ&f{!3$JK_lId0Nb zJj#hS{$@~*8|X7K;dQi54Q#zzdp9im{Kwul&UeG+BG&tSe?8HIRNF+sf!P`9H6^vy za6YCMc0N7y!Dj?0xeM?4;u~$Q0;2&QF19Ss7Wrc34PCvk+7El&WfuPbdK@5;4pc}6Sh7AYv}1+O6TFbGn?7K(3&6Ra{NRHeLAmDvzy?4e%(9U z!IOTKQGVUN71(v%=mRFLf$f)5WA8e6SN?AN|5_FLw-HCsxcq^U>dBKi?I%z8{?DsI z-acOL|G(aVO478}%<`;BD!jhz z-&Lv*x8YVgSyO-Ug+!({PsJI@&dI?m1(6UrX(oy2&t-Eq8+%XTjfO*t10Vqr6iUlTSb5h>lY<}BCCQ@ z5>JvfGZkM_r+cfqNjg70wj$s)YdA9%R}ym~gqRx$?wDehFp?&ZvMW-#;C{T*h;>WR zD_bRwLbYCHFvc!ag+1CX$=~g}ik1#rWGntr1b@e-i}fgJZwp7{D{kFlJwxuTCupG) z-zulJ@zf{{HqWIFWNP}h@nQ~eXzq^Z_&#pp%2cu&xO9eDgc#S2ocPQxbUb^SC&!ro zaM!$!Yq-G^;KK$@J-9nA{t@a^2#ljOc5HmRbLzieq2&IpW|_?M+PH&ypOw{+*RRHx zJTQB`I9x=&d!-{qbFp-cyOy(>$7gnWKbK9GAMfggqm+zhjr+6#mYQ2rVVKgibOt^q zRx_4+t(3TG-_KQlZ@jFRy>AgNp1M}yD+d+M&Sr;a3z8H;UuTjp_l*rCjrS)dJKhPG zySjC`*#FctHFzg!dDT8oT$nB8n#-M9ISp>CSl_~Fy^wCMt$F{VB2$_kOD3&7G_~ei z!z`6|lI5|0f|pflX#!)WbZ=&wSM-8OSBd>MJ(dGyd`-WuTt;>#wib{{7ULVo=*gY; z5?#U>slQc+t#S*wTE}+$^7ctXN4xNj108?v7#CyzS@5Mg;=T$rzbB3tBJ`Xh7zFdN zyrD_xkABg#h99dJu6q#5*I&Rz+>XUoMI-FxES@{Yb(J}}J;*~Qn{Qy3?bHdF+xn1c zSVAqX7OZ(g7+s|oSF}6a)i`T-;_mImc=J0gQb0uV%MWbR(LtJ**p-}`n+NBmlwDpr zi&lDHYbnta9rw$8#G1Lu1AdD~o8Gu@sbRgV-rq&9`pWo%Rp-R_!=l*)5NmI7_ebr7CC({ z61Xzh3T$%3?-(g4pMn|7*lGp5JKzp%Ub3I78s)N|>#Hn0puA=`uwCaE`U5j-U{UsI z+De(H+gr-d&^48*ENb>q214Jw8`KyYX&8NL3^*I22{ADTp6ruUmb+HGa~<(k_HnUQ za^DRe$`)Ps8^an8i>A_l+s*H#K-c&tA6E7)=xFvV`un`_#i33ro4X)C@r67AT5#-5 zohs+V%XsI;V%Lg>+yeAQUhe%q<`B296l8SG(E?VHRW25{sSytGGM zYrT%7KagSX7)0ItU9Pmu?`FKSGxAX?%JVnxeeHmyd)!01K%55`nL8rzR65wi7f

g2UALt+q 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⁢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