Gtk 分栏列表框

Gtk 分栏列表框
Gtk 分栏列表框

G t k C L i s t (分栏列表构件)是G t k L i s t (列表构件)的替代品,但它提供更多的特性。分栏列表构件是多列列表构件,它有能力处理数千行的信息。每一列都可以有一个标题,而且可以是活动的。你还可以将函数绑定到列选择上。

--------------------------------------------------------------------------------

创建分栏列表构件GtkCList

创建G t k C l i s t构件的方法和创建其他构件的方法是类似的。有两种方法,一种是容易的,一种是难的。因为G t k C L i s t可以有多列,因而在创建它之前,必须确定要创建的列表的列数。

GtkWidget *gtk_clist_new ( gint columns );

GtkWidget *gtk_clist_new_with_titles( gint columns,gchar *titles[] );

第一种方式很简单,而第二种需要作一些解释。每一列都可以有一个与之相联系的标题,标题可以是一个标签构件,或者是一个按钮,只要能够对我们的动作作出响应。如果要使用第二种方式,则必须提供一个指向标题文本的指针,指针数目应该与列数相等。当然,我们可以用第一种方式,然后再手工添加标题以达到相同的目的。

注意,分栏列表构件没有自己的滚动条,如果要提供滚动条功能,应该将分栏列表构件放在一个滚动窗口构件中。

--------------------------------------------------------------------------------

操作模式

有几个可以用于改变分栏列表构件行为的属性。先看下面这个:

void gtk_clist_set_selection_mode( GtkCList *clist,GtkSelectionMode mode );

就像函数名所暗示的一样,它设置了分栏列表的选择模式。第一个参数是要设置的分栏列表构件,第二个参数是单元的选择模式(取值在g t k e n u m s . h中有定义)。目前,有下面这些模式可以使用:

? G T K _ S E L E C T I O N _ S I N G L E:选定内容为N U L L,或包含一个指向单个被选中项目的G l i s t指针。

? G T K _ S E L E C T I O N _ B R O W S E:如果G t k C L i s t中不包含构件,或只包含不敏感的构件,

则选定内容为N U L L。否则,它包含一个指向G L i s t结构的G L i s t指针,因而包含一个列表项。

? G T K _ S E L E C T I O N _ M U LT I P L E:如果没有列表项被选中,选定内容为NULL ;或者选定内容是一个指向第一个被选中列表项的指针。然后依次指向G L i s t结构中第二个被选中的列表项,等等。对G t k C L i s t来说这是缺省模式。

? GTK_SELECTION_EXTENDED:选中内容总是N U L L。

在G T K今后的版本中可能会增加其他模式。

还可以定义分栏列表构件的边框。使用以下函数完成定义:

void gtk_clist_set_shadow_type( GtkCList *clist,GtkShadowType border );

第二个参数可能的取值是:

G T K _ S H A D O W _ N O N E

G T K _ S H A D O W _ I N

G T K _ S H A D O W _ O U T

G T K _ S H A D O W _ E T C H E D _ I N

G T K _ S H A D O W _ E T C H E D _ O U T

--------------------------------------------------------------------------------

操作分栏列表构件列标题

创建分栏列表构件时自动创建相应的标题按钮。标题一般处于分栏列表构件窗口的顶部,它可以是能对鼠标点击响应的普通按钮,也可以仅仅是不会作任何响应的标签。有四个不同的函数调用帮助我们设置标题按钮的状态。

void gtk_clist_column_title_active( GtkCList *clist,gint column );

void gtk_clist_column_title_passive( GtkCList *clist,gint column );

void gtk_clist_column_titles_active( GtkCList *clist );

void gtk_clist_column_titles_passive( GtkCList *clist );

活动标题就是可以对用户动作响应的按钮标题,被动标题仅仅是一个标签。前两个函数激活或停用指定列的标题按钮,后两个激活或禁用整个分栏列表构件的按钮标题。

当然,有时候我们根本就不想使用标题按钮,那么可以用下面的函数显示或隐藏起来:void gtk_clist_column_titles_show( GtkCList *clist );

void gtk_clist_column_titles_hide( GtkCList *clist );

有些情况下,标题对我们非常有用,需要有办法设置或改变它们。可以用以下函数来完成:void gtk_clist_set_column_title( GtkCList *clist,gint column,gchar *title );

注意,一次只能设置一列的标题。如果知道标题应该是什么,应该在开始时用前面介绍的g t k _ c l i s t _ n e w _ w i t h _ t i t l e s函数创建分栏列表并设置标题。这样可以节省编写代码的时间,并且让程序更小。当然也有一些情况下手工设置这些值可能更好。有时候不是所有的标题都是文本。G t k C L i s t构件为我们提供的标题按钮实际上能够和所有的构件结合起来使用,例如,它可以和p i x m a p构件结合起来,在上面显示一幅图片。使用下面得用函数可以为标题按钮设置构件:

void gtk_clist_set_column_widget( GtkCList *clist,

gint column,

GtkWidget *widget );

--------------------------------------------------------------------------------

操纵列表

可以用以下的函数设置一列的对齐方式:

void gtk_clist_set_column_justification( GtkCList *clist,

gint column,

GtkJustification justification );

G t k J u s t i f i c a t i o n参数类型可取以下值:

? GTK_JUSTIFY_LEFT:列中的文本左对齐。

? GTK_JUSTIFY_RIGHT:列中的文本右对齐。

? GTK_JUSTIFY_CENTER:列中的文本居中对齐。

? G T K _ J U S T I F Y _ F I L L:文本使用列中所有可用的空间。它通常会在单词间插入额外的空格(如果是一个单词,会在单个字母间加空格)。许多“所见即所得”的文本编辑器具有这种特性。

下面的函数非常重要,在设置G t k C L i s t构件时应该作为标准加以使用。创建构件时各列的宽度是依据它们的标题确定的,因为多数情况下这不一定正确,用下面的函数设置列宽度:void gtk_clist_set_column_width( GtkCList *clist,

gint column,

gint width );

注意,宽度是以像素度量,而不是以字母度量的。这对某列的单元格的高度也是同样的,但是缺省值是当前字体的高度,这对应用程序来说并不是至关重要的。用下面的函数设置行高度:

void gtk_clist_set_row_height( GtkCList *clist,gint height );

再次强调,高度也是以像素度量的。

可以在没有用户干预的情况下在列表之间随意移动,不过,我们需要能够直接跳到所需要的行和列,并且这个单元格应该是可见的。换句话说,就是我们应该能滚动列表,让单元格直接出现在可见的位置上。下面这个函数实现了这一点:

void gtk_clist_moveto( GtkCList *clist,

gint row,

gint column,

gfloat row_align,

gfloat col_align );

