この問題について私を助けてくれませんか(Teradataのドキュメントでは見つかりませんでしたが、正直言って少し圧倒されます):私のテーブルにはこの列-BAN DECIMAL(9,0)-があり、今は次のように変更したいと思います--BAN DECIMAL(15,0)COMPRESS 0.-どうすればよいですか?とにかく、COMPRESS制約0またはその他の意味は何ですか?これが可能であることを願っています。新しいテーブルを作成してから、古いテーブルからデータをコピーする必要はありません。テーブルは非常に大きいです-そのテーブルからCOUNT(*)を実行すると、次のエラーが発生します:計算中に2616の数値オーバーフローが発生しました
3 に答える
次の 3 つの異なる質問をしました。
DECIMAL(9,0)
列のデータ型を からに変更することはできませんDECIMAL(15,0)
。最善の策は、新しい列 (NEW_BAN) を作成し、古い列から値を割り当て、古い列を削除して、NEW_BAN の名前を BAN に戻すことです)。COMPRESS 0
は制約ではありません。これは、「ゼロ」の値がテーブルから圧縮され、ディスク容量を節約することを意味します。テーブルに2,147,483,647
COUNT(*)
行 (INTEGER の最大値) を超える行があるため、そのエラーが返されます。結果を BIGINT としてキャストします (Catcall で示されます)。
そして、ドキュメンテーションは圧倒される可能性があることに同意します。ただし、辛抱強く、正確なリリースの SQL タイトルだけに注目してください。彼らは本当によく書かれています。
ALTER TABLE の構文図は、列のデータ型を直接変更することをサポートしていないようです。( Teradata SQL DDL ドキュメント)。COMPRESS 0
ゼロを圧縮します。Teradata は、さまざまな種類の圧縮をサポートしています。
ここでの数値オーバーフローは、おそらく整数の範囲を超えたことを意味します。その部分を機能させるには、より大きなデータ型にキャストしてみてください。(これを行うために列のデータ型を変更する必要はありません。)
select cast(count(*) as bigint)
from table_name;
テーブルに値を格納するために必要なバイト境界を超えているためALTER TABLE
、データ型をからに変更するために使用するDECIMAL(9,0)
ことはできません。DECIMAL(15,0)
Teradata 13.10の場合、列データ型の変更に使用する方法の詳細については、 SQLデータ定義言語の詳細トピックに関するTeradataマニュアルの61〜65ページを参照してください。ALTER TABLE