解决DataX自定义kuduWriter无法解析Blob类型字段的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决DataX自定义kuduWriter无法解析Blob类型字段的问题相关的知识,希望对你有一定的参考价值。

参考技术A 在之前的文章中分享如何在DataX中定义kuduWriter组件,在最近的工作中发现从oracle读取blob类型的数据到kudu时,数据不是期望的结果,接下来就让我们一起来看看如何处理该问题.

首先看一下错误的结果,这是未做调整时写入的kudu值.

从这个引用地址可以发现该值是一个Byte数组,由此想到可以在组件中将值进行类型转换,输出为base64编码(业务需要,可根据自身业务自定义转换)

再进行一次数据的同步

最后得到的结果为base64转换后的数据,解决了自定义的kuduwriter无法写入blob类型的字段的问题

JavaFx SceneBuilder 2.0 无法解析自定义控件

【中文标题】JavaFx SceneBuilder 2.0 无法解析自定义控件【英文标题】:JavaFx SceneBuilder 2.0 not resolving custom controls 【发布时间】:2015-12-08 05:13:28 【问题描述】:

我有一个在我的应用程序中呈现的自定义 JavaFx 控件。但是,我无法让 SceneBuilder 理解它。

我有 CustomTextField.java / CustomTextField.fxml。 CustomTextField 继承自 UserControl,定义为 here,但我创建的任何自定义控件都会出现场景构建器问题。

首先,我必须将导入语句更改为通配符。来自

<import sample.CustomTextField>

<import sample.*>

否则,scenebuilder 抛出异常 / 显示堆栈跟踪,指示找不到源文件。我不知道为什么这是必要的,但它似乎有效,所以我继续前进。

我读到您也在 fxml 文件中指定了一个场景构建器类路径元素。所以,我尝试了所有我能想到的组合:

<?scenebuilder-classpath-element ../../bin?>
<?scenebuilder-classpath-element ../../out?>
<?scenebuilder-classpath-element ../../../out?>
<?scenebuilder-classpath-element ./?>
<?scenebuilder-classpath-element ../../../../../target/classes?>

我的问题是自定义控件未在 Scene Builder 中呈现。在层次树中选择它,它表示“选择包含未解析的引用”。如果我不能拖放自定义控件,这是可以接受的。但是,我真的很想在 Scene Builder 中渲染它并布置其他东西。

我正在使用 IntelliJ IDEA 14 和 Scene Builder 2.0

sample.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import sample.*?>

<?scenebuilder-classpath-element ../../bin?>
<?scenebuilder-classpath-element ../../out?>
<?scenebuilder-classpath-element ../../../out?>
<?scenebuilder-classpath-element ./?>
<?scenebuilder-classpath-element ../../../../../target/classes?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Button fx:id="topButton" layoutY="2.0" mnemonicParsing="false" text="Button Top" />
       <CustomTextField fx:id="myCustomTextField" layoutX="1.0" layoutY="40.0" />
       <Button layoutX="1.0" layoutY="125.0" mnemonicParsing="false" text="Button Bot" />
   </children>
</Pane>

【问题讨论】:

是否按照给定的here在构建器中加载了该fxml文件 所以在 IntelliJ 中,我无法像运行独立应用程序时那样导入 FXML/Jar。查看 sample.fxml(*** fxml 文件)时,我确实尝试在独立应用程序中加载它,但它似乎没有做任何事情。 另外,在你链接的那个例子中,它实际上是为自定义控件创建一个标签,它只是自动复制/复制控件的代码。这对我来说似乎是错误的......而且是维护的噩梦。 我不知道你不能在 IntelliJ 中这样做。上次我在 IntelliJ 之外运行场景构建器。当我从自定义元素创建 jar 文件时,它运行良好(我没有尝试 fxml 版本)。 【参考方案1】:

我能够加载自定义类。我们通过使用自定义类构建一个 .jar 来使其工作,然后在 SceneBuilder 中,转到搜索库旁边的设置图标并导入自定义库。然后找到你的 .jar。也许你可以对 .class 文件做同样的事情?

这是 .fxml 中的导入语句:

<?import com.rlsciences.autoredact.view.ItemsTableView?>

这是我在 .fxml 中使用它的地方:

<ItemsTableView id="searchResultsTableView" fx:id="searchResultsTableView" fixedCellSize="20.0" styleClass="compact-table" VBox.vgrow="ALWAYS">

这是类定义:

package com.rlsciences.autoredact.view;
public class ItemsTableView<S> extends TableView<S>

【讨论】:

以上是关于解决DataX自定义kuduWriter无法解析Blob类型字段的问题的主要内容,如果未能解决你的问题,请参考以下文章

datax源码解析-datax的hook机制解析

Airflow自定义插件, 使用datax抽数

关于-->error LNK2019: 无法解析的外部符号

实战篇:解决swagger和自定义参数解析器的功能冲突

datax的启动文体datax.py解析

datax源码解析-任务拆分机制详解