這里我們介紹ClickHouse的基本語法,使用環境是騰訊云的ClickHouse。默認情況下,ClickHouse 在進行集群緯度執行建表等 DDL 操作時需要手動添加 ON CLUSTER XXX 語法。
下面我會介紹常用的語法 [其中 launch 為我們的數據庫名]
我們創建一張廣告點擊表作為演示案例,點擊表click的創建語句
CREATE TABLE click ON CLUSTER default_cluster (
id UInt64,
product_type UInt32,
channel_type String,
agent_name String,
advertiser_id String,
aid String,
request_id String,
imei String,
idfa String,
android_id String,
oaid String,
os String,
mac String,
ip String,
ts String,
callback_url String,
data String,
expire DateTime,
create_time date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(create_time)
PRIMARY KEY id
ORDER BY id;
在ClickHouse中可以通過SHOW CREATE TABLE語法來生成建表語句,例如:
SHOW CREATE TABLE test_table
SHOW CREATE launch.click;
在ClickHouse中可以通過RENAME TABLE語法來修改表名語句,例如:
RENAME TABLE table_name TO table_name_new ON CLUSTER default_cluster;
RENAME TABLE click TO click_new ON CLUSTER default_cluster;
在ClickHouse中,可以使用DESCRIBE語法來查看表的結構,例如:
DESCRIBE table_name;
DESCRIBE launch.click;
修改表結構,添加一個新列:
ALTER TABLE table_name ADD COLUMN new_column_name type;
ALTER TABLE click ON CLUSTER default_cluster
ADD COLUMN channel_id String;
ALTER TABLE table_name [on cluster cluster_name]
comment COLUMN column_name "message"
ALTER TABLE click ON CLUSTER default_cluster
comment COLUMN create_time '創建時間';
刪除表中的一個列:
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE click ON CLUSTER default_cluster
DROP COLUMN channel_id
修改某個列的數據類型:
ALTER TABLE table_name MODIFY COLUMN column_name new_type;
ALTER TABLE click ON CLUSTER default_cluster
MODIFY COLUMN create_time DateTime;
刪除表語法格式:DROP TABLE table_name ;
DROP TABLE click ON CLUSTER default_cluster;
修改單條記錄
修改表中指定記錄的某個列的值
ALTER TABLE table_name UPDATE column_name = new_value WHERE condition;
ALTER TABLE click
UPDATE agent_name ='xm' where id = 271494392
批量修改記錄
批量修改表中的多條記錄:
ALTER TABLE table_name UPDATE column_name = new_value WHERE condition;
ALTER TABLE table_name DELETE WHERE condition;
ALTER TABLE click
DELETE where id = 271494392
select * from click_cost
where create_time>='2024-01-16' and create_time<'2024-01-17'
and toFloat32(cost) > 0.01
ClickHouse中的修改操作主要是通過重寫表數據來完成的,而不是更新原始數據。這也意味著點擊修改操作會帶來較大的性能損失,特別是在大表上的修改會極大地影響性能。因此,盡量避免在ClickHouse上進行大量更新操作。
內容是《Web前端開發之Javascript視頻》的課件,請配合大師哥《Javascript》視頻課程學習。
為了方便構建表格,HTML DOM為表格專門創建了HTMLTableElement 接口;其繼承自HTMLElement接口;
該接口提供了專門的屬性和方法來處理表格的布局與呈現;
HTMLTableElement接口屬性:
var table = document.getElementsByTagName("table")[0];
console.log(table.caption);
console.log(table.tHead);
console.log(table.tBodies);
console.log(table.tFoot);
console.log(table.rows);
console.log(table.rows[0]);
console.log(table.rows[table.rows.length-1]);
另外,HTMLTableElement對象還擁有一些表現性的屬性,但這些屬性已建議不被使用,因為可以使用CSS來指定樣式,如;
以上屬性除了summary,都可以使用CSS進行定義,所以盡量不要再使用;
HTMLTableElement接口方法:
createCaption():返回表格元素的標題,如該表沒有標題,這個方法創建并返回標題,隨后可以使用其他方法對其添加內容;
deleteCaption():移除表格元素的<caption>;
var table = document.getElementsByTagName("table")[0];
// 也可以創建一個,并添加到DOM樹中
var table = document.createElement("table");
document.body.appendChild(table);
var caption = table.createCaption();
caption.innerHTML = "Web前端開發課程";
table.deleteCaption();
createTHead():返回表元素的tHead對象,如果表元素中沒有<thead>,則創建并返回;注意:如果不存在<thead>,該方法創建<thead>并直接插入表中;
deleteTHead():移除表元素中的<thead>;
var thead = table.createTHead(); // 如果不存在,則創建
console.log(thead);
var row = thead.insertRow(0);
row.insertCell(0);
row.insertCell(1);
row.insertCell(2);
table.deleteTHead();
createTFoot():返回表元素的tHead對象,如果表元素中沒有<thead>,則創建并返回;
deleteTFoot():移除表元素中的<tfoot>;
var tfoot = table.createTFoot();
console.log(tfoot);
var row = tfoot.insertRow(0);
row.insertCell(0);
row.insertCell(1);
row.insertCell(2);
table.deleteTFoot();
createTBody()方法:創建并返回表元素的<tbody>;
注意:與createTHead()、createTFoot()方法的不同的是,createTBody()可以創建多個<tbody>元素,新創建的<tbody>在最后位置;
新創建的<tbody>元素會被保存到tBodies集合中;
var tbody = table.createTBody();
console.log(tbody);
var row = tbody.insertRow(0);
row.insertCell(0);
row.insertCell(1);
row.insertCell(2);
console.log(table.tBodies);
insertRow(index):向rows集合中在指定位置插入行;即在表元素中index位置插入新行<tr>,并返回對該新行的類型為HTMLTableRowElement對象;
table及tbody都可以調用該方法;
如果一個表有多個<tbody>元素,默認情況下,新行將插入到最后的<tbody>;
var row = table.insertRow(0); // 第一行
console.log(row);
table.insertRow(); // 最后一行
table.insertRow(-1); // 最后一行
table.insertRow(table.rows.length); // 最后一行
// 如果存在第二個<body>,并且指定的index=4位于該<body>中,則在此處添加
table.insertRow(4);
console.log(table.rows);
要將行插入特定的<tbody>,先取得該<tbody>對象,再使用該對象執行insertRow()方法;但index不能超過此<tbody>的索引下界;
var tbody = table.tBodies[0];
tbody.insertRow(); // 在第一個<body>的最后添加新行
tbody.insertRow(table.rows.length); // 異常
deleteRow(index):刪除指定位置的行;如果 index 值為 -1,最后一行會被移除;
table.deleteRow(1);
var tbody = table.tBodies[1];
tbody.deleteRow(1);
HTMLTableRowElement接口對象:
該類型表示表格中的一行(<tr>),它定義了若干操作當前行的屬性和方法;
rowIndex屬性:返回該行在整個表中的邏輯位置,即索引,如果該行不屬于表,則返回-1;
var row = table.rows[1];
console.log(row.rowIndex); // 1
var tbody = table.tBodies[1];
var row = tbody.rows[1];
console.log(row.rowIndex); // 4
sectionRowIndex屬性:返回該行在所屬部分(如<thead>、<tbody>和<tfoot>部分)中的邏輯位置,如果該行不屬于某部分,則返回-1;
var row = table.rows[1];
console.log(row.sectionRowIndex); // 1
var tbody = table.tBodies[1];
var row = tbody.rows[1];
console.log(row.sectionRowIndex); // 1
cells:返回某個行中的所有單元格的HTMLCollection集合;該集合中保存著類型為HTMLTableCellElement的cell對象;
var row = table.rows[1];
console.log(row.cells); // HTMLCollection
console.log(row.cells[0]);
insertCell(index):向cells集合中的指定位置插入一個單元格,即在<tr>的index位置插入<td>,返回對新插入單元格的引用;如果index值為空或者為-1或者等于當前行中單元格的數目,則新的單元格將被追加到當前行的最后;
插入的新Cell對象,可以使用其他DOM方法添加子元素或內容;
var row = table.insertRow(-1);
var cell1 = row.insertCell(0);
cell1.appendChild(document.createTextNode("4"));
var cell2 = row.insertCell(1);
cell2.innerHTML = "Web開發";
該方法不能創建<th>元素,如果需要創建<th>,必須使用document.createElement()方法及Node.insertBefore()或相關的方法來創建和插入<th>元素;
deleteCell(index):刪除行中給定位置的單元格;
row.deleteCell(0);
HTMLTableCellElement接口:
表示表元素中的單元格,包括<th>及<td>元素;其繼承自HTMLElement接口;
var row = table.insertRow();
var cell = row.insertCell();
cell.innerHTML = "Web前端開發";
console.log(cell.cellIndex); // 0
cell.colSpan = "3"; // 跨3列
var cell = table.rows[1].cells[1];
cell.rowSpan = 2; // 跨行
table.rows[2].deleteCell(2);
使用這些屬性和方法,可以極大地減少創建表格所需的代碼量,如:
var table = document.createElement("table");
table.border = "1";
table.width = "600px";
var caption = table.createCaption();
caption.innerHTML = "Web前端開發課程";
var thead = table.createTHead();
var row = thead.insertRow();
var th1 = document.createElement("th");
th1.appendChild(document.createTextNode("序號"));
row.appendChild(th1);
var th2 = document.createElement("th");
th2.appendChild(document.createTextNode("課程"));
row.appendChild(th2);
var tbody = table.createTBody();
tbody.insertRow();
tbody.rows[0].insertCell();
tbody.rows[0].cells[0].appendChild(document.createTextNode("1"));
tbody.rows[0].insertCell();
tbody.rows[0].cells[1].appendChild(document.createTextNode("HTML"));
tbody.insertRow();
tbody.rows[1].insertCell();
tbody.rows[1].cells[0].appendChild(document.createTextNode("2"));
tbody.rows[1].insertCell();
tbody.rows[1].cells[1].appendChild(document.createTextNode("CSS"));
var tfoot = table.createTFoot();
tfoot.insertRow();
var cell = tfoot.rows[0].insertCell();
cell.colSpan = 2;
cell.align = "right";
cell.innerHTML = "由大師哥王唯主講";
document.body.appendChild(table);
生成簡單的空表格:
<style>
#mytable{width: 400px; border: 1px solid lightgreen;}
#mytable td{padding: .5em; border: 1px solid lightgreen;}
</style>
<script>
function MyTable(id, caption, rows, cols){
this.id = id ? id : "table";
this.caption = caption ? caption : undefined;
this.rows = rows ? rows : 2;
this.cols = cols ? cols : 2;
var table = document.createElement("table");
table.id = this.id;
if(this.caption){
var _caption = table.createCaption();
_caption.innerText = this.caption;
}
for(var i=0; i<this.rows; i++){
var _rows = table.insertRow();
for(var j = 0; j < this.cols; j++){
var _cell = _rows.insertCell();
_cell.appendChild(document.createTextNode(""));
}
}
return table;
}
var t = new MyTable("mytable","我的表格",4,3);
document.body.appendChild(t);
</script>
控制臺表格:
console.table(data [, columns])方法:
將數據以表格的形式顯示;這個方法需要一個必須參數data,data必須是一個數組或者是一個對象;
它會把數據data以表格的形式打印出來,數組中的每一個元素(或對象中可枚舉的屬性)將會以行的形式顯示在表格中;
// 打印一個由字符串組成的數組
console.table(["HTML","CSS","Javascript"]);
表格的第一列是index,如果數據data是一個數組,那么這一列的單元格的值就是數組的索引,如果數據是一個對象,那么它們的值就是各對象的屬性名稱;;
// 打印一個屬性值是字符串的對象
function Person(firstName, lastName){
this.firstName = firstName;
this.lastName = lastName;
}
var p = new Person("王","唯");
console.table(p);
打印復合的參數類型:
如果需要打印的元素在一個數組中,或者需要打印的屬性在一個對象,并且他們本身就是一個數組或者對象,則將會把這個元素顯示在同一行,每個元素的成員占一列;
// 二元數組的打印
var people = [["wang","wei"],["jing","jing"],["juan","zi"]];
console.table(people);
// 打印一個包含對象的數組
var wang = new Person("王","唯");
var jing = new Person("靜","靜");
var juan = new Person("娟","子");
// 如果數組中包含該對象,打印出來的列標簽將是該對象的屬性名
console.table([wang, jing, juan]);
// 打印屬性名是對象的對象
var family = {};
family.mother = jing;
family.father = wang;
family.daughter = juan;
console.table(family);
選擇要隱藏的列:
console.table()會把所有元素羅列在每一列,可以使用columns參數選擇要顯示的列的子集;其是一個包含列的名稱的數組;
// 一個對象數組,只打印 firstName
console.table([wang, jing, juan],"firstName");
按列重新排序:
可以點擊每列的頂部標簽來重排輸出的表格;
Web前端開發之Javascript-零點程序員-王唯
擊鼠標這個操作,相信很多職場人都非常的熟悉。我們可以用它來快速打開某個程序。不會真的有人打開程序,還是點一下鼠標左鍵然后再點一下鼠標右鍵吧!效率太低了!
在Excel中雙擊鼠標的作用非常多,大多數都是一些小功能,但是卻可以快速的提高我們的工作效率,今天就跟大家分享幾個Excel比較實用的雙擊小技巧吧
想要學習Excel,這里↑↑↑↑
選中一個格式后,雙擊格式刷,就能鎖定格式刷,這樣的話就能快速設置多個區域的格式,只有按下ESC鍵,才會退出格式刷
公式輸入完畢后,把鼠標放在單元格的右下角,鼠標就會變為一個黑色的十字,這個時候雙擊下,就能快速地填充公式,再也不用一行一行的拖動了。
首先在單元格中輸入1跟2,然后選擇1跟2,將鼠標放在2這個單元格的右下角,當鼠標變為黑色十字,直接雙擊填充即可快速設置序號
首先點擊列標號然后選擇序號的整列數據,隨后將鼠標放在兩列之間的位置,鼠標變為左右方向的黑色箭頭,直接雙擊下,就會將表格調整為合適的列寬
與上一個操作類似,只需根據列標號來選擇數據,隨后將鼠標放在兩行之間,鼠標會變成一個上下方向的黑色箭頭,直接雙擊下即可。
雙擊Sheet名稱,就能快速的更改Sheet名稱,再也不用點擊鼠標右鍵來一步一步的更改的。
只需將鼠標放在隱藏區域的行標號或者列標號處,這樣的話鼠標就會變為上下或者左右的黑色箭頭,只需雙擊一下,就能快速的取消隱藏的數據
功能區顯示狀態下,我們只需雙擊任意一個功能組名稱(在這里雙擊開始)就能將功能組隱藏掉,再次雙擊工作組名稱,隱藏的功能區就會顯示出來了
全屏狀態下雙擊Excel最上面的右側區域,就能快速的將Excel縮小,再次雙擊這個位置,Excel就會又變為全屏顯示
雙擊Excel的左上角,就能快速的調出Excel的關閉界面,這個感覺作用不是太大,聊勝于無吧~
雙擊Excel公式,被公式引用的單元格就會被設置顏色,就能快速看出公式引用了哪些單元格,
Excel圖表的元素還是比較多的,我們想要設置那一部分,就直接在其上方雙擊鼠標,就能在右側顯示它對應的設置窗口,還是非常方便的。
以上就是今天分享的12個Excel中雙擊的小技巧,你還知道哪些實用的雙擊小技巧呢?可以留言討論哦~
我是Excel從零到一,關注我,持續分享更多Excel技巧
*請認真填寫需求信息,我們會在24小時內與您取得聯系。