其中,r o w _ a l i g n参数很重要。它是一个介于0 . 0和1 . 0之间的值,0 . 0意味着应该滚动列表,让所在行出现在顶部,如果r o w _ a l i g n的值是1 . 0,该行会出现在底部。所有介于0 . 0到1 . 0之间的其他值表示位于顶部和底部之间的行。最后一个参数c o l _ a l i g n 和r o w _ a l i g n的作用一样,不过0 . 0是指左边,1 . 0是指右边。根据应用程序的需要,我们不需要滚动那些我们已经能够看见的单元格。所以,怎样才能知道单元格是不是可见的呢?有一个函数能够做到这一点:

GtkVisibility gtk_clist_row_is_visible( GtkCList *clist,gint row );

返回值可能是以下几个值之一:

? GTK_VISIBILITY_NONE 不可见

? GTK_VISIBILITY_PA RTIAL 部分可见

? GTK_VISIBILITY_FULL 全部可见

注意,现在只能知道某一行是否可见,还没有办法知道某列是否可见。但是你仍然可以获得部分信息,因为当调用上面的函数,返回值是G T K _ V I S I B I L I T Y _ PA RT I A L时,它的某一部分是隐藏的,无法知道到底是被列表的顶部或底部挡住,还是这一行的某列在外边。你还能改变特定列的前景色和背景色。这可用在当用户选中某行时标记该行。它有两个相关函数:

设置前景颜色:

void gtk_clist_set_foreground( GtkCList *clist,gint row,GdkColor *color );

设置背景颜色:

void gtk_clist_set_background( GtkCList *clist,gint row,GdkColor *color );

请注意颜色值必须是前面已经分配的。

--------------------------------------------------------------------------------

向列表中添加行

可以用三种方法添加行。用下面函数可以在前面、后面加入行:

gint gtk_clist_prepend( GtkCList *clist,gchar *text[] );

gint gtk_clist_append( GtkCList *clist,gchar *text[] );

这两个函数返回整数值指明加入到列表中的行的索引号。可以用以下函数在指定位置插入一行:

void gtk_clist_insert( GtkCList *clist,

gint row,

gchar *text[] );

在这些函数中我们要提供一个指向要插入行的文本数组的指针。指针的个数应该等于列表的列数,如果t e x t [ ]参数是N U L L,这一行的列中就没有文本。当我们想向列表中添加图片时可以这么做。

要注意,行和列的编号都是从0开始的。

用以下函数删除一行:

void gtk_clist_remove( GtkCList *clist,gint row );

还有一个函数可以用于删除列表中所有的行。这比对每一行调用一次g t k _ c l i s t _ r e m o v e函数要来得快。

void gtk_clist_clear( GtkCList *clist );

还有两个很方便的函数可以用在当列表中要发生很大变化时。因为G t k C L i s t在发生变化时要重绘自身,所以当列表中内容变化较大时,频繁重绘会让屏幕不停闪烁。最好的办法是先将列表“冻结”,然后更新列表,最后将其“解冻”。

“冻结”构件:

void gtk_clist_freeze( GtkCList * clist );

将构件“解冻”:

void gtk_clist_thaw( GtkCList * clist );

--------------------------------------------------------------------------------

在单元格中设置文本和pixmap图片

单元格可以容纳p i x m a p图片、文本或同时包含两者。你可以使用以下函数:

void gtk_clist_set_text( GtkCList *clist,

gint row,

const gchar *text );

void gtk_clist_set_pixmap( GtkCList *clist,

gint row,

gint column,

GdkPixmap *pixmap,

GdkBitmap *mask );

void gtk_clist_set_pixtext( GtkCList *clist,

gint row,

gint column,

gchar *text,

guint8 spacing,

GdkPixmap *pixmap,

GdkBitmap *mask );

这些函数应该很容易理解。它们都将要操作的C l i s t构件作为第一个参数,第二、三个参数是行或列号,紧接着是要设置的数据。gtk_clist_set_pixtext 函数中的s p a c i n g参数是p i x m a p图片和文本起始点之间的间距。上面的函数中数据都被复制到G t k C L i s t构件中。用以下函数可以读出相应的数据:

gint gtk_clist_get_text( GtkCList *clist,

gint row,

gint column,

gchar **text );

gint gtk_clist_get_pixmap( GtkCList *clist,

gint row,

gint column,

GdkPixmap **pixmap,

GdkBitmap **mask );

gint gtk_clist_get_pixtext( GtkCList *clist,

gint row,

gint column,

gchar **text,

guint8 *spacing,

GdkPixmap **pixmap,

GdkBitmap **mask );

返回的指针都是指向存储在构件内部的数据指针,所以不应该被修改或释放。引用的数据没有必要将不感兴趣的数据全部读出。任何返回值指针(除了G t k C L i s t构件)都可以是N U L L。所以如果我们只想从类型为p i x t e x t的单元格中读出文本,应该像下面这样做,假定c l i s t,r o w,c o l u m n都已经存在:

gchar *mytext;

gtk_clist_get_pixtext(clist, row, column,

&mytext, NULL, NULL, NULL);

