首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >仅使用JavaScript,我如何查询google并将单个单元格的值赋值为JavaScript变量?

仅使用JavaScript,我如何查询google并将单个单元格的值赋值为JavaScript变量?
EN

Stack Overflow用户
提问于 2018-11-02 16:42:09
回答 1查看 2.9K关注 0票数 0

我想使用几个谷歌页面中的数据来驱动一个网页。

我已经知道了如何查询我的工作表,但是数据显示为datatable,这不是我想要的。我希望能够获取查询单元格值并将其插入HTML代码中。我还将在另一个查询中使用该值,以便从不同的google表中检索其他信息。

我有两个活页:http://www.bandstand.ca/widget

此页面是我的项目的初始框架版本。我现在有“第5天”静态编码和格式化,但我想用查询数据代替它,如:http://www.bandstand.ca/widget/sas.html

我试过使用getValue(0,0),但肯定没有设置正确的东西。我对使用查询完全陌生,也不知道JavaScript是否可以对响应的内容做任何事情。我试图隐藏查询填充的div元素,只解析数据表的内容,但仍然无法找到可行的解决方案。我已经尝试过搜索api文档,但我也没有找到任何看起来正确的东西。当然,有一种方法可以提取数据并在其他html中使用它。我并不特别关心代码是否干净(我相信您可以看出,我已经将其他人的代码分割开来,以便将sas.html文件降到它所在的位置)。我只想要有用的东西。

我是一名教师,并认为这将是一个简单的小项目,建立一个课堂上的公告页面,我可以一直显示在我的房间,让它在我的课程表通过我轻松更新的谷歌页循环。到目前为止,还不容易!如果有人能帮我修改代码以得到我想要的东西,我会很感激的!

EN

回答 1

Stack Overflow用户

发布于 2018-11-03 13:40:56

你可以试试这样的东西:

代码语言:javascript
运行
AI代码解释
复制
function GetCurrentDate() {
	var currentTime = new Date();
	var month = currentTime.getMonth() + 2;
	var day = currentTime.getDate();
	var year = currentTime.getFullYear();
	var currentDate = "'" + year + "-" + month + "-" + day + "'";
	return currentDate;
}
	
function CreateUrl(key, gql) {
	var gq = 'SELECT '+ gql;
	var encodedgg = encodeURIComponent(gq);
	var url = 'https://docs.google.com/spreadsheets/d/' + key + '/gviz/tq?tq=' + encodedgg;
	return url;
}
	
function Request(url, responseFunction) {
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			var response = this.responseText.substring(this.responseText.IndexOf("(")+1, this.responseText.lastIndexOf(")"));
			var responseJSON = JSON.parse(response);
			responseFunction(responseJSON);
		}
	};
	xmlhttp.open("GET", url, true);
	xmlhttp.send();
}

function preview(elm, url) {
	fetch(url)
		.then(data => data.text())
		.then(function(response) {
			var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
			var response = JSON.parse(responseText);
			var value = response['table']['rows'][0]['c'][0]['v'];
			elm.innerHTML = value;
		})
}

var gsKey = '1-dNm_AKv3Iiy-ggLjGJKHPwUqs379QJh0e4SzbEPcJQ';
var currentDate = GetCurrentDate();
var gql = "C WHERE A = DATE " + currentDate;
var url = CreateUrl(gsKey, gql);
var previewElement = document.getElementById('preview');
preview(previewElement, url);
代码语言:javascript
运行
AI代码解释
复制
<html>
	<head>
		<title>Student Announcement System</title>
	</head>
	<body>
		<div id="preview">initial value</div>
	</body>
</html>

这是指向jsbin片段的链接。(由于CORS访问-控制-允许-来源,内联堆栈溢出段可能无法工作。)

格雷格·杜吉德的评论之后编辑

您的代码有三个问题:

  1. 你的脚本根本不起作用。试着运行以下代码片段:

代码语言:javascript
运行
AI代码解释
复制
<script>
  document.write("Text 1")
</script>

<script language = "text/javascript">
document.write("Text 2")
</script>


<script type = "text/javascript">
  document.write("Text 3")
</script>

当您运行它时,您应该得到类似于Text 1 Text 3的内容,这是因为<script language = "text/javascript">是错误的,不能工作,因此不推荐使用language参数,而应该使用type。同样在HTML5中,您可以省略type参数,所以最好使用类似于<script>document.write("Text")</script>的语法。

  1. 函数preview中有语法错误:最后一个括号(应该是)

