1

2 つのパーティション テーブルがあります。テーブル A は私のメイン テーブルであり、テーブル B はテーブル A の一部の列の正確なコピーである列でいっぱいです。ただし、テーブル A の一致する列がいっぱいであるため、必要なデータを含むテーブル B の列が 1 つあります。ヌルの。

ほとんどが冗長であるため、テーブル B を完全に削除し、テーブル A の一致する列をテーブル B の 1 つの列のデータで更新したいと考えています。

視覚的に、

 Table A:                Table B:
 a     b     c    d      a    b    d
 __________________     ______________
 1    null   11   A      1   joe   A
 2    null   22   B      2   bob   B
 3    null   33   C      3   sal   C

テーブル A の b 列にテーブル B の b 列の値を入力すると、テーブル B は不要になり、削除できます。これら 2 つのテーブルは 2 つの別々のソースから毎日提供されるため、これを繰り返し行う必要があります。

これらのテーブルは両方ともパーティション化されているため、キーを設定できません。

私が試してみました:

 update columnb:(exec columnb from TableB) from TableA; 

しかし、「長さエラー」が発生します。

何らかの方法でこれにアプローチする方法についての提案を歓迎します。

4

1 に答える 1

1

メモリ内の列を置き換えるには、次のようにします。

t1:([]a:1 2 3;b:0N)
a b
---
1
2
3

t2:([]c:`aa`bb`cc;b:5 6 7)
c  b
----
aa 5
bb 6
cc 7


t1,'t2
a b c
------
1 5 aa
2 6 bb
3 7 cc

長さのエラーが発生している場合は、列の数が同じではなく、次の方法で解決できます。このソリューションの明らかな問題は、t2 の列数が t1 よりも少ない場合、データの繰り返しが開始されることです。それがなぜなのかを調べる必要があります。

t1,'count[t1]#t2

パーティションについては、 amend 関数を使用して、パーティション化されたテーブル、テーブル A の日付 2007.02.23 (またはパーティションの日付) の b 列を変更します。これにより、tableB の b 列がメモリに読み込まれ、修正が実行されます。分割ごとに修正を実行する必要があります。

@[`:2007.02.23/tableA/;`b;:;count[tableA]#exec b from select b from tableB where date=2007.02.23]
于 2014-10-03T16:11:36.110 に答える