还有与上面内容相关的几个函数,下面这个函数将返回指定单元格的数据类型:GtkCellType gtk_clist_get_cell_type( GtkCList *clist,

gint row,

返回单元格内的数据类型,返回值可能是以下值之一:

GTK_CELL_EMPTY 单元格内是空的

GTK_CELL_TEXT 单元格内是文本

GTK_CELL_PIXMAP 单元格内是P i x m a p图像

GTK_CELL_PIXTEXT 单元格内同时包含文本和图像

GTK_CELL_WIDGET 单元格内包含构件

还有一个函数可以用于设置单元格内水平和垂直方向上的缩排,缩排值是以像素度量的整数值,它可以是正数也可以是负数。

void gtk_clist_set_shift( GtkCList *clist,

gint row,

gint column,

gint vertical,

gint horizontal );

--------------------------------------------------------------------------------

存储数据指针

对G t k C L i s t构件来说,可以为一行设置数据指针。指针对用户来说是不可见的。它可方便程序员将某一行与一些其他数据联系起来。下面函数的意义从字面上就可以理解。

为指定的行设置数据:

void gtk_clist_set_row_data( GtkCList *clist,

gint row,

gpointer data );

与上面的函数类似,只是当销毁一行时调用由d e s t o r y指定的回调函数:

void gtk_clist_set_row_data_full( GtkCList *clist,

gint row,

gpointer data,

GtkDestroyNotify destroy );

获取指定行的数据:

gpointer gtk_clist_get_row_data( GtkCList *clist,gint row );

在构件中搜索d a t a所在的行。如果返回- 1,则没有找到,或者没有匹配的:

gint gtk_clist_find_row_from_data( GtkCList *clist,gpointer data );

--------------------------------------------------------------------------------

处理选择

有几个函数可以让我们强行选中或取消一行的选择:

void gtk_clist_select_row( GtkCList *clist,

gint row,

gint column );

void gtk_clist_unselect_row( GtkCList *clist,

gint row,

还有一个函数使用x、y坐标(例如,从鼠标指针得到坐标),返回坐标所在的行和列。

gint gtk_clist_get_selection_info( GtkCList *clist,

gint x,

gint y,

gint *row,

gint *column );

当我们监测到一些有趣的事件时(也许是鼠标指针的移动,或在列表的某处点击),可以读出鼠标的坐标值,找出鼠标正在列表的某一格。

--------------------------------------------------------------------------------

信号

与其他构件一样,G t k C L i s t 有一些信号供我们使用。G t k C L i s t 构件是从容器构件G t k C o n t a i n e r派生的,它有容器所具有的一些信号,还有下面这些附加信号:

? s e l e c t _ r o w:选中一行时引发,该信号传递以下信息,依次是GtkCList *clist、gint row、gint column、GtkEventButton *event。

? unselect_row:用户对一行取消选择,引发这个信号。传递的信息与上一个信号一样。

? click_column:选中某一列时引发。传递以下信息:GtkCList *clist、gint column。

所以,要将一个回调函数连接到s e l e c t _ r o w信号上,回调函数应该像下面这样:

void select_row_callback(GtkWidget *widget,

gint row,

gint column,

GdkEventButton *event,

gpointer data);

回调函数用下面的形式连接到信号:

gtk_signal_connect(GTK_OBJECT( clist),

" s e l e c t _ r o w "

G T K _ S I G N A L _ F U N C ( s e l e c t _ r o w _ c a l l b a c k ) ,

N U L L ) ;

--------------------------------------------------------------------------------

GtkCList示例

/* CLIist示例开始clist.c */

#include

/* 用户点击"Add List"按钮时的回调函数* /

void button_add_clicked( gpointer data )

{

int indx;

/* 字符串数组,用于加到l i s t中,4行2列* /

gchar *drink[4][2] = { { "Milk", "3 Oz" },

{ "Water", "6 l" },

{ "Carrots", "2" },

{ "Snakes", "55" } };

/ *下面将文本真正加到l i s t中。对每行添加一次* /

for ( indx=0 ; indx < 4 ; indx++ )

gtk_clist_append( (GtkCList *) data, drink[indx]);

r e t u r n ;

}

/ *用户点击"Clear List"按钮时的回调函数* /

void button_clear_clicked( gpointer data )

{

/* 用g t k _ c l i s t _ c l e a r函数清除列表。比用

* g t k _ c l i s t _ r e m o v e函数逐行清除要快* /

gtk_clist_clear( (GtkCList *) data);

r e t u r n ;

}

/* 用户点击"Hide/Show title按s"钮时的回调函数* /

void button_hide_show_clicked( gpointer data )

{

/* flag是用于记录可见/不可见状态的标志。0 = 当前不可见* / static short int flag = 0;

if (flag == 0)

{

/* 隐藏标题,将f l a g设置为1 */

gtk_clist_column_titles_hide((GtkCList *) data);

f l a

g + + ;

}

e l s e

{

/* 形式标题,将f l a g设置为0 */

gtk_clist_column_titles_show((GtkCList *) data);

f l a

g - - ;

}

r e t u r n ;

}