代码语言:javascript
运行
AI代码解释
复制
// OLD CODE
/*
function preview(elm, url) {
	fetch(url)
		.then(data => data.text())
		.then(function(response) {
			var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
			var response = JSON.parse(responseText);
			var value = response['table']['rows'][0]['c'][0]['v'];
			//elm.innerHTML = value;
			DayNumber = value;
		   			 }
		     (      // ERROR IS IN THIS LINE
} 
*/



// NEW CODE
function preview(elm, url) {
	fetch(url)
		.then(data => data.text())
		.then(function(response) {
			var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
			var response = JSON.parse(responseText);
			var value = response['table']['rows'][0]['c'][0]['v'];
			//elm.innerHTML = value;
			DayNumber = value;
		   			 }
		     )      // error WAS in this line
} 

  1. 代码行: 日document.write(DayNumber); 当您调用函数时,document.write(DayNumber)变量DayNumber等于"",因为此时函数preview仍未执行。原因是函数preview的执行需要时间。(因为您是从工作表文档中检索数据,通常是从服务器或其他需要时间的类似文件中检索数据。)javascript中的代码执行是异步的,这意味着javscript不会等待函数完成执行并继续执行。请看下面的示例: 函数getData() { //需要时间从服务器、文档或其他地方获取数据的函数返回数据;} var data = getData();document.write( data ); 在第一行中调用函数getData(),但是数据将被设置为undefined,因为程序不会等待函数getData()返回其值。所以函数document.write(data)不会预览任何东西。 (另外,在另一个标记中使用脚本标记也不是很好的做法。因此,您应该避免将脚本标记放在字体标记中,比如:<font size="+6" color="#FFFF00">Day <script>document.write(DayNumber);</script></font>。) 解决此问题的方法是将id添加到font标记中,而不是在javascript函数preview中更改font标记中的文本。

代码语言:javascript
运行
AI代码解释
复制
function GetCurrentDate() {
	var currentTime = new Date();
	var month = currentTime.getMonth();
	var day = currentTime.getDate() + 1;
	var year = currentTime.getFullYear();
	var currentDate = "'" + year + "-" + month + "-" + day + "'";
	return currentDate;
}
	
function CreateUrl(key, gql) {
	var gq = 'SELECT '+ gql;
	var encodedgg = encodeURIComponent(gq);
	var url = 'https://docs.google.com/spreadsheets/d/' + key + '/gviz/tq?tq=' + encodedgg;
	return url;
}
	
function Request(url, responseFunction) {
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.onreadystatechange = function() {
		if (this.readyState == 4 && this.status == 200) {
			var response = this.responseText.substring(this.responseText.IndexOf("(")+1, this.responseText.lastIndexOf(")"));
			var responseJSON = JSON.parse(response);
			responseFunction(responseJSON);
		}
	};
	xmlhttp.open("GET", url, true);
	xmlhttp.send();
}

function preview(elm, url) {
	fetch(url)
		.then(data => data.text())
		.then(function(response) {
			var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
			var response = JSON.parse(responseText);
			var value = response['table']['rows'][0]['c'][0]['v'];
			elm.innerHTML += " " + value;
		   			 }
		     )
}   

var gsKey = '1-dNm_AKv3Iiy-ggLjGJKHPwUqs379QJh0e4SzbEPcJQ';
var currentDate = GetCurrentDate();
var gql = "C WHERE A = DATE " + currentDate;
var url = CreateUrl(gsKey, gql);
var previewElement = document.getElementById('preview');
preview(previewElement, url);
代码语言:javascript
运行
AI代码解释
复制
<html>
		<title>Student Announcement System</title>
	<body>
		<font size="+6" color="#FFFF00" id="preview">Day</font>
	</body>
</html>

最后一段代码应该是解决问题的方法。这里还有链接到jsbin代码段 (因为当您运行它时,堆栈溢出代码段可能无法工作)。

第二次格雷格·杜吉德的评论之后编辑

抱歉,回答的时间太长了。问题是:

代码语言:javascript
运行
AI代码解释
复制
var previewElement = document.getElementById('preview');

执行此行时,将找不到previewElement,并将其设置为undefined。这是因为脚本标记(<script>...</script>)中的javascript代码在body标记( body tag,<body>...</body>)之前,所以代码在body元素定义之前执行。因此,在运行页面时,首先执行javascript代码,然后定义元素<font id="preview">Day</font>。有一个简单的解决方案:您需要将脚本标记放在正文的末尾,如下所示:

代码语言:javascript
运行
AI代码解释
复制
<html>
	<head>
<style type="text/css">
<!--
body {
	background-color: #003c66;
}
-->
</style>

		<title>Student Announcement System</title>
</head>

<body>
		<font size="+6" color="#FFFF00" id="preview">Day</font>
		
		
		<script>
		function GetCurrentDate() {
			var currentTime = new Date();
			var month = currentTime.getMonth()+1;
			var day = currentTime.getDate();
			var year = currentTime.getFullYear();
			var currentDate = "'" + year + "-" + month + "-" + day + "'";
			return currentDate;
		}
			
		function CreateUrl(key, gql, sheet) {
			var gq = 'SELECT '+ gql;
			var encodedgg = encodeURIComponent(gq);
			var url = 'https://docs.google.com/spreadsheets/d/' + key + '/gviz/tq?tq=' + encodedgg + '&gid=' + sheet;
			return url;
		}
			
		function Request(url, responseFunction) {
			var xmlhttp = new XMLHttpRequest();
			xmlhttp.onreadystatechange = function() {
				if (this.readyState == 4 && this.status == 200) {
					var response = this.responseText.substring(this.responseText.IndexOf("(")+1, this.responseText.lastIndexOf(")"));
					var responseJSON = JSON.parse(response);
					responseFunction(responseJSON);
				}
			};
			xmlhttp.open("GET", url, true);
			xmlhttp.send();
		}

		function preview(elm, url) {
			fetch(url)
				.then(data => data.text())
				.then(function(response) {
					var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
					var response = JSON.parse(responseText);
					var value = response['table']['rows'][0]['c'][0]['v'];
					elm.innerHTML += " " + value;
							 }
					 )
		}   

		var gsKey = '1-dNm_AKv3Iiy-ggLjGJKHPwUqs379QJh0e4SzbEPcJQ';
		var gsSheet='349215948';
		var currentDate = GetCurrentDate();
		var gql = "C WHERE A = DATE " + currentDate;
		var url = CreateUrl(gsKey, gql, gsSheet);
		var previewElement = document.getElementById('preview');
		preview(previewElement, url);
		</script>
		
</body>
</html>

同样,这里还有jsbin片段,它应该可以工作。

这是格雷格·杜吉德的评论之后编辑

问题在于您的查询:

代码语言:javascript
运行
AI代码解释
复制
var PERIODgql = "C WHERE A = " + value + " AND B = " + CurrentPeriod;

CurrentPeriod是字符串,所以您需要在它周围添加单引号,如下所示:

代码语言:javascript
运行
AI代码解释
复制
var PERIODgql = "C WHERE A = " + value + " AND B = '" + CurrentPeriod + "'";

创建它时,PERIODgql将类似于:

代码语言:javascript
运行
AI代码解释
复制
"C WHERE A = 1 AND B = 'P5'"

这些查询类似于SQL查询(用于获取来自SQL数据库的数据),您可以阅读更多有关此这里的信息。

我还注意到您的函数FindCurrentPeriod

代码语言:javascript
运行
AI代码解释
复制
function FindCurrentPeriod() {
    var CurrentPeriod;
    var CurrentDate = new Date();

    //////////////////////////////
    //FOR TESTING VARIOUS TIMES
    CurrentDate.setHours(14);
    CurrentDate.setMinutes(0);
    //////////////////////////////


    var CurrentHour = CurrentDate.getHours();
    var CurrentMinute = CurrentDate.getMinutes();
    if (CurrentHour < 8) {
        CurrentPeriod = "Before School";
    }

    if (CurrentHour == 8) {
        if (CurrentMinute < 40) {
            CurrentPeriod = "Before School";
        } else {
            CurrentPeriod = "P1";
        }
    }

    if (CurrentHour == 9) {
        if (CurrentMinute < 40) {
            CurrentPeriod = "P1";
        } else {
            if (CurrentMinute < 45) {
                CurrentPeriod = "B12";
            } else {
                CurrentPeriod = "P2";
            }
        }
    }
    if (CurrentHour == 10) {
        if (CurrentMinute < 37) {
            CurrentPeriod = "P2";
        } else {
            if (CurrentMinute < 47) {
                CurrentPeriod = "B23";
            } else {
                CurrentPeriod = "P3";
            }
        }
    }

    if (CurrentHour == 11) {
        if (CurrentMinute < 39) {
            CurrentPeriod = "P3";
        } else {
            if (CurrentMinute < 44) {
                CurrentPeriod = "B34";
            } else {
                CurrentPeriod = "P4";
            }
        }
    }
    if (CurrentHour == 12) {
        if (CurrentMinute < 36) {
            CurrentPeriod = "P4";
        } else {
            CurrentPeriod = "Lunch";
        }
    }

    if (CurrentHour == 13) {
        if (CurrentMinute < 13) {
            CurrentPeriod = "Lunch";
        } else {
            CurrentPeriod = "P5";
        }
    }

    if (CurrentHour == 14) {
        if (CurrentMinute < 5) {
            CurrentPeriod = "P5";
        } else {
            if (CurrentMinute < 10) {
                CurrentPeriod = "B56";
            } else {
                CurrentPeriod = "P6";
            }
        }
    }

    if (CurrentHour == 15) {
        if (CurrentMinute < 2) {
            CurrentPeriod = "P6";
        } else {
            CurrentPeriod = "After School";
        }
    } else {
        CurrentPeriod = "After School";
    }
    return CurrentPeriod;

}

虽然这样做很有效,但阅读起来并不容易,而且还存在一些重复的条件,因此如果以后需要更改代码,这将很难做到。因此,我建议使用一个函数来帮助您比较时间(以小时和分钟为单位)。您可以添加这样的短函数:

代码语言:javascript
运行
AI代码解释
复制
function time(hours, minutes) {
    return hours*60 + minutes;
}

现在您可以比较10:50和11:25的时间,如下所示:

代码语言:javascript
运行
AI代码解释
复制
if (time(10,50) < time(11,25)) {
    //part when you do what you want if condition is ture
}

这样您就可以像这样编写函数FindCurrentPeriod

代码语言:javascript
运行
AI代码解释
复制
function FindCurrentPeriod() {
    var CurrentPeriod;
    var CurrentDate = new Date();

    //////////////////////////////
    //FOR TESTING VARIOUS TIMES
    CurrentDate.setHours(14);
    CurrentDate.setMinutes(0);
    //////////////////////////////

    var CurrentHour = CurrentDate.getHours();
    var CurrentMinute = CurrentDate.getMinutes();
    var cirrentTime = time(CurrentHour, CurrentMinute);

    if (cirrentTime < time(8, 40)) {
        CurrentPeriod = "Before School";
    }
    else if (cirrentTime < time(9, 40)) {
        CurrentPeriod = "P1";
    }
    else if (cirrentTime < time(9, 45)) {
        CurrentPeriod = "B12";
    }
    else if (cirrentTime < time(10, 37)) {
        CurrentPeriod = "P2";
    }
    else if (cirrentTime < time(10, 47)) {
        CurrentPeriod = "B23";
    }
    else if (cirrentTime < time(11, 39)) {
        CurrentPeriod = "P3";
    }
    else if (cirrentTime < time(11, 44)) {
        CurrentPeriod = "P3";
    }
    else if (cirrentTime < time(12, 36)) {
        CurrentPeriod = "P4";
    }
    else if (cirrentTime < time(13, 13)) {
        CurrentPeriod = "Lunch";
    }
    else if (cirrentTime < time(14, 5)) {
        CurrentPeriod = "P5";
    }
    else if (cirrentTime < time(14, 10)) {
        CurrentPeriod = "B56";
    }
    else if (cirrentTime < time(15, 2)) {
        CurrentPeriod = "P6";
    }
    else {
        CurrentPeriod = "After School";
    }


    return CurrentPeriod;

}

这是更短,也更容易阅读和修改,如果需要。

下面是堆栈溢出代码段中的全部代码(同样,我将在下面添加jsbin代码段,因为内联堆栈溢出代码段可能由于CORS规则而无法工作):

代码语言:javascript
运行
AI代码解释
复制
function preview2(elm, url) {
    fetch(url)
        .then(data => data.text())
        .then(function(response) {
            var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
            var response = JSON.parse(responseText);
            var value = response['table']['rows'][0]['c'][0]['v'];
            elm.innerHTML = value;
        })
}

function GetCurrentDate() {
    var currentTime = new Date();
    var month = currentTime.getMonth() + 1;
    var day = currentTime.getDate();
    var year = currentTime.getFullYear();
    var currentDate = "'" + year + "-" + month + "-" + day + "'";
    return currentDate;
}

function CreateUrl(key, gql, sheet) {
    var gq = 'SELECT ' + gql;
    var encodedgg = encodeURIComponent(gq);
    var url = 'https://docs.google.com/spreadsheets/d/' + key + '/gviz/tq?tq=' + encodedgg + '&gid=' + sheet;
    return url;
}

function time(hours, minutes) {
	return hours*60 + minutes;
}


function FindCurrentPeriod() {
    var CurrentPeriod;
    var CurrentDate = new Date();

    //////////////////////////////
    //FOR TESTING VARIOUS TIMES
    CurrentDate.setHours(14);
    CurrentDate.setMinutes(0);
    //////////////////////////////


    var CurrentHour = CurrentDate.getHours();
    var CurrentMinute = CurrentDate.getMinutes();
	var cirrentTime = time(CurrentHour, CurrentMinute);
	
	if (cirrentTime < time(8, 40)) {
		CurrentPeriod = "Before School";
	}
	else if (cirrentTime < time(9, 40)) {
		CurrentPeriod = "P1";
	}
	else if (cirrentTime < time(9, 45)) {
		CurrentPeriod = "B12";
	}
	else if (cirrentTime < time(10, 37)) {
		CurrentPeriod = "P2";
	}
	else if (cirrentTime < time(10, 47)) {
		CurrentPeriod = "B23";
	}
	else if (cirrentTime < time(11, 39)) {
		CurrentPeriod = "P3";
	}
	else if (cirrentTime < time(11, 44)) {
		CurrentPeriod = "P3";
	}
	else if (cirrentTime < time(12, 36)) {
		CurrentPeriod = "P4";
	}
	else if (cirrentTime < time(13, 13)) {
		CurrentPeriod = "Lunch";
	}
	else if (cirrentTime < time(14, 5)) {
		CurrentPeriod = "P5";
	}
	else if (cirrentTime < time(14, 10)) {
		CurrentPeriod = "B56";
	}
	else if (cirrentTime < time(15, 2)) {
		CurrentPeriod = "P6";
	}
	else {
		CurrentPeriod = "After School";
	}
	
    return CurrentPeriod;
}

function preview1(elm, url) {
    fetch(url)
        .then(data => data.text())
        .then(function(response) {
            var responseText = response.substring(response.indexOf("(") + 1, response.lastIndexOf(")"));
            var response = JSON.parse(responseText);
            var value = response['table']['rows'][0]['c'][0]['v'];
            elm.innerHTML += " " + value;

            var CurrentPeriod = FindCurrentPeriod();
            var PERIODgsSheet = '618896702';
            var PERIODgql = "C WHERE A = " + value + " AND B = '" + CurrentPeriod + "'";
            var PeriodURL = CreateUrl(gsKey, PERIODgql, PERIODgsSheet);
            var periodElement = document.getElementById('period1');
            preview2(periodElement, PeriodURL);


        })

}




var gsKey = '1-dNm_AKv3Iiy-ggLjGJKHPwUqs379QJh0e4SzbEPcJQ';

var DAYgsSheet = '349215948';
var currentDate = GetCurrentDate();
var DAYgql = "C WHERE A = DATE " + currentDate;
var DayURL = CreateUrl(gsKey, DAYgql, DAYgsSheet);
var previewElement = document.getElementById('preview');
preview1(previewElement, DayURL);
代码语言:javascript
运行
AI代码解释
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <meta http-equiv="refresh" content="600" />
      <title>Student Announcement System</title>
      <style type="text/css">
         <!--
            body {
            	background-color: #003c66;
            }
            -->
      </style>
      <!-- CSS Code -->
      <style type="text/css" scoped>
         .GeneratedMarquee {
         font-family:'Arial Black', sans-serif;
         font-size:8em;
         font-weight:bold;
         line-height:2em;
         text-align:left;
         color:#ffff00;
         background-color:#003c66;
         padding:40pt;
         }
      </style>
   </head>
   <body>
      <table width=100%>
         <tr>
            <td width=240px>
               <iframe scrolling="no" frameborder="no" clocktype="html5" style="overflow:hidden;border:0;margin:0;padding:0;width:240px;height:80px;"src="https://www.clocklink.com/html5embed.php?clock=004&timezone=MST&color=white&size=240&Title=&Message=&Target=&From=2018,1,1,0,0,0&Color=white"></iframe>
            </td>
            <td nowrap>
               <center>
                  <font size="80px" color="#FFFF00" id="preview">DAY </font>
               </center>
            </td>
            <td width=100%>
               <a class="weatherwidget-io" href="https://forecast7.com/en/53d54n113d49/edmonton/" data-label_1="EDMONTON" data-font="Helvetica" data-icons="Climacons Animated" data-days="7" data-theme="original" data-basecolor="#003c66" ></a>
               <script>
                  !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='https://weatherwidget.io/js/widget.min.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','weatherwidget-io-js');
               </script>
            </td>
         </tr>
      </table>
      <font color="FFFFFF", size="+6">
         <script language=javascript>
            var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
            var today  = new Date();
            
            document.write(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
            formattedDate = today.toLocaleDateString("en-US", options);
            
         </script>
      </font>
      <br><font size="80px" color="#FFFF00" id="period1">Class:</font>
      <script src="sas.js"></script>
   </body>
</html>

这是jsbin片段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53127408

复制
相关文章
什么时候使用Dockerfiles(什么时候不使用……)
在这篇文章中,我们将讨论一些使用 Dockerfile 的最佳实践,探索一些注意事项,并使用 Dockerfile 和云原生 Buildpacks 构建应用。你将了解每种工具最擅长的工作是什么,以及如何决定何时使用它们。
CNCF
2021/12/15
1.8K0
什么时候使用Dockerfiles(什么时候不使用……)
什么时候,使用Excel?
极力推崇PowerBI是创作PowerBI大师的初衷,虽然从Excel到PowerBI有极其诱人的理由,但我们不可否认的是Excel本身作为全世界最广泛的办公工具它具有不可替代的应用场景。
公众号PowerBI大师
2019/08/07
2K0
什么时候,使用Excel?
我应该在什么时候使用 Apache Druid
许多公司都已经将 Druid 应用于多种不同的应用场景。请访问 使用 Apache Druid 的公司 页面来了解都有哪些公司使用了 Druid。
HoneyMoose
2021/07/24
7080
我应该在什么时候使用 Apache Druid
什么时候使用 CAP?
大多数人很难理解变革。当员工已经习惯了他们操作某个流程的方式时,他们很少会接受创新或改进。然而,我们总是需要变革。无论是提高生产效率,减少浪费,还是提高制造速度,变革都会因多种原因而发生。尽管变革是必要的,但很难确保它们的成功。对于执行过程改进项目的六西格玛专业人员,有一种简单有效的方法可以轻松、顺利地完成变革。本文,与大家讨论CAP方法,它是什么,以及它如何防止新流程失败。
用户9972271
2022/09/14
4020
什么时候应该使用volatile
volatile 修饰符告诉编译程序不要对该变量所参与的操作进行某些优化。在两种特殊的情况下需要使用volatile 修饰符:第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样),第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
杨源鑫
2019/07/22
2.1K0
什么时候使用SWOT分析?
SWOT分析,一种结构化的规划方法,用于评估项目或企业中涉及的优势、劣势、机会和威胁。SWOT分析可以对产品、地点、行业或个人来进行。它包括明确企业或项目的目标,并确定对实现该目标有利和不利的内部和外部因素。
用户9972271
2023/02/22
5230
什么时候使用前置声明
我们可以站在编译器的角度来思考这个问题:当你前置声明一个类型时,编译器就会知道这个类型的存在,但没法知道它的布局、大小、成员…所以我们也把前置声明的类型叫做不完全类型(incomplete type)。
ClearSeve
2022/02/10
8800
什么时候用Goroutine?什么时候用Channel?
什么场景下用channel合适呢? 通过全局变量加锁同步来实现通讯,并不利于多个协程对全局变量的读写操作。 加锁虽然可以解决goroutine对全局变量的抢占资源问题,但是影响性能,违背了原则。 总结:为了解决上述的问题,我们可以引入channel,使用channel进行协程goroutine间的通信。 Go语言中的操作系统线程和goroutine的关系: 一个操作系统线程对应用户态多个goroutine。 go程序可以同时使用多个操作系统线程。 goroutine和OS线程是多对多的关系,即m:n。 Go
王中阳Go
2022/10/26
9900
什么时候使用 useMemo 和 useCallback
性能优化总是会有成本,但并不总是带来好处。我们来谈谈 useMemo 和 useCallback 的成本和收益。
Nealyang
2020/03/15
2.5K0
究竟什么时候该使用MQ?
任何脱离业务的组件引入都是耍流氓。引入一个组件,最先该解答的问题是,此组件解决什么问题。
架构师之路
2020/03/23
6460
究竟什么时候该使用MQ?
JS箭头函数 什么时候用 ,什么时候不能用,我总结出了4点
大家好,我是zz,相信大家平时在码代码中,都知道箭头函数的用法,但是在面试中,让他讲讲箭头函数的用法,都讲的很片面,通过阅读本文,我们带大家系统的总结下箭头函数,形成自己的箭头函数的知识结构,这样在面试是面试官问到就小菜一碟。
玖柒的小窝
2021/09/24
1.3K0
什么时候才应该使用HBase?
在使用HBase一定要明白HBase的适用场合,因为HBase并非适用于每种情况。 首先,要确认有足够多的数据存入HBase。 如 果有几亿或者几十亿条记录要存入HBase,那么HBase就是一个正确的选择;否则如果你仅有几百万条甚至更少的数据,那么HBase当然不是正确的选 择,这种情况下应当选择传统的关系型数据库,因为如果这么少的数据存入HBase,就会导致数据堆积在一两个节点上,而HBase集群内部的其他节点都处 于空闲状态。 其次,要确认即便不使用传统关系型数据库提供的额外功能(比如数据库的列有强类
cloudskyme
2018/03/20
1.2K0
到底什么时候该使用MQ?
一、缘起 一切脱离业务的架构设计与新技术引入都是耍流氓。 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。 就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。 最近分享了几篇MQ相关的文章: 《MQ如何实现延时消息》 《MQ如何实现消息必达》 《MQ如何实现幂等性》 不少网友询问,究竟什么时候使用MQ,MQ究竟适合什么场景,故有了此文。 二、MQ是干嘛的 消息总线(Message Queue),后文称MQ,是一种跨进程的通
架构师之路
2018/03/01
2.4K0
到底什么时候该使用MQ?
守护线程是什么_守护线程什么时候结束
守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。
全栈程序员站长
2022/11/03
6980
R变量索引 - 什么时候使用 @或$
单细胞分析经常用到Seurat包,整个分析过程中的中间结果都在一个Seurat对象中存储。常需要从里面提取对应数据进行后续分析,有时会用$,有时会用@,怎么选择呢?
生信宝典
2019/12/11
1.5K0
什么时候使用@Controller和@RestController
而@RestController注解就是@ResponseBody + @Controller合在一起的作用。
余生大大
2022/11/02
4370
什么时候调用layoutSubviews
如果你想强制更新布局,不要直接调用此方法。你可以调用setNeedsLayout方法;如果你想立即数显你的views,你需要调用layoutIfNeeded方法。
全栈程序员站长
2022/09/13
4390
Python异步: 什么时候使用异步?(3)
从广义上讲,Asyncio 是新的、流行的、讨论广泛的和令人兴奋的。然而,对于何时应该在项目中采用它存在很多困惑。
数据科学工厂
2023/02/27
1K0
Python异步: 什么时候使用异步?(3)
Python异步: 什么时候使用异步?(3)
从广义上讲,Asyncio 是新的、流行的、讨论广泛的和令人兴奋的。然而,对于何时应该在项目中采用它存在很多困惑。
数据科学工厂
2023/01/28
1.1K0
什么时候索引失效
强制走索引 使用explain执行计划看,走的那个查询范围是什么,影响行数是多少,是否走了全表查询
2021/09/07
3330

相似问题

我什么时候使用fabs,什么时候使用std::abs就足够了?

40

质量对ROI -什么时候足够好,足够好?

89

在创建GeoSeries时,我什么时候需要使用GeoDataFrame,什么时候列表就足够了?

116

我什么时候使用ByteString,什么时候不使用?

23

我什么时候能打破混叠规则?

46
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档