我将记录从平面文件源导入到SQL表中,该表有4列不接受NULL值。我想要做的是将包含特定4个字段的NULL或空值的记录重定向到平面文件目的地。
您可以在下面看到表格配置:
以下是我的平面文件源中的示例,其中我在第一条记录中清空了county_code,第二条记录中的UCN和第三条记录中的action_id。
如果我按照当前配置运行我的包,则由于约束而错误输出:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true"
android:background="@color/color_toolbar_background"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<ImageView
android:id="@+id/imageViewBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/dimen_16dp"
android:src="@drawable/ic_back_black"/>
<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:gravity="center"
android:text="Title"
android:textColor="@color/color_black_text"
android:textSize="@dimen/dimen_17sp"/>
</android.support.v7.widget.Toolbar>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_0dp"
android:layout_weight="1">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_white"
android:elevation="@dimen/dimen_0dp"
android:visibility="visible"
app:elevation="@dimen/dimen_0dp"
tools:visibility="visible">
<!-- Layout that should scroll off the screen-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#EE9F06"
android:orientation="vertical"
android:padding="@dimen/dimen_16dp"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="lorem ipsum dolor set amet lorem ipsum dolor set amet."
android:textColor="@color/color_white"
android:textSize="@dimen/dimen_12sp"/>
</LinearLayout>
<!-- Progress bar to shown while loding previous messages -->
<include
layout="@layout/layout_load_more_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/appBarLayout"
android:layout_gravity="center"
android:visibility="gone"
tools:visibility="visible"/>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerViewChat"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
<!-- layout for sending message should be at bottom-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/color_toolbar_background"
android:orientation="horizontal">
<EditText
android:id="@+id/editTextMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="@dimen/dimen_10dp"
android:layout_marginLeft="@dimen/dimen_16dp"
android:layout_marginTop="@dimen/dimen_10dp"
android:layout_weight="1"
android:background="@drawable/drawable_chat_send_message_background"
android:hint="@string/string_hint_send_message"
android:inputType="textMultiLine|textNoSuggestions"
android:minHeight="@dimen/dimen_32dp"
android:paddingLeft="@dimen/dimen_5dp"
android:paddingRight="@dimen/dimen_5dp"
android:textColorHint="@color/color_chat_send_message_border"
android:textSize="@dimen/dimen_17sp"/>
<TextView
android:id="@+id/textViewSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:clickable="true"
android:padding="@dimen/dimen_16dp"
android:text="@string/string_send"
android:textColor="@color/color_accent"
android:textSize="@dimen/dimen_17sp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!--Progress bar occupying complete screen below Toolbar -->
<include
layout="@layout/layout_progress_bar_full_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
tools:visibility="visible"/>
</RelativeLayout></LinearLayout>
所以我的问题是如何重定向这些行?我想我应该做一个有条件的分裂,但我不确定,而且我不知道如何配置它。到目前为止,我的尝试都是徒劳的。
有什么建议吗?
答案 0 :(得分:1)
在平面文件源之后添加派生列转换。在那里,您将测试不可为空的列是否为空。
为了便于调试,我会为每个相关列添加一个标记。
null_timestamp return render(request, 'login/home', {'redirect_to':next})
这样的表达式将确定平面文件中的列是否为null或者修剪长度是否为零。
一旦你测试了你的旗帜,你就会添加条件分割。条件拆分基于布尔表达式路由行。我会向它添加一个错误数据输出并使用像
这样的表达式(ISNULL(timestamp) || LEN(RTRIM(timestamp)) == 0) ? true : false
因为它们是布尔值,如果我们将这些值组合在一起(如果其中任何一个是真的)那么整个表达式就变为真,并且行被路由到坏数据路径。
答案 1 :(得分:1)
答案 2 :(得分:0)
首先可以将数据加载到临时表,然后对临时表使用2个单独的查询插入到表中,还是写出到平面文件?