/* 用户选中某一行时的回调函数* /

void selection_made( GtkWidget *clist,

gint row,

gint column,

GdkEventButton *event,

gpointer data )

{

gchar *text;

/* 取得存储在被选中的行和列的单元格上的文本

* 当鼠标点击时,我们用t e x t参数接收一个指针* /

gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);

/ *打印一些关于选中了哪一行的信息* /

g_print("You selected row %d. More specifically you clicked in "

"column %d, and the text in this cell is %s\n\n",

row, column, text);

r e t u r n ;

}

int main( int argc,

gchar *argv[] )

{

GtkWidget *window;

GtkWidget *vbox, *hbox;

GtkWidget *scrolled_window, *clist;

GtkWidget *button_add, *button_clear, *button_hide_show;

gchar *titles[2] = { "Ingredients", "Amount" };

gtk_init(&argc, &argv);

w i n d o w = g t k _ w i n d o w _ n e w ( G T K _ W I N D O W _ T O P L E V E L ) ;

gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);

gtk_window_set_title(GTK_WINDOW(window), "GtkCList Example");

g t k _ s i g n a l _ c o n n e c t ( G T K _ O B J E C T ( w i n d o w ) ," d e s t r o y " ,

G T K _ S I G N A L _ F U N C ( g t k _ m a i n _ q u i t ) ,N U L L ) ;

vbox=gtk_vbox_new(FALSE, 5);

gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);

gtk_container_add(GTK_CONTAINER(window), vbox);

g t k _ w i d g e t _ s h o w ( v b o x ) ;

/* 创建一个滚动窗口构件,将G t k C L i s t组装到里面。

* 这样使得内容超出列表时,可以用滚动条浏览* /

scrolled_window = gtk_scrolled_window_new (NULL, NULL);

gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),

G T K _ P O L I C Y _ A U T O M A T I C ,

G T K _ P O L I C Y _ A L W A Y S ) ;

gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);

gtk_widget_show (scrolled_window);

/* 创建G t k C L i s t构件。本例中,我们使用了两列* /

clist = gtk_clist_new_with_titles( 2, titles);

/* 当作出选择时,我们要知道选择了哪一个单元格。使用selection_mad回e调函数,代码在下面可以看见* /

gtk_signal_connect(GTK_OBJECT(clist), "select_row",

G T K _ S I G N A L _ F U N C ( s e l e c t i o n _ m a d e ) ,N U L L ) ;

/* 不一定要设置边框的阴影,但是效果挺不错* /

gtk_clist_set_shadow_type (GTK_CLIST(clist), GTK_SHADOW_OUT);

/* 很重要的一点,我们设置列宽,让文本能容纳在列中。注意,列编号是从0开始的本

例中是0和1* /

gtk_clist_set_column_width (GTK_CLIST(clist), 0, 150);

/* 将G t k C L i s t构件添加到滚动窗口构件中,然后显示* /

gtk_container_add(GTK_CONTAINER(scrolled_window), clist);

g t k _ w i d g e t _ s h o w ( c l i s t ) ;

/ *创建按钮,把它们加到窗口中* /

hbox = gtk_hbox_new(FALSE, 0);

gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);

g t k _ w i d g e t _ s h o w ( h b o x ) ;

button_add = gtk_button_new_with_label("Add List");

button_clear = gtk_button_new_with_label("Clear List");

button_hide_show = gtk_button_new_with_label("Hide/Show titles");

gtk_box_pack_start(GTK_BOX(hbox), button_add, TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(hbox), button_clear, TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(hbox), button_hide_show, TRUE, TRUE, 0);

/* 为三个按钮的点击设置回调函数* /

gtk_signal_connect_object(GTK_OBJECT(button_add), "clicked",

G T K _ S I G N A L _ F U N C ( b u t t o n _ a d d _ c l i c k e d ) ,(gpointer) clist);

gtk_signal_connect_object(GTK_OBJECT(button_clear), "clicked",

G T K _ S I G N A L _ F U N C ( b u t t o n _ c l e a r _ c l i c k e d ) ,(gpointer) clist);

gtk_signal_connect_object(GTK_OBJECT(button_hide_show), "clicked",

G T K _ S I G N A L _ F U N C ( b u t t o n _ h i d e _ s h o w _ c l i c k e d ) ,(gpointer) clist);

g t k _ w i d g e t _ s h o w ( b u t t o n _ a d d ) ;

g t k _ w i d g e t _ s h o w ( b u t t o n _ c l e a r ) ;

g t k _ w i d g e t _ s h o w ( b u t t o n _ h i d e _ s h o w ) ;

/* 界面已经完全设置好了,下面可以显示窗口,进入gtk_main主循环* /

g t k _ w i d g e t _ s h o w ( w i n d o w ) ;

g t k _ m a i n ( ) ;

r e t u r n ( 0 ) ;

}

/ *示例结束* /

编译后,运行效果如图11 - 1所示。点击Add List按钮,向列表中添加列表项;点击Clear List 按钮,清除所有列表项;点击Hide/Show titles,轮换显示和隐藏列表标题

如何在Word文档分栏打印时设置各栏的页码

网事难踢的如何在Word文档分栏打印时设置各栏的页码我们在使用文档分栏打印的时候,需要设置各栏的页码,特别是在试卷编制,学案编制的时候,很需要一个简洁的形式,一般的时候就是使用文本框打印,这样很麻烦,也不是很美观。我在此提供大家一个比较实用的办法——设置页脚法,供大家借鉴。 在Word文档中设置分栏后,尽管一页中有两栏或者多栏文字,但使用“插入页码”命令,却只能在该页中插入同一个页码。下面我以分两栏为例,介绍一下为分栏设置不同的页码的方法: 1.单击“视图”菜单下的“页眉和页脚”,切换至页脚。 2.在与左栏对应的合适位置输入“第页”,将光标插在两字中间,连续按两下Ctrl+F9键,出现两个大括号“{{}}”。 3.然后在“{}”中输入字符,形成这个样子:{={page}*2-1},注意用英文状态来输。 (如果只要显示页码,左栏就输成:{={page}*2-1},右栏:{={page}*2}。 如果要显示成:第X页,左栏就输成:第{={page}*2-1}页,右栏:第{={page}*2}页。)(这就够用的了吧。呵呵) 4.完成后选中“{={PAGE}*2-1}”,单击鼠标右键选择快捷菜单中的“切换域代码”,出现“第1页”。 5.在与右栏对应的合适位置输入“第页”,将光标插在两字中间,连续按两下Ctrl+F9键,出现两个大括号“{{}}”。 6.然后在大括号“{}”中输入如下字符“{={PAGE}*2}”。 7.完成后选中“{={PAGE}*2}”,单击鼠标右键选择快捷菜单中的“切换域代码”,出现“第2页”。 如果你的文档分为三栏,并要在每栏下显示页码,可以将“第页”之间的域代码修改为“{={PAGE}*3-2}”、“{={PAGE}*3-1}”和“{={PAGE}*3}”(更多分栏时同理)。 再按上面介绍的方法切换域代码,即可显示各栏的正确页码。若要在切换域代码后修改域代码,可以将其选中,单击鼠标右键,选择快捷菜单中的“切换域代码”命令,即可显示出域代码。 如果一页分三栏,则公式分别是: {={page}*3-2} {={page}*3-1} {={page}*3} 对应的值分别是:123 8.如果要加上“共xx页”的字样,可以这样做:单击“插入”——“域”——“等式和公式”——“= (Formula)”,在输入框“=”后面输入“1*2”,确定。选中“1”,单击右键,选“切换域代码”,将“*”前的“1”选中,单击“插入”——“域”——“文档信息”——“NumPages”,确定。如果域代码有什么不妥,可将其选中单击右键,选“更新域”。(这个很麻烦,可以往下看,嘿嘿) 插入“共xx页”,还可以和插入页码一样,只是把“第{={page}*2-1}页”改为“共{={numpages}*2}页”即可。

整理和总结hive sql

进入hive shell #hive或者hive --service cli Hive 的启动方式: hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入hive –service cli hive web界面的启动方式,hive –service hwi hive 远程服务(端口号10000) 启动方式,hive --service hiveserver hive 远程后台启动(关闭终端hive服务不退出): nohup hive -–service hiveserver & 显示所有函数: hive> show functions; 查看函数用法: hive> describe function substr; 查看hive为某个查询使用多少个MapReduce作业 hive> Explain select a.id from tbname a; -------------------------------------------------------------------------- 表结构操作: 托管表和外部表 托管表会将数据移入Hive的warehouse目录;外部表则不会。经验法则是,如果所有处理都由Hive完成, 应该使用托管表;但如果要用Hive和其它工具来处理同一个数据集,则使用外部表。 创建表(通常stored as textfile): hive> create table tbName (id int,name string) stored as textfile; 创建表并且按分割符分割行中的字段值(即导入数据的时候被导入数据是以该分割符划分的,否则导入后为null,缺省列为null); hive> create table tbName (id int,name string) row format delimited fields terminated by ','; 创建外部表: hive>create external table extbName(id int, name string); 创建表并创建单分区字段ds(分区表指的是在创建表时指定的partition的分区空间。): hive> create table tbName2 (id int, name string) partitioned by (ds string); 创建表并创建双分区字段ds: hive> create table tbname3 (id int, content string) partitioned by (day string, hour string); 表添加一列: hive> alter table tbName add columns (new_col int); 添加一列并增加列字段注释: hive> alter table tbName add columns (new_col2 int comment 'a comment'); 更改表名: hive> alter table tbName rename to tbName3; 删除表(删除表的元数据,如果是托管表还会删除表的数据): hive>drop table tbName; 只删除内容(只删除表的内容,而保留元数据,则删除数据文件): hive>dfs –rmr ‘warehouse/my-table’; 删除分区,分区的元数据和数据将被一并删除: hive>alter table tbname2 drop partition (dt='2008-08-08', hour='09'); -------------------------------------------------------------------------- 元数据存储(从HDFS中将数据导入到表中都是瞬时的):

hive自定义函数说明

Hive自定义函数说明函数清单:

用法: getID 通过UUID来生成每一行的唯一ID: select getid() ; oracle_concat hive的concat函数遇到空值的情况下会直接返回空,而在oracle中对于字符串类型空字符串与null是等价对待的 select default.oracle_concat('ff-',null,'','--cc'); Select concat('ff-',null,'','--cc'); getBirthDay 从身份证号码中截取生日信息,返回日期格式为’yyyy-MM-dd’

getGoodsInfo self_date_format 为格式化来自oracle的时间格式,将格式为’yyyy/MM/dd’和’yyyy/MM/dd HH:mm:ss’的日期格式转换为’yyyy-MM-dd’ Select default. self_date_format(‘2012-12-12’); Select default. self_date_format(‘20121212’,’yyyyMMdd’); oracle_months_between 由于当前版本hive不带months_between函数,所以添加 oracle_decode hive中的decode函数为字符编码函数和encode对应。Oracle中decode函数类似case when 函数,添加oracle_decode函数减少sql的改写。与为与oracle功能同步,本函数将null和字符串’’等价对待。 select default.oracle_decode('',null,1,2) r1, default.oracle_decode(null,'',1,2) r2, default.oracle_decode('aaa','','Nnull','aaa','is a*3','aaa') r3, default.oracle_decode('ccc','', 'Nnull','aaa','is a*3','aaa') r4, default.oracle_decode('','', 'Nnull','aaa','is a*3','aaa') r5; BinomialTest _FUNC_(expr1, expr2, p_value, alternativeHypothesis) alternativeHypothesis: 接受指定值的字符串 取值:TWO_SIDED , GREATER_THAN , LESS_THAN 二项分布检测函数。实现oracle中的二项分布检测功能。 计算expr1 等于exper2 的值占数据总数的二项分布检测结果,类型依据alternativeHypothesis 确定

多列组合框和列表框的设置

技巧1 多列组合框和列表框的设置 1-1 多列组合框和列表框添加列表项 如果组合框和列表框是多列的话,除了使用错误!未找到引用源。的方法外,还需要设置控件的其他属性,如下面的代码所示。 #001 Private Sub UserForm_Initialize() #002 Dim iRow As Integer #003 Dim Arr As Variant #004 iRow = Sheet1.Range("A65536").End(xlUp).Row #005 Arr = Sheet1.Range("A1:G" & iRow) #006 With Me.ListBox1 #007 .ColumnCount = 7 #008 .ColumnWidths = "45,45,45,45,45,30,45" #009 .BoundColumn = 1 #010 .Column = Application.WorksheetFunction.Transpose(Arr) #011 End With #012 End Sub 代码解析: 在窗体初始化时为多列列表框添加列表项。 第4行代码,设置列表框显示的列数。ColumnCount 属性指定列表框或组合框的显示列数,语法如下: object.ColumnCount [= Long] 参数object是必需的,一个有效的对象。 参数Long是可选的,指定需显示的列数。 如果将ColumnCount设为-1,将显示所有列。 第8行代码,设置列表框各列的宽度。ColumnWidths 属性指定多列的组合框或列表框中的各列的宽度,语法如下:

《使用“分栏”设置版面》教学设计

《使用“分栏”设置版面》教学设计 第五单元《版面设置》教学设计 第1课时:使用“分栏”设置版面 一、教材分析 在当今信息社会,文字处理已经成为我们生活和学习中不可缺少的工具软件之一。作为七年级的学生,已经对文字处理有了一个初步的认识,在此基础上,我们进一步让学生明白,在文字处理过程中版面的设置也非常重要。本单元三课时,设置页面,使用“分栏”设置版面,使用“文本框”设置版面,此为第二课时。在授课的教程中,教师可充分利用教材“做一做”“金钥匙”“小博士”“试试看”等环节,让学生通过“导学”“自学”“互学”“测学”“思学”五个步骤来完成本节课的教学目标和教学重难点。 二、学情分析 从教材的定位和编排体系上看,本节的内容在页面设置的基础上,着生强调分栏排版的作用和意义,对七年级下半期的学生来说,通过自学应该有90%的学生都会顺利地完成通过“分栏”对话框来完成基本的操作设置,关键的问题是在一个文档中,哪些内容是我们应该用“分栏”进行设置的,设置后版面合理、美观。这可能是学生在操作时感到困惑的内容,教师在授课时应给予适当的引导。 三、教学目标 (1)知识与技能:让学生了解可以通过分栏来设置版面,学会在Word文档中运用分栏来设置版面。 (2)过程与方法:在教学过程中以教师为主导,以学生为主体,通过“导学”“自学”“互学”“测学”“思学”五个步骤,由浅入深地学会通过分栏设置版面的过程。 (3)情感态度与价值观:在尝试通过分栏设置版面的同时,培养学生的学习习惯;通过“导学”“自学”“互学”“测学”“思学”,培养学生的自学能力、协作能力和主动解决问题的能力。 四、教学重点 了解利用“分栏”设置版面,掌握分栏的方法,学会运用分栏来设置版面。 五、教学难点

hive函数大全

目录 一、关系运算: (4) 1. 等值比较: = (4) 2. 不等值比较: <> (4) 3. 小于比较: < (4) 4. 小于等于比较: <= (4) 5. 大于比较: > (5) 6. 大于等于比较: >= (5) 7. 空值判断: IS NULL (5) 8. 非空判断: IS NOT NULL (6) 9. LIKE比较: LIKE (6) 10. JAVA的LIKE操作: RLIKE (6) 11. REGEXP操作: REGEXP (7) 二、数学运算: (7) 1. 加法操作: + (7) 2. 减法操作: - (7) 3. 乘法操作: * (8) 4. 除法操作: / (8) 5. 取余操作: % (8) 6. 位与操作: & (9) 7. 位或操作: | (9) 8. 位异或操作: ^ (9) 9.位取反操作: ~ (10) 三、逻辑运算: (10) 1. 逻辑与操作: AND (10) 2. 逻辑或操作: OR (10) 3. 逻辑非操作: NOT (10) 四、数值计算 (11) 1. 取整函数: round (11) 2. 指定精度取整函数: round (11) 3. 向下取整函数: floor (11) 4. 向上取整函数: ceil (12) 5. 向上取整函数: ceiling (12) 6. 取随机数函数: rand (12) 7. 自然指数函数: exp (13) 8. 以10为底对数函数: log10 (13) 9. 以2为底对数函数: log2 (13) 10. 对数函数: log (13) 11. 幂运算函数: pow (14) 12. 幂运算函数: power (14) 13. 开平方函数: sqrt (14) 14. 二进制函数: bin (14)

(已读)第十二章列表框和组合框

第十二章列表框和组合框 列表框是显示一系列项供用户选择的控件,对选中的项可以进行后续的处理。用户选择可以是多项的,但本章的例程设计为单选的。组合框是一个编辑框带一个可以下拉的列表框,用户在下拉框中选择的项会进入编辑框中,再进行后续处理,选择也可以用键盘的光标键。在编辑框中也可以直接输入。 本章要点 1 列表框的设计、项的添加和删除 2 组合框的设计和使用 12.1 ListCombo程序运行时的界面和功能 chap12-01 List1在初始化时加入了六项。点击[<]按钮就把选中的项移动到List2中去。点击[>]按钮则相反。点击[<<]和[>>]按钮则移动全部项。用[清除列表]按钮可删除List1的全部项。[加入到]按钮把你选中的在编辑框中项添加到List1中,[加入全部]按钮则把组合框设置的所有项添加到List1中。组合框预置了“中国”这一项,但没有设计删除功能。列表框和组合框都有一个从0开始的整数索引和一个用于显示的文本。 12.2 对话框界面设计 按控件属性表设计界面。 控件类型 标题 ID and Genaral Styles Extended Styles listBox IDC_LIST1 显示checked 选择Simple,Border Virteber scroll 无

listBox IDC_LIST2 显示checked 选择Simple,Border Virteber scroll 无 ComboBox IDC_CONTRIES_COMBO 显示checked 类型:Drop list Virteber scroll Static edge Button < IDC_MOVE_BUTTON 无 无 Button > IDC_BACK_BUTTON 无

Excel2007表格实现分栏

Excel2007表格实现分栏 我们在打印表格时,经常碰到这种列数较少行数很多的表格,而Excel表格又没有提供类似Word软件的分栏功能,怎么办呢?像Word一样自由分栏 我们都知道,Excel和Word同属于微软Office软件套装,可以很方便地共享部分数据内容,不妨借助Word软件的分栏功能,来实现Excel表格的分栏操作,具体操作方法如下。 选定要分栏的Excel表格,执行“复制”命令,然后新建一个Word文档,执行“粘贴”命令,单击选定表格,执行“页面布局/分栏”命令,通过“分栏”对话框,设置具体的分栏数并勾选“栏宽相等”项,将分栏操作应用于“所选文字”,单击“确定”完成表格分栏操作,但只有第一页的第一栏有标题行,并且其他各栏都没有表格的上边框。 先选定表格,右击执行“表格属性/边框和底纹/边框/全部”命令,为分栏的表格设置完成的边框。然后再选中第一页第一栏的表格标题行,执行“表格工具/布局/数据/重复标题行”命令,就可以将每一栏表格都设置成相同的表格标题行了。 由于安装Excel软件的电脑通常都会安装Word,因而通过Word对Excel表格进行分栏的方法不需要下载安装软件,操作也不太难。然而,经过Word分栏表格,无法进行类似Excel 的顶端标题行设置(可以为每一页文档都设置一个相同文档标题和表格标题行),只能在第一页中输入文档标题,而其他页面则不方便设置。虽然通过页眉设置,可以为每一个页面都设置相同的标题,但是版面效果却不如在Excel中设置那么美观。 用工具实现规则分栏 上面的方法虽然简单,在一般的情况下可以直接使用,但如果碰到对表格设计要求较高的情况,还是在Excel中直接进行分栏最理想,便于排版打印时设置顶端标题行。这时可以下载安装一款用于Excel表格分栏的软件——“多排表工具”,它可以帮助我们在Excel中快速实现类似Word和WPS软件中的“分栏”功能,并且版面设置更加美观,具体操作方法如下。 首先在分栏的表格上方输入标题内容,并进行必要的格式设置,然后执行“页面设置/打印标题/工作表”命令,设置工作表打印的顶端标题行(如“$1:$3”),并根据最终的输出纸张进行

HiveQL详解

HiveQL详解 HiveQL是一种类似SQL的语言, 它与大部分的SQL语法兼容, 但是并不完全支持SQL标准, 如HiveQL不支持更新操作, 也不支持索引和事务, 它的子查询和join操作也很局限, 这是因其底层依赖于Hadoop云平台这一特性决定的, 但其有些特点是SQL所无法企及的。例如多表查询、支持create table as select和集成MapReduce脚本等, 本节主要介绍Hive的数据类型和常用的HiveQL操作。 1.hive client命令 a.hive命令参数 -e: 命令行sql语句 -f: SQL文件 -h, --help: 帮助 --hiveconf: 指定配置文件 -i: 初始化文件 -S, --silent: 静态模式(不将错误输出) -v,--verbose: 详细模式 b.交互模式 hive> show tables; #查看所有表名 hive> show tables 'ad*' #查看以'ad'开头的表名 hive>set命令 #设置变量与查看变量; hive>set-v #查看所有的变量 hive>set hive.stats.atomic #查看hive.stats.atomic变量 hive>set hive.stats.atomic=false #设置hive.stats.atomic变量 hive> dfs -ls #查看hadoop所有文件路径 hive> dfs -ls /user/hive/warehouse/ #查看hive所有文件 hive> dfs -ls /user/hive/warehouse/ptest #查看ptest文件 hive> source file #在client里执行一个hive脚本文件 hive> quit #退出交互式shell hive>exit #退出交互式shell hive> reset #重置配置为默认值 hive> !ls #从Hive shell执行一个shell命令 2.操作及函数 查看函数: hive> show functions; 正则查看函数名: show functions 'xpath.*'; 查看具体函数内容:

Word插入页码_分栏后如何设置页码

Word插入页码概述 分栏后如何设置页码? 在页脚中按两次Ctrl+F9键,出现两对大括号{{}},然后改为以下内容:{={PAGE}*2-1} (注意不要改动大括号)。然后在最后一个大括号后输入几个空格,再重复上述操作,将后一个大括号的内容改为{={PAGE}*2}。然后选中页脚的所有内容,按Shift+F9键。出现页码后,调整页码位置。 Word插入页码概述 当我们选择“插入”→“页码”选项时,会弹出“页码属性设置对话框”。 ①页面顶端(页眉) 对于一些书刊或是报纸,在发行时都会在每页的最上方打上自己刊物的名称或是重要的章节说明,使用插入页码中的页面顶端,然后双击页码,将文字改为刊物名称就可以做到。 ②页面底端(页脚) 一般的页码都插入在页面底端,这时可再用对齐方式对页码的位置进行编辑。 ③页面纵向中心 ④纵向内侧 ⑤纵向外侧 这三项是对一些侧边装订的文件以及书籍的页码与角边说明的应用方式,利用这三项,可以对侧边装订的刊物居中或是正反页的页码进行编辑。 一、直接插入页码 启动Word2002(其它版本请仿照操作),打开需要添加页码的文档,执行“插入页码”命令,打开“页码”对话框,设置好相关选项后,确定返回,即可将页码插入到页面相应位置上。 小技巧:单击“页码”对话框中的“格式”按钮,打开“页码格式”对话框,可以设置页码的一些高级格式。 二、页码装饰 ①执行“视图页眉和页脚”命令,进入“页眉和页脚”编辑状态,并展开“页眉和页脚”工具条(如图1)。 ②单击工具格上的“在页眉和页脚间切换”按钮,切换到页脚编辑区(我们习惯将页码放在页脚处)。 ③单击工具条上的“插入页码”按钮,将页码插入到页脚中,并调整好对齐方式。 ④将光标定在页码的前(后),插入用于修饰的字符。 ⑤单击工具条上的“关闭”按钮返回即可。 三、一页显示多个页码 有时,我们将文档分成多栏(如编辑试卷时,通常分成两栏),并希望在每一栏下面都显示出页码来。 ①进入页脚编辑区。

常用函数大全

常用函数大全 mysql_affected_rows
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_fetch_array —从结果集中取得一行作为关联数组或数字数组或二者兼 有:
mysql_fetch_array($result, MYSQL_NUM) , MYSQL_NUM 可用 MYSQL_BOTH 或
MYSQL_ASSOC 代替,也可以不写,默认为 MYSQL_BOTH
mysql_fetch_row — 从结果集中取得一行作为枚举数组: mysql_fetch_row($result); mysql_fetch_assoc($result)
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果 的列储存在一个数组的单元中,偏移量从 0 开始。 依次调用 mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回 FALSE。 mysql_fetch_assoc — 从结果集中取得一行作为关联数组 :
mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它 仅仅返回关联数组。这也是 mysql_fetch_array()起初始的工作方式。如果在关联索引之外还需要数字 索引,用 mysql_fetch_array()。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,要么用 mysql_fetch_row()来取得数字索引或给该列起个别名。参见 mysql_fetch_array() 例子中有关别名说 明。 有一点很重要必须指出,用 mysql_fetch_assoc()并不明显 比用 mysql_fetch_row()慢,而且还提供了 明显更多的值。
mysql_query()
仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,
如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明 任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

GTK图形界面编程-计算器的实现

目录 一.课程设计目的 (2) 二.课程设计任务与要求 (2) 三.功能分析 (3) 四.功能模块分析与设计 (3) 1.图形界面设计 (4) 2.按键处理模块 (4) 3.数字键处理模块 (5) 4.小数点处理模块 (6) 5.加减乘除运算按键处理模块 (6) 6.结果按键,即等号处理模块 (7)

7.清除模块 (8) 五.功能测试 (9) 六.课程设计总结 (10) 高级C语言实训报告 一.课程设计目的 现在大多数的计算器都具备+,-,*,/等四则运算的功能。用计算器来算数显然比用脑袋或用纸笔计算要来得方便。当我们看到一个很长很大的表达式需要得到结果时,我们就会想到计算器,这样,本程序就是为解决大家基本四则运算的问题而产生的。主要基于对表达式的分析并利用C进行编程进而实现算法的。C在程序运行效率、内存使用的可控性和编程的灵活性上均具有较大的优势,与汇编语言和C语言更具有面向对象的优点,我采用Ubuntu Linux操作系统以及GTK+2.0,以达到算法快速有效地执行。 二.课程设计任务与要求 1.使用C语言和GTK+图形库进行开发,计算器可以在装有GTK+运行环境的各种操作系统上运行;

2.实现标准型计算器上的四则运算功能(参考Windows 7系统标准型计算器); 3.根据课程设计进度对程序功能进行扩展: 添加捕捉键盘事件功能,通过PC键盘的数字键盘也可以进行输入; 为计算器添加存储功能(MR、M+、M-等按键功能),实现完整的标准型计算器; 4.实现科学型计算器上的四则运算功能(参考Windows 7系统科学型计算器或Ubuntu 系统基本型计算器)。 本课程设计内容是在Linux平台下开发一个简单的计算器程序,采用GCC编程工具和GTK+2.0工具包等软件为开发工具以及C语言知识实现图形化的计算器程序。该程序能够实现的对整数的加减乘除和小数的加减乘除。 三.功能分析 1.整数之间的加减乘除运算 2.小数之间的加减乘除运算 3.小数与整数之间的加减乘除运算 四.功能模块分析与设计 本计算器主要是完成整数之间、小数之间、整数和小数之间的加减乘除的运算,使用GTK+完成界面布局。 根据需求分析的结果,总体结构如下图所示:

Hive函数

关系运算 等值比较: = 语法:A = B 操作类型: 所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1=1; 1 不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 与表达式B不相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <> 2; 1 小于比较: < 语法: A < B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于表达式B,则为TRUE;否则为FALSE 举例:

hive> select 1 from dual where 1 < 2; 1 小于等于比较: <= 语法: A <= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于或者等于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <= 1; 1 大于比较: > 语法: A > B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 2 > 1; 1 大于等于比较: >= 语法: A >= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于或者等于表达式B,则为TRUE;否则为FALSE

c语言课程设计GTK+计算器的实现

目录 设计背景 (2) GTK+简介 (2) 程序实现 (3) 界面的构建 (3) 窗口的实现 (3) 按钮的实现 (4) 输入框的实现 (5) 回调函数的实现 (5) 数字键 (6) 小数点 (6) 运算符 (7) 等号 (7) 清除键 (8) 退格键 (8) 键盘事件 (8) 心得体会 (10) 参考文献 (10)

设计背景 GTK+简介 GTK+一开始是作为流行的GNU图像处理程序GIMP的一部分产生的,逐渐成为功能强大最受欢迎的工具包之一,因为变成了一个独立的项目。它是一个函数库,提供了一组已经制作好的被称为构件的组件,可以通过简单易懂的函数调用把这些组件和应用程序逻辑组合在一起,从而极大的简化了GUI的创建。 GTK+使用自由的LGPL许可证,它完全是用C语言编写的,绝大多数GTK也是用C语言编写的,也有许多语言绑定可以在C++,Python,PHP,Java中使用它。 GTK本身是建立在一组其它函数库上的,例如他需要Glib提供底层数据结构、类型、线程支持、事件循环和动态加载。 Glib和GObject提供了一组数据类型、函数和宏的标准替代集来进行内存管理和处理常见任务,从而实现跨平台开发,意味着GTK+能够可靠的移植到其他平台和体系结构上。 Glib还定义了一些方便的常量: #define FALSE 0 #define TRUE !FALSE 这些附加的数据类型基本上是标准C语言数据类型的代替,以及用于确保跨平台字节长度不变。 ●gint、guint、gchar、guchar、glong、gulong、gfloat和gdouble是标准C 语言数据类型的简单代替 ●gpointer与(void *)同义 ●gboolean 用于表示布尔类型的值,它事对int的一个包装 ●gint8、guint8、gint16、guint16、gint32和guint32是保证字节长度的有 符合和无符号类型 尽管GTK+是完全用C语言编写的,但是它通过GObjiect库支持对象和面向对象编程,这个库通过宏来支持对象继承和多态。为了方便起见,所有构件创建函数都返回一个GtkWidget类型。

Hive学习总结及应用

一、文档说明 熟悉Hive功能,了解基本开发过程,及在项目中的基本应用。 注意:本文档中但凡有hive库操作的语句,其后面的“;”是语句后面的,非文档格式需要。每个hive语句都要以“;”来结束,否则将视相邻两个分号“;”之间的所有语句为一条语句。 二、Hive(数据提取)概述 Hive是构建在HDFS 和Map/Reduce之上的可扩展的数据仓库。是对HADOOP的Map-Reduce进行了封装,类似于sql语句(hive称之为HQL)计算数据从而代替编写代码对mapreduce的操作,数据的来源还是HDFS上面的文件。 Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hive管理,外部表的数据在指定位置,不在Hive 的数据仓库中,只是在Hive元数据库中注册。创建外部表采用“create external tablename”方式创建,并在创建表的同时指定表的位置。 Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。

三、Hive的元数据 Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。 Hive metastore 三种存储方式: Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。 1、使用derby数据库存储元数据(内嵌的以本地磁盘作为存储),这称为“内嵌配置”。 这种方式是最简单的存储方式,只需要在或做如下配置便可。使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。 2、使用本机mysql服务器存储元数据,这称为“本地metastore”。这种存储方式需要在本地运行一个mysql服务器, 3、使用远端mysql服务器存储元数据。这称为“远程metastore”。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

9 组合框与列表框

列表框与组合框 一、教学目标 1、列表框属性、事件、方法 2、组合框属性、事件、方法 二、教学过程 1、列表框控件的主要属性: A、List(n):返回指定的项目内容。 (Ctrl+回车:换行;回车:确认) 说明:列表框中的值是数组,可通过List(下标值)的形式表示。如列表 框中的第一项,用List(0)表示,第二项,用List(1)表示,列表框中的第十项,用 List(9)表示,以此类推。 a = List1.List(0) Print a ‘输出第一项 List1.List(1) = "十堰市" ‘对数组第二元素赋值 Print List1.List(1) ‘输出第二项内容 B、Text:返回任意项目内容,只能在程序中设置。 C、ListCount:返回项目总数。 比如:列表框共有四个项目,那么ListCount 就为4。 Print List1.ListCount ‘输出表项数量的数值 D、ListIndex:返回任意的项目。 ListCount 始终比最大的ListIndex 值大1 。 x= List1.ListIndex '得到选中项索引号 Print List1.List(x) '输出选中项内容 E、Selected属性:判断列表框中的某项目是否被选中,被选中返回True,没被选中返回False。 F、MultiSelect属性:用来设置是否可以多选。值为0时只能单选,值为1时是多选,值为2时可以配合Ctrl、 Shift键进行多选。Ctrl可以选择多个不连续的对象,Shift可以选择多个连续的对象。 2、列表框控件的主要事件:列表框控件主要接收Click 与DblClick 如:Private Sub List1_Click() Print List1.List(List1.ListIndex) '输出选中项内容 End Sub 3、列表框控件的方法: A、增加项目:AddItem 用AddItem 可以为列表框增加项目,代码规则如下: '列表框名称.AddItem 项目字符[,位置值] 如:List1.AddItem "十堰市", 0 '添加项目值,并指定位置为第一个,若省略则在最后 B、清除所有:Clear用Clear 可以清除列表框中所有的内容,代码如下: 列表框名称.Clear 如:List1.Clear '清除列表框中的所有内容

hive常用函数参考手册

函数分类 HIVE CLI命令 显示当前会话有多少函数可用 SHOW FUNCTIONS; 显示函数的描述信息 DESC FUNCTION concat; 显示函数的扩展描述信息 DESC FUNCTION EXTENDED concat; 简单函数

函数的计算粒度为单条记录。 关系运算 数学运算 逻辑运算 数值计算 类型转换 日期函数 条件函数 字符串函数 统计函数 聚合函数 函数处理的数据粒度为多条记录。sum()—求和 count()—求数据量 avg()—求平均直 distinct—求不同值数 min—求最小值 max—求最人值 集合函数 复合类型构建 复杂类型访问 复杂类型长度 特殊函数 窗口函数

应用场景 用于分区排序 动态Group By Top N 累计计算 层次查询 Windowing functions lead lag FIRST_VALUE LAST_VALUE 分析函数 Analytics functions RANK ROW_NUMBER DENSE_RANK CUME_DIST PERCENT_RANK NTILE 混合函数 java_method(class,method [,arg1 [,arg2])reflect(class,method [,arg1 [,arg2..]])hash(a1 [,a2...])

UDTF lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (‘,‘ columnAlias)*fromClause: FROM baseTable (lateralView)* ateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。 常用函数Demo: create table employee( id string, money double, type string)row format delimited fields terminated by‘\t‘ lines terminated by‘\n‘ stored as textfile;load data local inpath ‘/liguodong/hive/data‘into table employee;select*from employee; 优先级依次为NOT AND OR select id,money from employee where(id=‘1001‘or id=‘1002‘)and money=‘100‘;

一步一步学GTK+之多窗口

一、按照一定的逻辑去切割代码并实现多窗口 上一篇中完成了一个简单的软件界面,考虑到这个软件主要的目的是在软件中容纳很多控件,一个窗口中不可能全部包含进去的。所以这篇内容是我们一起来学下多窗口。既然我们要实现多窗口,那么就不能把所有代码放到一个文件中,这样会很混乱的,一个文件来放一个窗口,然后用main.c的入口文件来调度它们。使用我先把文件的结构分为: main.c——入口文件 window_main.c——主窗口文件 window_test.c——测试用的子窗口文件 common_func.c——各个窗口调用的公共函数文件 既然涉及到公共函数会被其他窗口调用,我们还需要建立一些头文件,在其中加入一些宏来防止重复包含文件。 common_func.h #ifndef __COMMON_FUNC_H__ #define__COMMON_FUNC_H__ #include GdkPixbuf *create_pixbuf(const gchar * filename); void toggle_display(GtkWidget *widget, gpointer oneofwidget); #endif// __COMMON_FUNC_H__ common.c #include "common_func.h" /* @Description: 从一个图片中获取信息得到pixbuf @param: gchar filename */ GdkPixbuf *create_pixbuf(const gchar * filename) { GdkPixbuf *pixbuf; GError *error = NULL; /* * 函数gdk_pixbuf_new_from_file() 从一个图片文件中加载图象数据,从而生成一个新的pixbuf, * 至于文件中包含图象的格式,是由系统自动检测的。如果该函数返回值是NULL 的话,程序就会出现错误。 */ pixbuf = gdk_pixbuf_new_from_file(filename, &error); if(!pixbuf) {

hive创建自定义函数

hive默认的函数并不是太完整,以后我们使用的使用肯定需要自己补充一些。 下面这个例子是个简单的测试,关于自定义函数的。 函数代码 package com.example.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public final class Lower extends UDF { public Text evaluate(final Text s) { if (s == null) { return null; } return new Text(s.toString().toLowerCase()); } } 打包 javac -d Lower Lower.java jar -cvf Lower.jar -C Lower/ . 在hive中添加包 hive> add jar /home/hjl/sunwg/Lower.jar; Added /home/hjl/sunwg/Lower.jar to class path 在hive中创建函数 hive> create temporary function my_lower as …com.example.hive.udf.Lower?; OK Time taken: 0.407 seconds 使用函数 hive> select my_lower(name) from test10; 上面介绍了HIVE中的自定义函数,有一些函数是比较基础的,公用的,每次都要create temporary function不免太麻烦了。 这样的基础函数需要直接集成到hive中去,避免每次都要创建。 1,添加函数文件 $HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSunwg.java package org.apache.hadoop.hive.ql.udf; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text;

相关文档
最新文档